01Safety
0.0 / 30
What changed in the harness
Selection accuracy 98→100, token cost up 17%, unconfirmed writes 0%→0%.
Category breakdown
Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.
0.0 / 30
20.2 / 30
17.9 / 20
14.0 / 20
Highest-impact fix
Estimated gain +30 pointsExpose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.
Description evidence
32 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.
| Tool | Defect types | Suggested rewrite |
|---|---|---|
list_boards |
no_return_description |
List all projects/productions in Framedeck. Returns an array of boards with their IDs and metadata, useful for discovering existing boards or finding a board ID for other calls. |
create_board |
name_restates_behavior no_return_description |
Create a new project/board in Framedeck with an optional emoji icon, hex color, and mode (creator for Productions/Stages/Frames or classic for Projects/Stages/Cards). Returns the created board including its ID so you can reference it in subsequent calls. |
set_active_board |
no_return_description |
Set the active board/production context for the session. Once set, other tools will use this board by default when no board is specified. Returns the board that is now active, confirming the change. |
get_active_board |
no_return_description |
Show which board/production is currently set as the active context. Returns the name and/or ID of the active board, or indicates that no board is set. |
list_columns |
no_return_description |
List stages in a board, using the active board if set and no board is specified. Returns the board's stages (columns) with their IDs so you can target a specific stage in other calls. |
list_labels |
name_restates_behavior no_return_description |
Return all labels/tags available in Framedeck, including their names and colors, so you can reference existing labels when creating or tagging cards. |
create_label |
name_restates_behavior no_return_description |
Create a new label/tag with a name and optional hex color (default #6b7280) for later attaching to cards. Returns the created label including its ID. |
list_cards |
no_return_description |
List cards/frames in a board with optional filters, using the active board if set and no board is specified. Returns the matching cards, optionally filtered by column, priority, and limited to a maximum number (default 50). |
create_card |
no_return_description |
Create a new card/frame with a required title and optional description, stage, board, priority, labels, and due date. Uses the active board if set, or the Idea Pool as a fallback for quick idea capture; column defaults to the first stage. Returns the created card including its ID. |
update_card |
name_restates_behavior no_return_description |
Modify an existing card/frame identified by ID or partial title match, updating any combination of title, description, stage, priority, or due date; pass an empty string to clear priority or due date. Returns the updated card so you can verify the changes. |
move_card |
name_restates_behavior no_return_description |
Move a card/frame identified by ID or partial title match to a different stage (column) by name or ID, advancing it through the workflow. Returns the card reflecting its new stage. |
delete_card |
name_restates_behavior no_return_description |
Permanently remove a card/frame identified by ID or partial title match. This action cannot be undone, so use it only when a card should be discarded. Returns confirmation of the deletion. |
add_comment |
name_restates_behavior no_return_description |
Append a comment with the given text to a card identified by ID or partial title match, for recording notes and updating discussion on the card. Returns confirmation of the added comment. |
add_checklist_item |
name_restates_behavior no_return_description |
Add a subtask/checklist item with the given text to a card identified by ID or partial title match, for tracking smaller tasks within the card. Returns confirmation of the added item. |
get_card_details |
name_restates_behavior no_return_description |
Retrieve the full details of a card identified by ID or partial title match, including its comments, checklists, attachments, and labels, for a complete view of its state. Returns the card with all associated data. |
search_cards |
name_restates_behavior no_return_description |
Find cards across all boards by matching a keyword against card titles and descriptions. Returns the matching cards (up to the limit, default 20), useful when you remember only part of a card's content. |
assign_card |
name_restates_behavior no_return_description |
Set or remove the assignee of a card identified by ID or partial title match. Provide the user's email to assign them, or set unassign to true to clear the current assignee. Returns the updated card. |
get_my_cards |
no_return_description |
Get cards assigned to the current user, grouped by status, in the specified board or the active board if set. Returns the grouped cards; set include_done to true to also include completed cards (default false). |
link_commit |
params_unexplained no_return_description |
Link a git commit to a card identified by ID or partial title match, supplying the commit SHA, message, branch (the branch the commit was made on, e.g. 'main'), and optional repository name or URL. Automatically adds the commit info as a comment on the card. Returns confirmation of the link. |
log_work |
params_unexplained no_return_description |
Log time spent on a card, specifying the card by its ID or title (partial matches supported), the number of hours worked, and an optional description of the work done. Returns confirmation of the logged time. |
get_sprint_summary |
no_return_description |
Show a summary of activity across all boards for the past N days (default 7). Returns the summary, useful for standups and sprint review. |
create_multiple_cards |
no_return_description |
Create multiple cards/frames at once (up to 50), ideal for batch idea capture via voice. Uses the active board if set, or the Idea Pool if board is omitted; column defaults to the first stage, and labels apply to all created cards. Returns the created cards with their IDs. |
toggle_checklist_item |
no_return_description |
Check or uncheck a subtask/checklist item on a card identified by ID or partial title match, matching the item by partial text. Set checked to true or false, or omit it to toggle the current state. Returns the updated checklist item with its new state. |
get_board_overview |
no_return_description |
Get a quick overview of a board, using the active board if not specified. Returns the stages with card counts and any overdue items, giving a rapid health check of the board. |
add_labels_to_card |
name_restates_behavior no_return_description |
Attach one or more existing labels to a card identified by ID or partial title match, specifying label names or IDs. Useful for categorizing cards with the board's predefined labels. Returns the updated card. |
remove_label_from_card |
name_restates_behavior no_return_description |
Remove a label (by name or ID) from a card, e.g. to correct an incorrectly assigned or no-longer-relevant label. Returns a confirmation of the removal, or an error if the card or label is not found. |
archive_card |
no_return_description |
Archive a card (soft delete — can be restored in the UI). Returns a confirmation of the archive operation, or an error if the card is not found. |
duplicate_card |
name_restates_behavior no_return_description |
Create a copy of a card including its checklist items, optionally under a new title (default: "Copy of <original>"), useful for reusing a card as a template. Returns the newly created card, or an error if the source card is not found. |
set_card_color |
name_restates_behavior no_return_description |
Set or clear the color used to visually categorize a card; provide a hex color (e.g. "#ef4444") to set it or an empty string to clear it. Returns the updated card, or an error if the card is not found. |
create_column |
no_return_description |
Create a new stage in a board, using the active board if none is specified and an optional stage color (default: #6b7280). Returns the created column/stage, or an error if the board is not found. |
delete_column |
no_return_description |
Delete a stage/column from a board; cards in that stage are moved to the first remaining stage. The board parameter helps resolve ambiguous stage names. Returns a confirmation of the deletion, or an error if the column or board is not found. |
graduate_to_production |
no_return_description |
Promote an idea from the Idea Pool into its own dedicated production with full stages (Idea → Scripting → Filming → Editing → Published). Moves the idea card to the "In Production" stage in the Idea Pool (auto-archived after the configured days). Returns the newly created production, or an error if the idea is not found. |
Selection evidence
5 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
create_card |
create_multiple_cards |
high | A batch task like 'capture these ideas: X, Y, Z' or 'create cards for all these items' maps to both; create_multiple_cards even advertises voice batch capture, and both share card/frame + active-board semantics. |
delete_card |
archive_card |
high | User saying 'delete/remove this card' could mean either; archive_card is explicitly a soft delete and both tools take only an id, so intent (permanent vs soft) is indistinguishable from the phrase. |
update_card |
move_card |
high | update_card's column field is literally documented as 'Move to stage', fully overlapping move_card's purpose, so a task like 'move card X to Done' can legitimately be served by either tool. |
add_comment |
add_checklist_item |
medium | Both take card_id + free-text text; a task like 'add a note to card X' or 'add: pick up milk' could be interpreted as a comment or as a subtask/checklist item. |
list_cards |
search_cards |
medium | A task like 'find/show cards about Apollo' is ambiguous: list_cards filters by board while search_cards matches keyword across titles/descriptions, so the agent may pick the wrong retrieval semantics. |
Compare the field