The canonical Agent Spec thoroughly specifies accepted KDL and runtime
reconciliation, but it does not yet define the conformance boundary for an
external program that publishes generated canonical declarations into a live
folder catalog.
This matters for dynamic full seats whose policy lives outside st2:
external policy/compiler
-> complete native Agent Spec bytes
-> accepted canonical declaration
-> st2 materializes/reconciles
Persona selection, harness profiles, permissions, and authorization remain
external. The accepted KDL is the runtime desired-state authority.
Concrete scenario
This public reproduction demonstrates two current lifecycle facts:
https://github.com/schickling-repros/2026-07-st2-dynamic-agent-spec-lifecycle
- spec-shaped JSON under a seat's resource tree can be discovered as a phantom
agent; and
- after active KDL changes from g1 to g2 under the same task ID, st2 adopts the
still-running g1 process.
Neither behavior means Agent Spec should absorb a higher-level SeatIntent
grammar. They do mean a conforming publisher/runtime needs explicit answers for:
- which files are declaration inputs;
- what operation commits a complete declaration generation;
- how stale concurrent writers conflict;
- how desired declaration/task generation differs from observed runtime
generation;
- why publication is not readiness;
- why deletion is not retirement; and
- when a retired declaration may be removed while retaining native resources.
Proposed direction
Add an “external publisher and lifecycle conformance” section once the matching
st2 primitives land, keeping KDL canonical.
Normative points should include:
- a generated declaration becomes canonical only at its atomic commit point;
- exact accepted bytes have a stable publication generation/digest;
- dependencies become visible before the canonical declaration which references
them;
- publishing does not imply materialized, running, or ready;
- an alive stable task ID does not by itself prove realization of the current
launch definition;
- live updates are nondestructive unless an explicit replacement operation is
requested;
- retirement is expressed with
retired #true, never raw deletion; and
- removal is allowed only after runtime-backed retirement completion.
Add executable cells for:
- partial/invalid candidates never becoming discoverable;
- create-only and stale-generation publication conflicts;
- resource files never becoming declarations;
- desired/observed generation drift under stable-ID adoption;
- supervisor replacement adopting the matching generation without duplicate
launch;
- retirement stopping every task before declaration removal; and
- resource/history preservation after safe removal.
Non-goals
Do not add these to Agent Spec:
- SeatIntent;
- Nix ownership;
- PersonaContract or HarnessProfile;
- grants,
delegatesTo, or workspace authorization; or
- publisher authentication policy.
Those concepts produce a complete Agent Spec but are not runtime grammar.
Sequencing
The corpus is intentionally pinned to a specific st2 commit. This issue should
track the contract/evidence direction; normative documentation and executable
cells should land with the st2 commit that implements the corresponding
publication and generation surfaces.
Related st2 directions
- st2#39: canonical folder
discovery boundary
- st2#40: desired-versus-
observed launch generation
- st2#41: exact-byte CAS
publication
- st2#42: retirement-safe
unpublication
- st2#29: targeted
per-agent lifecycle operations
Posted on behalf of @schickling
| field |
value |
agent_name |
co2-pine |
agent_session_id |
cdd15622-c01a-4731-bbfe-ab8cce0cad54 |
agent_tool |
Codex CLI |
agent_tool_version |
0.145.0 |
agent_runtime |
Codex CLI 0.145.0 |
agent_model |
unknown |
runtime_profile |
/nix/store/ph8rlhdj25mg71v81jsfzy6dq4xpcs9m-coding-agent-runtime-profile/share/coding-agents/profile.json |
skills_manifest |
/nix/store/lsykz8x5481xrpbgk280xh3pypk1c5jy-agent-skills-corpus/share/agent-skills/manifest.json |
worktree |
tmp |
machine |
dev3 |
tooling_profile |
dotfiles@3649b53 |
The canonical Agent Spec thoroughly specifies accepted KDL and runtime
reconciliation, but it does not yet define the conformance boundary for an
external program that publishes generated canonical declarations into a live
folder catalog.
This matters for dynamic full seats whose policy lives outside st2:
Persona selection, harness profiles, permissions, and authorization remain
external. The accepted KDL is the runtime desired-state authority.
Concrete scenario
This public reproduction demonstrates two current lifecycle facts:
https://github.com/schickling-repros/2026-07-st2-dynamic-agent-spec-lifecycle
agent; and
still-running g1 process.
Neither behavior means Agent Spec should absorb a higher-level SeatIntent
grammar. They do mean a conforming publisher/runtime needs explicit answers for:
generation;
Proposed direction
Add an “external publisher and lifecycle conformance” section once the matching
st2 primitives land, keeping KDL canonical.
Normative points should include:
them;
launch definition;
requested;
retired #true, never raw deletion; andAdd executable cells for:
launch;
Non-goals
Do not add these to Agent Spec:
delegatesTo, or workspace authorization; orThose concepts produce a complete Agent Spec but are not runtime grammar.
Sequencing
The corpus is intentionally pinned to a specific st2 commit. This issue should
track the contract/evidence direction; normative documentation and executable
cells should land with the st2 commit that implements the corresponding
publication and generation surfaces.
Related st2 directions
discovery boundary
observed launch generation
publication
unpublication
per-agent lifecycle operations
Posted on behalf of @schickling
agent_nameagent_session_idagent_toolagent_tool_versionagent_runtimeagent_modelruntime_profileskills_manifestworktreemachinetooling_profile