feat(agent-toolkit): state prerequisite tool ordering for board, view, and column tools - #464
Open
RomKadria wants to merge 1 commit into
Open
feat(agent-toolkit): state prerequisite tool ordering for board, view, and column tools#464RomKadria wants to merge 1 commit into
RomKadria wants to merge 1 commit into
Conversation
…, and column tools
Discovery tools (schema/id/revision lookups) and the write tools that depend
on them often didn't state the ordering between them, so callers guessed column
ids, revisions, and settings shapes instead of fetching them first. Prerequisites
are now stated on both sides of each pair. No input schemas or behavior changed.
Also addresses a widely-reported create_column failure: get_board_info returns
each column's raw settings value under a "settings" key, and agents were copying
the whole object into the columnSettings parameter, producing doubly-nested
{"settings": {"labels": [...]}} payloads that fail schema validation. Confirmed
against a live board — the status column's settings value is {"labels": [...]},
one level below what agents were sending. get_board_info now warns against
copying it verbatim and points at get_column_type_info for the correct shape.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Split out of #463 — this PR covers the board / view / column tools only. The remaining domains (object schemas, forms, automations, sprints, dynamic GraphQL API, board activity) are in the sibling PR.
Why
Discovery tools (schema/id/revision lookups) and the write tools that depend on them often didn't state the ordering between them, so callers guessed column ids, revisions, and settings shapes instead of fetching them first. Prerequisites are now stated on both sides of each pair — the upstream tool says what it should be called before, the downstream tool says what to call first.
Description-only changes. No input schemas, GraphQL operations, or runtime behavior changed.
The
create_columnsettings bugThis also addresses a widely-reported
create_columnschema validation failure (103 sessions / 59 users / 58 orgs on the internal issue tracker, 8.8% ofcreate_columnexecutions).Agents were sending:
{"settings": {"labels": [{"label": "Cat"}]}}instead of:
{"labels": [{"label": "Cat"}]}Root cause:
get_board_info— which most write tools declare as their required precondition — returns each column with its raw API config under asettingskey:{ "id": "project_status", "title": "Status", "type": "status", "settings": { "labels": [{ "label": "Working on it", "index": 1, ... }] } }Verified against a live board. The value of
settingsis already almost exactly the correctcolumnSettingsshape — so the only mistake is grabbing the enclosing object instead of reaching one level in. Nothing in the tool descriptions showed a correct flat example to contradict the copy-paste instinct.get_board_info's description now states that a column'ssettingsvalue is the raw read-only shape, must not be copied verbatim intocolumnSettings, and points atget_column_type_infowithfetchMode: "schema"for the authoritative structure.Changes
get_column_type_info— names all three settings writers it precedes (create_column,update_column,manage_object_schema_columns) instead of onlycreate_columncreate_column/update_column— callget_column_type_infobefore populatingcolumnSettings(previously only stated on the field description)get_board_schema/delete_column—get_board_schemadocuments the column id + revision it supplies toupdate_column,delete_column,configure_ai_column, andremove_ai_from_column;delete_columnnow requires resolving the id first and notes the deletion is irreversibleget_board_info— states the precondition role already declared by its downstream tools, that its views are the source of view ids, and thesettingswarning abovecreate_view/create_view_table/update_view/update_view_table— callget_board_infofirst for column ids, status label indexes, and (for updates) theviewIdcreate_view— fetch filter guidelines viaget_column_type_infowithfetchMode: "guidelines", matching the precondition already stated onget_board_items_pageandboard_insightsTesting
tsc --noEmitcleantool-description-safety.test.ts— 210/210 pass (this suite'sUNSAFE_CHARS_PATTERNpreviously caught a stray semicolon in this work; verified clean here)🤖 Generated with Claude Code