WIP: The akh emits tool activity as prose in agent_thought, not as structured ToolCall/ToolCallUpdate ACP events #295
Draft
toasterson
wants to merge 2 commits from
claude/wi-019fbe82-the-akh-emits-tool-activity-as-prose-in into main
pull from: claude/wi-019fbe82-the-akh-emits-tool-activity-as-prose-in
merge into: toasterson:main
toasterson:main
toasterson:claude/wi-019fa8f0-adr-081-s0-pay-the-r2-empirical-bet-prob
toasterson:claude/wi-019f90cc-p26-5-wire-the-neural-bridge-into-the-in
toasterson:claude/wi-019f90cc-p27-2-tripleverbalizer-kg-triples-divers
toasterson:ptah/hip-qwen2-device-gating
toasterson:claude/wi-019fa44f-sessions-on-one-akh-still-serialise-on-t
toasterson:claude/wi-019fff96-periodic-snapshots-have-failed-390-day-s
toasterson:claude/wi-019fe620-dispatch-trap-triage-as-an-agent-tool-po
toasterson:claude/wi-019dd0c5-phase-42b-longmemeval-locomo-harness-wit
toasterson:claude/wi-019f90cb-p26-4-neural-vsa-encoder-project-layer-n
toasterson:claude/wi-019fdd22-the-learn-on-new-triples-trigger-fires-4
toasterson:docs/babysit-lane-skill
toasterson:claude/wi-019f90cb-p26-3-polarquant-kv-cache-compression-in
toasterson:claude/wi-019fa8eb-wi-4-diagnostics-provider-dispatched-bla
toasterson:claude/wi-019fa8f0-librarian-consolidation-is-ungated-unbat
toasterson:claude/wi-019fe636-sleep-relocate-leave-the-akh-advisory-lo
toasterson:claude/wi-019fe260-any-acp-call-against-a-non-resident-work
toasterson:fix/upstream-mcp-initialized
toasterson:fix/librarian-cloud-endpoint
toasterson:feat/curation-tasks
toasterson:feat/wake-on-open-hydration
toasterson:feat/exec-none-backend
toasterson:fix/chart-workspace-seed-initcontainer
toasterson:feat/chart-akh-declarative-config
toasterson:claude/wi-019fe1b4-the-akhomed-image-ships-no-protoc-so-eve
toasterson:feat/local-drop-launchdaemon
toasterson:archive/wi-019fa44f-rebased-onto-main
toasterson:claude/wi-019fdd21-ci-never-builds-the-akh-medu-crate-it-on
toasterson:claude/wi-019fa83d-compile-feedback-lints-the-whole-workspa
toasterson:claude/wi-019fbf62-phase-44n-context-rot-curve-bench-per-mo
toasterson:claude/wi-019fcce4-per-turn-dispatch-mode-akh-dispatch-mode
toasterson:agent/e138bd65c5aa
toasterson:claude/wi-019fcd3d-akhomed-on-arm64-should-run-pvc-less-in
toasterson:claude/wi-019fce1e-kg-delete-shipped-with-zero-tests-a-dang
toasterson:claude/wi-019f579f-add-kg-delete-triple-delete-capability-t
toasterson:claude/wi-019e480e-mcp-crud-endpoints-for-agent-goals-expos
toasterson:claude/wi-019fba6a-turn-completion-waits-for-the-sink-refco
toasterson:claude/wi-019fcbb6-wire-remotebackend-into-akhomed-the-48c
toasterson:claude/wi-019dcaac-phase-38i-otlp-tracing-skeleton-first-oo
toasterson:claude/wi-019dcaad-phase-38j-otlp-metrics-seshat-instrument
toasterson:claude/wi-019dcaad-phase-38k-otel-logs-to-alloy-w3c-trace-p
toasterson:archive/2026-08-03-38i-pre-reset
toasterson:claude/wi-019fb9d6-panic-in-the-turn-completion-path-tokio
toasterson:claude/wi-019fba6a-the-agentic-loop-wedges-when-the-model-r
toasterson:claude/wi-019fb9d7-a-turn-can-receive-bytes-for-57-minutes
toasterson:claude/wi-019fb44f-the-watchdog-is-blind-while-the-model-ge
toasterson:claude/wi-019fb44f-a-turn-goes-silent-after-its-work-is-don
toasterson:archive/wi-019fa44f-sessions-on-one-akh-still-serialise-on-t
toasterson:claude/wi-019faa3e-a-reset-upstream-stream-drops-the-turn-i
toasterson:claude/wi-019f85d6-wave-r2-ownership-autostart-owner-host-c
toasterson:claude/wi-019f85d6-wave-w1-ritual-genesis-pantheon-packs-di
toasterson:claude/wi-019f85d7-wave-w2-the-wizard-akh-onboard-verbs-akh
toasterson:claude/wi-019f85d7-wave-w4-render-tier-psyche-render-pipeli
toasterson:claude/wi-019f85d6-wave-r1-config-spine-config-crate-typed
toasterson:archive/2026-07-28-wave-r2-ownership-autostart-owner-host-c
toasterson:archive/2026-07-28-wave-w4-render-tier-psyche-render-pipeli
toasterson:archive/2026-07-28-wave-w2-the-wizard-akh-onboard-verbs-akh
toasterson:archive/2026-07-28-wave-w1-ritual-genesis-pantheon-packs-di
toasterson:archive/2026-08-03-38j-pre-reset
toasterson:claude/wi-019db1bd-anima-integration-workspace-daemon-that
toasterson:archive/2026-08-03-38k-pre-reset
toasterson:claude/wi-019dc599-phase-39-distributed-inference-fabric-ll
toasterson:claude/wi-019dc57a-replace-continuous-learning-wikipedia-wi
toasterson:claude/adr-094-operating-guidance
toasterson:claude/wi-019dd0c6-phase-42c-drawer-ingest-path-embed-worke
toasterson:claude/wi-019f9f56-sessions-report-the-wrong-work-item-teac
toasterson:claude/agent-sandbox-workspace-root
toasterson:claude/wi-019f9a1e-17-work-items-frozen-since-2026-07-23-ag
toasterson:claude/wi-019f85d6-wave-r4-akh-doctor-read-only-7-sections
toasterson:claude/wi-019f85d7-wave-w3-birth-extras-procedural-avatar-f
toasterson:claude/wi-019f85d6-wave-r3-akhadvertisement-akh-daemon-akhs
toasterson:claude/wi-019f85b9-adversarial-review-distributed-inference
toasterson:claude/wi-019f85ba-adversarial-review-mcp-tools-kg-operatio
toasterson:claude/wi-019f8589-wi-3-session-registry-akh-session-list-i
toasterson:claude/wi-019f8589-wi-2-implement-peer-dispatch-in-delegati
toasterson:claude/wi-019f85b9-adversarial-review-heka-long-term-memory
toasterson:claude/wi-019f85b9-adversarial-review-observability-stack-3
toasterson:claude/wi-019e2501-define-fluent-infrastructure-home-state
toasterson:claude/cool-carson-b63ef4
toasterson:feat/macmini
toasterson:claude/wi-019db054-phase-36-delegation-external-scheduling
toasterson:claude/wi-019db054-phase-32-llm-knowledge-extraction
toasterson:claude/wi-019db054-phase-30-procedural-skills
toasterson:claude/wi-019db054-phase-28-n-akh-semantic-router
toasterson:claude/wi-019db054-phase-24-sensory-grounding
toasterson:claude/wi-019db054-phase-23-affective-system
toasterson:claude/wi-019db054-phase-27-live-kg-llm-training
toasterson:claude/wi-019db054-phase-26-llm-vsa-deep-integration
toasterson:claude/wi-019db054-release-alpha-kubernetes-deployment
toasterson:claude/wi-019e3397-bug-infer-rules-creates-indiscriminate-p
toasterson:claude/wi-019dbc03-bootstrap-embedding-nlu-llm-models-via-o
toasterson:claude/wi-019db054-phase-20-active-inference
toasterson:claude/wi-019dd0c7-phase-42h-cross-tool-bridge-daemon-opena
toasterson:claude/wi-019dd0c6-phase-42g-akhipedia-auto-extraction-from
toasterson:claude/wi-019e5982-akhomed-migrate-from-redb-to-postgres-fo
toasterson:claude/wi-019e481e-mcp-provenance-filter-find-triples-by-de
toasterson:claude/wi-019e481d-bounded-snapshot-mcp-workspace-snapshot
toasterson:claude/wi-019dd122-phase-41i-unified-trace-envelope-joining
toasterson:claude/wi-019dd122-phase-41h-ooda-thinkingloop-integration
toasterson:claude/wi-019dd121-2026-04-28-synthesis-prompt-plan-tool-ca
toasterson:claude/wi-019dd0c6-phase-42f-akh-awakening-per-tool-init-cl
toasterson:claude/wi-019dd0c6-phase-42e-heka-mcp-server-8-tools-rememb
toasterson:claude/wi-019dd0c6-phase-42d-hybrid-retrieval-pgvec-vsa-kg
toasterson:claude/wi-019dd0c5-phase-41-the-thinking-engine-unified-thi
toasterson:claude/wi-019dc9c9-phase-39a-llmbackend-trait-candlelocal-i
toasterson:claude/wi-019dc9c9-phase-38a-workspace-entity-lifecycle-loa
toasterson:claude/wi-019dc614-custom-cnpg-image-bake-with-age-pgvector
toasterson:claude/wi-019dc599-phase-38-relocatable-session-based-akh-w
toasterson:claude/wi-019db054-phase-35-t5-training-infrastructure
toasterson:claude/wi-019db054-phase-34-communicative-intelligence
toasterson:claude/wi-019db054-phase-29-capability-exposure
toasterson:claude/wi-019e26ba-bug-byte-index-panic-on-utf-8-boundary-i
toasterson:claude/wi-019e1598-high-fix-agent-memory-rs-456-byte-index
toasterson:claude/wi-019e3b34-fix-akhomed-llm-integration-for-teacher
toasterson:claude/wi-019e4909-ennead-agents-lack-proper-identity-no-ri
toasterson:claude/wi-019e4909-vsa-symbols-never-grounded-ground-symbol
toasterson:claude/wi-019e3eb9-ground-vsa-symbols-in-tecton-workspace-a
No reviewers
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
toasterson/akh-medu!295
Loading…
Reference in a new issue
No description provided.
Delete branch "claude/wi-019fbe82-the-akh-emits-tool-activity-as-prose-in"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Anima work item
019fbe82-fe37-73e3-88be-616f969c1394.The gap
Compare two sessions on the same Anima server, same day:
019fba31019faec4acp.agent_thought× 9acp.tool_call× 102acp.tool_call_update× 100acp.plan× 5The akh emits zero structured tool events. Its tool activity arrives as prose
stuffed inside
agent_thought:That is a human-readable log line, not an event. akh-medu WI-220
("akhomed: emit structured ToolCall/ToolCallUpdate session updates over ACP") is
marked done, so either it regressed, shipped for a different code path, or was
closed on a partial. Establish which before writing code — do not assume a
regression.
Why it matters (measured, not theoretical)
last_stepis uninformative.LastStepTrackerclassifies the in-flightstep from emitted messages. With everything arriving as narrative, every stall
line in the 2026-07-28→31 investigation read
last_step="narrative"— therewas no other value it could take. A field added specifically to name the stuck
step could never name anything.
LLM requests totalling ~250s inside a 3600s turn. Attributing the rest between
model latency and tool execution was impossible, because tool start/end is not
an event.
#280gave us per-request LLM metrics; the tool half is still dark.tool calls with status and results, and akh sessions as opaque prose blobs.
Required
Say plainly what you find — "it was never wired for X" is a fine answer.
ToolCallwhen a tool starts andToolCallUpdateon completion, over ACP,from the akh's tool-execution path — the same shape the ACP client already
consumes from other agents (
kind,title,status,content,toolCallId).ToolExecutionTrackeralready wraps theChannelSinkfor exactly this purpose(
src/acp/mod.rs:753); prefer extending it over a new mechanism.answerable.
information twice in two shapes.
Acceptance
acp.tool_callandacp.tool_call_updateevents, verifiable withlist_sessions/the activity stream for the session.
last_stepas that tool, not"narrative".Notes for the implementer
The tree moved a lot in the last 48 hours —
#276,#279,#280,#281alltouched
src/acp/mod.rs,src/agent/agentic_chat.rsandsrc/agent/ollama.rs.Start from current
origin/mainand read those files as they are now, not as youmay remember them.
Review verdict: BLOCK — the branch does not compile, and it does not implement the work item.
The entire diff is three lines in
src/message.rs: a newduration_ms: Option<u64>field onAkhMessage::ToolCallCompleted. Adding that field without updating its match and construction sites breaks the build —cargo check --features serveratbf8377aafails with 7 errors (E0027 ×4, E0063 ×3).More importantly, the actual bug is untouched.
to_session_update()atsrc/acp/mod.rs:1294-1331still converts bothToolCallStartedandToolCallCompletedintoSessionUpdate::AgentThoughtChunkprose. That stub is the work item, and this PR does not modifysrc/acp/mod.rsat all.For the record, this is not duplicate work: the earlier item that emitted structured tool events landed only the internal
AkhMessagevariants and theToolExecutionTrackerthat produces them. The ACP translation layer was never written, so the premise of this work item is correct.CI green is not a signal here:
.solstice/job.shruns onlycargo check -p seshatand never builds the root crate wheresrc/message.rslives.Full remediation detail is in the work item description.
bf8377aaade506acf4bdView command line instructions
Manual merge helper
Use this merge commit message when completing the merge manually.
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.