Highlights
This is a hotfix release for v0.15.0, shipping the skill-materialization groundwork that v0.15.0 noted as planned follow-on work. If you maintain a city that uses Claude Code agents and wanted pack-defined skills to reach your agents without hand-plumbing symlinks, this release is for you.
Scope is intentionally narrow. This release does not include the session model unification, shared domain layer refactor, or other in-flight main-branch work. It is branched directly from v0.15.0 and only carries targeted fixes.
Upgrade Notes
- Safe upgrade from
v0.15.0. No config migration required. - Skill materialization is automatic for Claude Code agents. Drop a skill at
<pack>/skills/<name>/SKILL.mdand it becomes visible to agents in that pack's scope the next time the agent starts or the supervisor ticks. - Agent-local skills are supported: drop them at
agents/<name>/skills/<skill>/SKILL.md. - Name collisions between agent-local and shared skills are surfaced by
gc doctor. - The recommended post-upgrade flow is:
gc doctorgc doctor --fix(repairs stale implicit-import caches, registers core bootstrap pack)gc doctor
Skill Materialization
- Added the skill materializer: pack-declared skills at
<pack>/skills/<name>/SKILL.mdare materialized into each agent's Claude.claude/skills/sink via symlink at start time and on supervisor tick. - Added two-stage materialization: stage 1 writes into the scope root during supervisor reconciliation (matches the existing agent workdir == scope root case); stage 2 writes into per-session worktrees via a
PreStarthook for agents whose sessions live outside the scope root. - Added agent-local skills at
agents/<name>/skills/<skill>/SKILL.md, partitioned separately from shared pack skills so one agent's specialization cannot bleed into peers. - Added collision detection in
gc doctor: when two agents in the same pack would receive a skill with the same name from different sources, doctor flags it with agent names and source paths. - Added the
gc skill listcommand: shows the effective skill set an agent sees, including bootstrap implicit-import pack skills (gc-work etc.) alongside city-pack skills. - Added a core bootstrap pack that ships operator skills (gc-work and friends) via implicit import, so new cities pick them up automatically.
- Added
gc internal materialize-skillsfor operator introspection and scripted use.
Assigned-Skills Prompt Appendix
- Added a prompt appendix that tells each agent exactly which skills are visible to them at session start. Skills are partitioned into "assigned to you" (agent-local) and "shared" (pack-level) sections so the agent knows what is theirs vs. shared.
- Runtime-gated: the appendix only renders on paths where skill materialization actually delivers (stage-1 at scope root or stage-2-eligible sessions). No false claims of "you have these skills" when materialization would not fire.
- Opt-out via
inject_assigned_skills = falseat the agent level for packs that manage their own skill prompting.
Runtime and Operator Improvements
- Fixed
SkillsDirandMCPDirpopulation for agents declared incity.toml(previously only convention-discoveredagents/<name>/directories populated these fields). - Fixed a class of skill rendering regressions when
SKILL.mdfrontmatter began with a UTF-8 BOM. - Added a post-compose pass that normalizes agent-local asset directories across both convention-discovered and
city.toml-declared agents.
Reliability and Release Quality
- Added unit, integration, and acceptance-tier tests spanning the full skill lifecycle (add/edit/delete/rename), CLI surfaces, stage-1 and stage-2 materialization paths, and collision detection.
- Cleared 45 pre-existing lint issues that had accumulated on the hotfix branch during development.
- Validated end-to-end via multi-scenario manual smoke: city-scoped skills, rig-scoped skills, agent-local skills, worktree materialization, and long-lived
named_sessionmayor drain behavior.
Recommended Reading
- Skill materialization design
- Skill materialization implementation plan
- CLI reference
- Config reference
Full Changelog: v0.15.0...v0.15.1