Skip to content

feat: tools read as plain actions in the owner's language - #39

Merged
httpsphl merged 2 commits into
mainfrom
feat/tool-names
Sep 29, 2026
Merged

httpsphl merged 2 commits into
mainfrom
feat/tool-names

Conversation

@httpsphl

Copy link
Copy Markdown
Owner

What

The app showed tool identifiers to the owner (send_message, browser_open, Write, Bash), and some summaries came with English words from the daemon ("to @writer", "Updated the plan", "load send_message, Read"). Now every tool reads as a plain action in the owner's language.

Daemon and core (spec 8.2, 11, 15.6)

  • tool_summary keeps only what the input says: the command, the file, @writer, a key.
  • It stays empty where only words would say something: TodoWrite, complete_task, a ToolSearch that loads tools, and a scroll's direction.
  • It also stays empty where the text means nothing to the owner, such as a browser element ref like e4.
  • Activity gains tool. The list line's text is now only the summary, and the app names the tool. The line is computed from the chat on read, so there is no migration.

App

  • New tools text area in the three languages. Each tool is an action, which reads right while it runs and after: "Mandar uma mensagem", "Abrir uma página", "Rodar um comando", "Escrever um arquivo".
  • toolNames.ts gives:
    • the title: the action, or the tool's own name for an unknown tool;
    • the action inside a sentence: "quer rodar um comando";
    • the detail made from the input where the daemon leaves it empty: the tools a ToolSearch loads, a scroll's direction. Items saved before this change also read right.
  • Used in the chat's tool lines, the approval cards ("Scout quer rodar um comando", "Permitido: escrever um arquivo") and the conversation list ("Mandar uma mensagem · @writer", "Aguardando aprovação: rodar um comando").

Tests

  • Rust: core, store and daemon pass (249 tests), and clippy and fmt pass. The chat test now expects the tool apart from the text.
  • App: pnpm check passes (147 tests). New toolNames.test.tsx covers:
    • names in English and Portuguese, including an unknown tool and a name like constructor;
    • details made from the input;
    • the conversation list line.
  • Preview: checked in Portuguese: "Mandar uma mensagem @writer", "Abrir uma página", "Escrever num campo", "Clicar", and "Escrever um arquivo · …" in the list.

…emon

A tool's summary is only what its input says (the command, the file,
@writer, a key), empty where words would be needed (TodoWrite,
complete_task, a ToolSearch that loads tools, a scroll's direction) or
where it means nothing to the owner (an element ref). The conversation
list line no longer starts with the tool's name: it comes apart in
Activity.tool, for the app to name in the owner's language.

Spec 8.2, 11 and 15.6.
The chat's tool lines, the requests to allow a tool and the conversation
list name each tool as an action in the owner's language ("Mandar uma
mensagem", "Abrir uma página", "Rodar um comando") instead of its
identifier. Where the daemon leaves the detail empty, the app says it
from the input: the tools a ToolSearch loads, a scroll's direction. An
unknown tool shows by its name. Approvals read "Scout quer rodar um
comando" and "Permitido: escrever um arquivo".
@httpsphl
httpsphl merged commit c766507 into main Sep 29, 2026
3 checks passed
@httpsphl httpsphl mentioned this pull request Sep 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant