Repository navigation
Conversation
Adding, removing or renaming an instruction file or skill no longer takes creating the agent again, which deleted its disk. agentd already rewrote both on every pass. What it could not do was take back what it had placed: a dropped skill stayed in the harness's skill folder, and once an agent had no instructions of its own, the ones placed before read as the image's. agentd now records, in each skill folder, the skills it placed there, and removes those no longer declared, leaving the image's skills alone. A marker ahead of the agent's own instructions tells a later pass the rest of the file is agentd's to replace. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the
|
|
Yeah this makes a ton of sense 👍 I essentially went with immutability by default to just keep the complexity down initially. Wondering about the statekeeping here though, should we consider putting it in status:
sandbox:
harnesses: [claude]
skills: [...] # bookkeeping matching manifest desired state to persisted/reconciled stateI guess |
The record of which skills setup placed in the harnesses' skill folders moves from a file in the sandbox to status.sandbox.skills, beside the harnesses convergence installed. agentd owns its status, so the agent can no longer write names into the record that a later pass removes. The record belongs to the sandbox it was made in, so a new sandbox starts with only its image's skills. The marker ahead of the agent's own instructions stays in the instruction file: the home overlay may restore that file between passes, so only the file can say whose text it holds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Good call, done in e0fa8df. The skills setup placed now live in status.sandbox.skills, next to harnesses, scoped to the sandbox they were placed in. That also means the sandbox user can no longer write into the record. The instructions marker stays in the file, since the home overlay may restore that file between passes, and only the file can tell whose text it holds. |
Summary
Applying a manifest that adds, removes or renames instruction files or skills now updates the Agent in place. Until now agentd refused it as an immutable change, so the only way through was to create the Agent again, which deletes its disk. That is the change an agent most often makes when it improves its own definition.
agentd already rewrote instructions and skills on every pass. What kept them immutable was that it could not take back what it had placed:
status.sandbox.skills, beside theharnessesconvergence installed, and a later pass removes those the Agent no longer declares. Skills the image ships are not in the record, so they stay. The record belongs to the sandbox it was made in, so a new sandbox starts with only its image's skills.Evidence
platform_linux::linux_setup_removes_the_skills_and_instructions_an_agent_no_longer_declaresruns setup, then renames one skill and drops another and every instruction file. It checks that the dropped and renamed skills are removed, that the image's skill stays, that the instruction file keeps only the sandbox section, and that a record made for another sandbox removes nothing.control_plane::the_skills_setup_placed_are_recorded_in_the_agents_statuschecks that the reconciler stores what setup placed with the sandbox.control_plane::repeated_apply_is_idempotent_and_immutable_fields_are_rejectednow applies an added instruction file and skill as a mutable change.Risk
🤖 Generated with Claude Code