You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Mission: agentchat honours everything an MCP server declares #89
Someone points agentchat at an MCP server that uses the extensions chakra says it hosts: server instructions, skills, events and agents, and later MCP Apps and A2A agents. The session behaves the way each spec says a host must, with no glue on the host side. The model is told what the server is for. Skills load only when needed and re-prompt when their content changes. Event hints the server declares take effect. Server agents can be delegated to.
Exercise
make host-exercise
It runs a host.App against a demo server with a scripted model, on both client wires, and prints PASS or FAIL per host obligation (#88). No model or key needed, and CI runs it through make test-examples. make host-exercise-live boots the same server for agentchat and a real model.
What to look at: the table it prints. Known failures are pinned to their tickets in examples/host-exercise/expected.go, and a ticket's fix removes its lines there, so the mission is done when that file is empty.
Done when
make host-exercise passes every check on both wires (expected.go is empty), and the blocked-by list below is closed or moved to another mission explicitly.
#115 merged.make host-exercise is this mission's exercise: a host.App against a demo server with a scripted model, on both client wires, one PASS/FAIL per host obligation. It closes #88. Progress: [2/8 tickets closed]. Next ready: #50 (no-prefetch and content-bound approval), then #81 (event hints).
Exercise @ 3a97d29 plus the v0.8.12 sync (#116), since main went stale on mcpkit v0.8.12 again before I could run it: 3 of 5 obligations fail on both wires, all as expected.
check
legacy
stateless
instructions
PASS
PASS
labelled with server "demo"
no-prefetch
FAIL
FAIL
#50: the default mode reads all 3 SKILL.md files at connect
skill-rotation
FAIL
FAIL
#50: asked once across both loads, and the second load is refused with size mismatch
event-hint
FAIL
FAIL
#81: injected raw, event build.finished from demo: {...}, not through the server's template
#116 merged. mcpkit v0.8.12 pins and a .gitignore line for this exercise's binary. Progress: [2/8 tickets closed]. Next ready: #50.
Exercise @ cab969e: make host-exercise reports 5 check(s) x 2 wire(s), 0 unexpected, same as the first log. instructions and agent-delegable pass on both wires. no-prefetch and skill-rotation still fail as expected (#50), and so does event-hint (#81).
Next ready: #112 (P2, stateless readiness). Also open: #78, #86 and #87, all waiting.
Exercise @ 653d379: make host-exercise, scripted model, both wires.
PASS legacy instructions present, labelled with server "demo"
PASS stateless instructions present, labelled with server "demo"
PASS legacy no-prefetch no SKILL.md read at connect
PASS stateless no-prefetch no SKILL.md read at connect
PASS legacy skill-rotation asked again after the rotation (2 prompts)
PASS stateless skill-rotation asked again after the rotation (2 prompts)
PASS legacy event-hint rendered as "build passed on main"
PASS stateless event-hint rendered as "build passed on main"
PASS legacy agent-delegable delegated and got the child's answer back
PASS stateless agent-delegable delegated and got the child's answer back
5 check(s) x 2 wire(s), 0 unexpected
examples/host-exercise/expected.go is now an empty map, which is the first half of this mission's done-when. The second half is the blocked-by list being closed or explicitly moved: #112 is open at P2, and #78, #86 and #87 are waiting.
Friction: the skill-rotation check had to wait for the host's re-list after the server's list_changed, since that is asynchronous. A load that races it is refused by the digest check and re-lists, which is safe but costs the model a retry.
mcpkit#1648: a stateless Connect fails when the server is down or refuses auth, so a Group stops showing it as ready.
Progress: [4/8]. #112 stays open until chakra bumps to an mcpkit release that includes #1648; that bump closes it. No release yet (the latest tag is v0.8.13).
Exercise @ 33b9540: make host-exercise: 5 check(s) x 2 wire(s), 0 unexpected.
Beyond the exercise, on the stateless wire the host module now fails only TestAppBootsWithDownOptionalServer, TestBearerAuthReachesTheWire and TestOAuthLoginFlowE2E, the three that #1648 fixes. Against the fix (checked through a local go.work), root, host, surfaces and surfaces/web pass on both wires.
#139 merged (#112, which was closed by hand, gets its fix here). chakra is on mcpkit v0.8.14, so a stateless Connect fails for a down or unauthorised server, and /servers and needs-login report it properly. #140 moved the active mission here from #57.
Progress: [5/8]. Nothing ready: #78 (A2A agents), #86 (sub-agent router) and #87 (MCP Apps view) are all waiting.
Exercise @ ece41eb: make host-exercise: 5 check(s) x 2 wire(s), 0 unexpected. On v0.8.14 the host and root modules also pass on both wires, the three readiness tests included (checked before the merge). CI runs the legacy wire only.
This mission's done-when has two halves. make host-exercise passing every check on both wires is met. The other is the blocked-by list being closed or moved to another mission explicitly, which leaves #78, #86 and #87 to decide on.
Closing: done. make host-exercise passes every check on both wires with examples/host-exercise/expected.go empty (#89 (comment)), and the blocked-by list is closed or moved:
A host connected to a server that declares instructions, skills, events and agents now behaves as each spec says, on both client wires, with no glue on the host side.
Along the way the host's stateless wire went from nine failing tests to none.
Activity
Merge pull request #115 from panyam/feat/88-host-exercise
panyam commentedon Oct 25, 2026
#115 merged.
make host-exerciseis this mission's exercise: a host.App against a demo server with a scripted model, on both client wires, one PASS/FAIL per host obligation. It closes #88. Progress: [2/8 tickets closed]. Next ready: #50 (no-prefetch and content-bound approval), then #81 (event hints).Exercise @ 3a97d29 plus the v0.8.12 sync (#116), since main went stale on mcpkit v0.8.12 again before I could run it: 3 of 5 obligations fail on both wires, all as expected.
size mismatchevent build.finished from demo: {...}, not through the server's template5 check(s) x 2 wire(s), 0 unexpectedFriction:
skill-rotationrow also showed that the host never re-lists skills after the server announces a change. So item 2 of host/skills: unimplemented SEP-2640 host MUSTs — no-prefetch, content-bound approval, frontmatter re-verification #50 needs that before a re-prompt has anything to bind to. I've added it to host/skills: unimplemented SEP-2640 host MUSTs — no-prefetch, content-bound approval, frontmatter re-verification #50.readyon stateless) doesn't show up here, because the demo server is always reachable. Adown-serverrow would be where it goes.panyam commentedon Oct 25, 2026
#116 merged. mcpkit v0.8.12 pins and a
.gitignoreline for this exercise's binary. Progress: [2/8 tickets closed]. Next ready: #50.Exercise @ cab969e:
make host-exercisereports5 check(s) x 2 wire(s), 0 unexpected, same as the first log. instructions and agent-delegable pass on both wires. no-prefetch and skill-rotation still fail as expected (#50), and so does event-hint (#81).Friction: none.
panyam commentedon Oct 26, 2026
#135 and #136 merged.
events/list_metaand re-reads it onevents/list_changed, on both wires.load_skillapproval is bound to the skill's files, every uri and digest. Skills are re-listed onresources/list_changed.Next ready: #112 (P2, stateless readiness). Also open: #78, #86 and #87, all
waiting.Exercise @ 653d379:
make host-exercise, scripted model, both wires.examples/host-exercise/expected.gois now an empty map, which is the first half of this mission's done-when. The second half is the blocked-by list being closed or explicitly moved: #112 is open at P2, and #78, #86 and #87 arewaiting.Friction: the skill-rotation check had to wait for the host's re-list after the server's
list_changed, since that is asynchronous. A load that races it is refused by the digest check and re-lists, which is safe but costs the model a retry.panyam commentedon Oct 26, 2026
#138 merged, and panyam/mcpkit#1648 merged.
list_changedon the stateless wire for every kind (agents and tools now, events and skills moved onto the same helper). Session-only tests skip on stateless, with their reason.Connectfails when the server is down or refuses auth, so aGroupstops showing it as ready.Progress: [4/8]. #112 stays open until chakra bumps to an mcpkit release that includes #1648; that bump closes it. No release yet (the latest tag is v0.8.13).
Exercise @ 33b9540:
make host-exercise: 5 check(s) x 2 wire(s), 0 unexpected.Beyond the exercise, on the stateless wire the host module now fails only
TestAppBootsWithDownOptionalServer,TestBearerAuthReachesTheWireandTestOAuthLoginFlowE2E, the three that #1648 fixes. Against the fix (checked through a local go.work), root, host, surfaces and surfaces/web pass on both wires.Friction: none new.
Merge pull request #140 from panyam/docs/active-mission-89
panyam commentedon Oct 26, 2026
#139 merged (#112, which was closed by hand, gets its fix here). chakra is on mcpkit v0.8.14, so a stateless
Connectfails for a down or unauthorised server, and/serversand needs-login report it properly. #140 moved the active mission here from #57.Progress: [5/8]. Nothing ready: #78 (A2A agents), #86 (sub-agent router) and #87 (MCP Apps view) are all
waiting.Exercise @ ece41eb:
make host-exercise: 5 check(s) x 2 wire(s), 0 unexpected. On v0.8.14 the host and root modules also pass on both wires, the three readiness tests included (checked before the merge). CI runs the legacy wire only.This mission's done-when has two halves.
make host-exercisepassing every check on both wires is met. The other is the blocked-by list being closed or moved to another mission explicitly, which leaves #78, #86 and #87 to decide on.panyam commentedon Oct 26, 2026
Closing: done.
make host-exercisepasses every check on both wires withexamples/host-exercise/expected.goempty (#89 (comment)), and the blocked-by list is closed or moved:waiting, each with its trigger: A2AAgentSource: delegate to an A2A-speaking remote agent #78 (A2A agents, on ext/a2a: A2A protocol client (AgentCard discovery, task messaging, signed webhooks) mcpkit#1576), Capability-based sub-agent router across heterogeneous AgentSource kinds #86 (sub-agent router, on A2AAgentSource: delegate to an A2A-speaking remote agent #78), and Host an MCP App view: app tools, ui/* handlers, update-model-context #87 (MCP Apps view, on a surface renderingui://views).A host connected to a server that declares instructions, skills, events and agents now behaves as each spec says, on both client wires, with no glue on the host side.
Along the way the host's stateless wire went from nine failing tests to none.
Merge pull request #144 from panyam/docs/active-mission-142