<feed xmlns='http://www.w3.org/2005/Atom'>
<title>panto-subagents.git/e2e, branch v0.1.0</title>
<subtitle>Subagents and dynamic workflows extension for panto
</subtitle>
<id>https://code.tjp.lol/panto-subagents.git/atom?h=v0.1.0</id>
<link rel='self' href='https://code.tjp.lol/panto-subagents.git/atom?h=v0.1.0'/>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/panto-subagents.git/'/>
<updated>2026-08-20T01:03:52Z</updated>
<entry>
<title>Add background Lua workflows, inline child prompts, and layered config</title>
<updated>2026-08-20T01:03:52Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-08-20T01:02:30Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/panto-subagents.git/commit/?id=d1306506aa7f504b0e91c9c6ed7314afbf99978e'/>
<id>urn:sha1:d1306506aa7f504b0e91c9c6ed7314afbf99978e</id>
<content type='text'>
subagents.lua now starts a workflow on its own coroutine and returns a
session-scoped id immediately, so fan-out continues while the primary keeps
working; completion wakes the primary, and later calls read immutable records
from subagents.workflows. Every ctx:agent takes a workflow-unique name so those
records are addressable. A session_start guidance message tells the primary when
to reach for run vs lua.

Children no longer inherit the primary's system context: a child starts from the
fixed child-role instruction plus its profile, and subagents.run/ctx:agent
accept an inline system_prompt instead of a profile. The now-redundant `agent`
form of subagents.models is gone.

Concurrency defaults to five and is configurable through [subagents]
max_concurrent in any layered config.toml; turn boundaries reap only settled
jobs so background workflows survive, while interrupt and session end cancel.

Config roots come from panto.ext.dirs.layers rather than a hand-rolled XDG
lookup, which picks up the base and git-ignored local layers for both agents/
and workflows/.

TOML workflows tighten up: the subagents.workflow tool takes a discovered name
only (inline `steps` duplicated subagents.lua at less power), an optional
top-level `output` array chooses the reported steps and their order instead of
the terminal set, a step with no workflow input gets no empty input heading, and
a workflow naming an undiscovered agent is rejected at discovery rather than
part-way through a run.
</content>
</entry>
<entry>
<title>Persist and replay subagent progress across sessions</title>
<updated>2026-08-18T20:20:28Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-08-18T20:18:14Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/panto-subagents.git/commit/?id=cc69a2e431779528578211a5cb3385bb23e076bf'/>
<id>urn:sha1:cc69a2e431779528578211a5cb3385bb23e076bf</id>
<content type='text'>
Record durable child-turn metadata, restore bounded progress cards during
startup replay, and keep settled cards attached to transcript entries. Add
workflow-local Lua profiles and expose discovered agents and workflows in the
session header.
</content>
</entry>
<entry>
<title>jobs: only settle may close; e2e proof harness</title>
<updated>2026-08-18T05:27:46Z</updated>
<author>
<name>t</name>
<email>t@tjp.lol</email>
</author>
<published>2026-08-18T05:27:46Z</published>
<link rel='alternate' type='text/html' href='https://code.tjp.lol/panto-subagents.git/commit/?id=7f8fdd8e868fb5fad71eacdf0c4fd0a97fe9c6ee'/>
<id>urn:sha1:7f8fdd8e868fb5fad71eacdf0c4fd0a97fe9c6ee</id>
<content type='text'>
close_all no longer joins pump threads from the owner thread: job:close()
joins the pump, and a pump parked in an owner-posted tool batch needs the
owner back in the loop, so a synchronous close at turn_end could deadlock.
close_all now cancels everything, closes only already-settled jobs, and
defers the rest to their own settle; jobs.active() ignores closing children
so the next turn can resume the id.

e2e/ reconstructs the end-to-end proof against the real binary in print
mode: a scripted fixture protocol plays primary and children, and the suite
asserts the product surface from process output and JSONL bytes on disk —
parallel batch with unknown-agent error, lane identity, tool inheritance
minus subagents.*, resume with manifest re-identification, workflow diamond,
sandbox fan-out with an ephemeral structured worker, catalog round-trip,
child-store isolation from the session picker. mise run e2e; check stays
independent.
</content>
</entry>
</feed>
