01Safety
0.0 / 30
What changed in the harness
Selection accuracy 96→98, token cost up 4%, 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
25.4 / 30
19.3 / 20
12.9 / 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
9 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 |
|---|---|---|
bear-open-note |
no_return_description |
Read and return the full text content of a Bear note by its ID or title, including text extracted from attached images and PDFs (OCR), which is clearly labeled. Supports direct title lookup as an alternative to searching first; if multiple notes share the same title, a list of matching notes is returned for disambiguation. |
bear-add-text |
no_return_description |
Insert text at the beginning or end of a Bear note, or within a specific section identified by its header, and return confirmation once it is inserted. Use bear-search-notes first to get the note ID. To insert without replacing existing text use this tool; to overwrite the direct content under a header use bear-replace-text. |
bear-replace-text |
no_return_description |
Replace content in an existing Bear note — either the full body or a specific section — and return confirmation once it is replaced. Requires content replacement to be enabled in settings. Use bear-search-notes first to get the note ID. To add text without replacing existing content use bear-add-text instead. |
bear-list-tags |
no_return_description |
List and return all tags in your Bear library as a hierarchical tree, showing tag names with their note counts. Useful for understanding your tag structure and finding tags to apply to untagged notes. |
bear-find-untagged-notes |
name_restates_behavior no_return_description |
Find notes in your Bear library that have no tags and return a list of up to `limit` (default: 50) matching notes with their titles, tags, and IDs, so you can review and categorize notes that may need tagging. |
bear-add-tag |
no_return_description |
Add one or more tags to an existing Bear note; tags are added at the beginning of the note. Returns confirmation once the tags have been applied. Use bear-list-tags to see available tags. |
bear-archive-note |
no_return_description |
Move a note to Bear's archive; after archiving, the note no longer appears in regular searches but can still be found in Bear's Archive section. Returns confirmation once the note is archived. Use bear-search-notes first to get the note ID. |
bear-rename-tag |
no_return_description |
Rename a tag across all notes in your Bear library, updating every note that uses it, and return confirmation once the rename is complete. Useful for reorganizing tag taxonomy, fixing typos, or restructuring tag hierarchies. Use bear-list-tags first to see existing tags. |
bear-delete-tag |
no_return_description |
Delete a tag from all notes in your Bear library; the tag is removed from every note but the notes themselves are preserved. Returns confirmation once the tag has been deleted. Use bear-list-tags first to see existing tags. |
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 |
|---|---|---|---|
bear-add-text |
bear-replace-text |
high | Both use the same surface (id, text, optional section header), so tasks like 'put the updated content under the Progress header' or 'update the section to say X' are genuinely ambiguous between inserting and overwriting; the two descriptions even cross-reference the boundary, indicating easy mix-ups. |
bear-add-tag |
bear-delete-tag |
medium | A task such as 'remove the #urgent tag from this note' has no per-note removal tool, so an agent may map 'remove/delete tag' to the global bear-delete-tag (destructive) instead of the correct per-note approach, since both tools modify tags and bear-add-tag is the only note-scoped option. |
bear-open-note |
bear-search-notes |
medium | Tasks phrased as 'look up/find my note titled X and tell me what it says' can map to either: search-notes returns only titles/tags/IDs while open-note reads full content by title, so an agent retrieving content may pick the wrong member and get partial results. |
bear-search-notes |
bear-find-untagged-notes |
low | Generic phrasing like 'search my library for notes without tags' could pull the general search-notes tool (which has no untagged filter) rather than the specialized find-untagged-notes; descriptions reduce but do not eliminate the ambiguity. |
bear-add-tag |
bear-rename-tag |
medium | A request like 'update/change the tag on my notes from X to Y' is ambiguous between a note-scoped additive operation (bear-add-tag, requires id) and a library-wide rename (bear-rename-tag, name/new_name); both suggest listing tags first and both involve per-note vs global tag changes. |
Compare the field