emrg: tool intent parameter replaces static purpose (rants 10:33:29 + 10:35:24) - #864
Conversation
…to 971 - test_glob_tool / test_grep_tool: intent is now a required parameter - merge master (v0.2.52 + #863) so PR CI covers full suite - Agent.md test count 969 -> 971 (net +2 intent tests)
The mock put the finish_reason=stop delta in the same stream as the tool call, so the daemon's Case-1 branch treated the round as a final text answer and dropped the tool calls (no tool_start broadcast). Follow the established _make_fake_chat_stream pattern: round 1 emits the tool call (finish tool_calls), round 2 the final answer (stop).
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle (1/3): head b1375e0, CI test + test-windows PASS (32211538781). Tool intent required param on all 7 tools (purpose removed), ToolStart.intent broadcast, daemon tool-call logging shows intent, TUI/GUI display intent; executors ignore the extra key. Branch merged master (v0.2.52 + #863) and Agent.md count synced to 971.
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle (2/3): re-reviewed head b1375e0 fresh. All 7 tool executors read args via .get() (extra intent key tolerated, never executed); daemon logs/broadcasts intent (tool call + memory reflection + consolidation); ToolStart carries intent; TUI card header + GUI tool-row show intent; system.j2 instructs agent to always write intent; purpose field fully removed from ToolDefinition with updated tests (protocol defaults, no-purpose guard, e2e stateful two-round mock verifies broadcast + executor). CI test + test-windows PASS (32211538781).
pm25coder
commented
Aug 19, 2026
Independent test report (cycle 2026-08-19, Contributor): |
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle (3/3): head b1375e0 unchanged since 2/3, CI test + test-windows PASS (32211538781), MERGEABLE/CLEAN. Fresh verification of the diff (21 files, +183/−41): intent required param on all 7 tools, purpose field removed, executors use .get() (intent never executed), daemon logs/broadcasts intent, TUI/GUI display, system.j2 instructs agent, e2e stateful mock asserts broadcast + execution. Approving for merge.
Uh oh!
There was an error while loading. Please reload this page.
Tool
intentparameter replaces staticpurpose(host rants 10:33:29 + 10:35:24)Host-finalized: every tool call should carry the agent's per-call intent ("why am I calling this, what do I want to achieve") instead of the static
purposefield. Logs/GUI show the intent — real "doing X because of Y" readability.Changes
bash/edit/glob/grep/read/write/submit_rant) — added requiredintentstring param to their JSON Schemas (properties+required); removed the staticpurpose=...lines.ToolDefinition—purposefield + docstring removed (tool_types.py).intentis display-only metadata; the executors keep running on their real arguments (unknown keys are naturally ignored byarguments.get(...)).tool call: <name> — <intent>(was— <purpose> (<redacted JSON>))-tool_startbroadcast — carries"intent": args.get("intent");ToolStartprotocol gains anintentfield.tool-intentspan.system.j2Tool Usage section now instructs every tool call to includeintent.Tests
test_tool_types.py::test_no_purpose_field— ToolDefinition has nopurposetest_submit_rant_tool.py—test_all_tools_have_purpose→test_all_tools_require_intent(all 7 tools require intent, no purpose); consent-contract test asserts intent requiredtest_protocol.py— ToolStart carries intent (and defaults "")test_ws_e2e.py::test_tool_intent_logged_and_ignored_by_execution— daemon broadcasts intent in tool_start while the executor still runs on real argsVerification
py_compileall touched Python ✓ ·node --check chat.js✓tool call: bash — 检查回显/ missing intent →tool call: bash — -✓intentin properties + required, nopurposeattr ✓