Help us shape the future of Go! Take the 2026 Go Developer Survey

agent-compose

module
v2.219.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 28, 2026 License: MIT

README ΒΆ

agent-compose

Compose agent personas and context

agent-compose composes the persona and context an agent harness loads. It selects a role, the personality meld that role carries, the skills that role can see, and the tool inventory it gets, then materializes one immutable bundle of plain files. Claude Code, Codex, Goose, and OpenCode all take the same bundle.

The bundle is context and nothing executable. Permissions, runtime facts, and lifecycle stay with whatever launches the agent, so a role slug travels without authority attached to it. You can read and diff every file before a run, and verify reports the bundle complete before you do.

The roster

roster:core is the zero-config default. It describes thirteen seats and offers ten, because three are archived. Each one answers to its own creature (no pronoun - a seat is not a person), a charter, and a meld of two personality traits that shape how it writes and what it reaches for first.

  • πŸͺ’πŸͺ¨ Beetle-Ox - Platform Engineer - builds and lands the foundational software the rest of the estate is built on. Tenacious and grounded.
  • πŸ›‘οΈπŸͺ¨ Turtle-Ox - Systems Administrator - operates the real hosted systems and release surfaces. Protective and grounded.
  • πŸ›‘οΈπŸͺ¨ Turtle-Ox - Junior Sysadmin - diagnoses hosted systems and hands mutating commands to the human. Protective and grounded.
  • πŸ›‘οΈπŸͺ¨ Turtle-Ox - Access Sysadmin - owns agent permission and harness configuration values across the estate. Protective and grounded; launches on Codex or Goose.
  • πŸ§ͺπŸͺ¨ Frog-Ox - Applied Scientist - measures how agents, models, and inference actually behave on real hardware. Empirical and grounded.
  • 🎨🌈 Imp-Dragonfly - Frontend Engineer - shapes and builds the surfaces a person navigates. Playful and imaginative.
  • 🀿🌈 Whale-Dragonfly - Game Developer - ships playable games, the code and the assets and the build that carries both. Immersed and imaginative.
  • βœ‚οΈπŸ”­ Griffin-Goose - Portfolio Director - decides what the portfolio does next, and carries each decision to its gate. Decisive and outward.
  • βœ‚οΈπŸ”­ Griffin-Goose - Project Manager - keeps the tracker true and hands decisions to the director. Decisive and outward.
  • πŸ•―οΈπŸ”­ Panda-Goose - Developer Advocate - turns real work and audience evidence into accurate content and informed commitments. Warm and outward.
  • πŸͺžπŸͺ’ Snake-Beetle - AI Risk Analyst - archived - assessed whether an AI system was fit to ship, named the exclusions, and stood behind the file that proved it. Suspicious and tenacious.
  • πŸ•―οΈπŸ›‘οΈ Panda-Turtle - Behavioral Psychologist - archived - stayed with what a person actually brought, and named the thing they were steering around before offering relief. Warm and protective.
  • πŸͺ’πŸ”­ Beetle-Goose - Investigative Reporter - archived - worked out who an unmet party was from what they published, and said whether to approach them at all. Tenacious and outward.

The catalogue lists eleven traits. Five belong to one seat alone (πŸͺž suspicious, βœ‚οΈ decisive, πŸ§ͺ empirical, 🀿 immersed, 🎨 playful) and six are bonds two or more seats share: πŸͺ¨ grounded across the builders and sysadmin twins, 🌈 imaginative across the two makers, and πŸ”­ outward, πŸͺ’ tenacious, πŸ•―οΈ warm and πŸ›‘οΈ protective across the rest.

Each personality carries a color, an emblem, a motif, and a body written in prose, which is where the creature art comes from and what a voice melds along with the role's own. See docs/identity.md and docs/personality.md. just palette-serve renders the whole catalogue locally.

Selection is exclusive. An external person package contributes its own roles, seats, personality definitions, and evaluation context, and it replaces roster:core wholesale rather than merging with it. An external-only policy makes that boundary fail closed across the machine. See docs/person-packages.md.

Install

From the public internet, with Go 1.25.5 or newer:

git clone https://github.com/coilyco/agent-compose.git
cd agent-compose
go install ./cmd/agent-compose
mkdir -p ~/.agent-compose && cp -R seed/roster ~/.agent-compose/roster
agent-compose catalog roles

The binary carries no roster, so the copy is required. Skip it and the first catalog roles reports no roster is mounted, naming every path it tried. go install writes to GOBIN, by default $(go env GOPATH)/bin, which needs to be on your PATH. agent-compose version reports the build you are running.

Releases publish on GitHub. The Homebrew tap, Scoop bucket and raw release binaries install acompose and the roster too, with no tailnet needed. The commands are in guides/quickstart.md.

Use it

acompose                              # converge the host from the local catalogue
acompose -- <command>                 # refresh context, then exec the command
agent-compose launch <role> <harness> # launch one harness with an assigned role

New here? guides/quickstart.md goes from an empty terminal to a composed role, and the role guides beside it cover when to reach for each seat.

--reapply rewrites the host compose layout even when it is already current, and --verbose prints every source => destination mapping it places. --explain adds the role briefing, the credits, the expression vocabulary, and the full decision tree to the summary.

When you want to see what a bundle actually decided rather than trust it, describe renders its stored decision tree, diff reports the semantic change between two bundles, and verify checks one is complete and safe to consume. Composition adapters can project a verified bundle into an empty staged home and wrap it in their own schema. See docs/staged-home.md.

The board comes from the roster

The evaluation board is derived from the roster rather than written beside it. challenges.yaml holds the cases the roster implies: boundaries and their owners produce the pairs, adjacency produces the role-fit targets, and each role's meld produces the personality cases. Add a boundary, flip an adjacency edge, or swap a personality, and the challenge list moves with it. Every case corresponds to something in the roster, and every roster change moves what gets tested.

The hard cases are generated on purpose. Role adjacency names each role's two likeliest absorptions, and those reasons become the descriptors a generator uses to build exactly the confusion a seat is most at risk of.

Three parties and none of them holds two seats: a generator authors the cases, a subject answers them through a model gateway, and a human grades them. The grading half ships separately as housecast grade, so it holds no runner and no model client, and grading never spends a token or touches a deployed system. Details in docs/evaluation.md.

What the board needs, and what runs without it

Two pieces of the eval half come from outside this repository. housecast is pinned by tag, and the subject answers through a model gateway, an internal transport, so running the board yourself means supplying a model transport in its place.

The composer stands on its own. The bundle, the roster, the cascade, describe, diff, and verify all work with the eval stack absent, which is the half you get from brew install alone.

Development

Dev verbs are recipes in the justfile. just test runs the Go tests plus the full hook sweep. just smoke builds the real acompose entry point and converges an isolated temporary home twice, covering roster, cascade, skills, load points, and idempotence without touching live host state or the network. just palette-serve starts the local personality palette explorer.

Every push to canonical main validates and publishes the next minor release. The canonical forge is the source of truth and the GitHub mirror is verified.

License

MIT. See LICENSE.

See also

Directories ΒΆ

Path Synopsis
cmd
agent-compose command
internal
agentid
Package agentid reads the dictatable short id naming one running agent session, so a terminal surface can show which agent it is looking at.
Package agentid reads the dictatable short id naming one running agent session, so a terminal surface can show which agent it is looking at.
cascade
Package cascade is the absorbed v1 composer: it composes AGENTS.COMPOSE.md doctrine sources into COMPOSED files, wires harness load-point symlinks, and emits the compiled repository plan convergence consumers read.
Package cascade is the absorbed v1 composer: it composes AGENTS.COMPOSE.md doctrine sources into COMPOSED files, wires harness load-point symlinks, and emits the compiled repository plan convergence consumers read.
catalogmanifest
Package catalogmanifest loads AOS-hydrated skill roots without granting Agent Compose ownership of Git, cache, or host convergence policy.
Package catalogmanifest loads AOS-hydrated skill roots without granting Agent Compose ownership of Git, cache, or host convergence policy.
catalogset
Package catalogset indexes the compiled catalogue superset by source, so an org can be expanded and a skill reached by address.
Package catalogset indexes the compiled catalogue superset by source, so an org can be expanded and a skill reached by address.
color
Package color owns favorite-color math: hex parsing, the terminal-legible OKLab band, and derived favorites for multi-component identities.
Package color owns favorite-color math: hex parsing, the terminal-legible OKLab band, and derived favorites for multi-component identities.
compose
Package compose orchestrates one composition end to end so the CLI stays a thin rendering layer over the same path the tests exercise.
Package compose orchestrates one composition end to end so the CLI stays a thin rendering layer over the same path the tests exercise.
converge
Package converge is bare `agent-compose compose`: refresh the roster artifact, then run the cascade - the whole host in one verb.
Package converge is bare `agent-compose compose`: refresh the roster artifact, then run the cascade - the whole host in one verb.
describe
Package describe renders stored decision evidence for humans.
Package describe renders stored decision evidence for humans.
home
Package home resolves the single state directory, ~/.agent-compose, and migrates a pre-consolidation ~/.config/agent-compose into it once.
Package home resolves the single state directory, ~/.agent-compose, and migrates a pre-consolidation ~/.config/agent-compose into it once.
launch
Package launch is the refresh-then-exec path: compose, project, and hand off to the real harness with a recursion guard and a last-known-good net.
Package launch is the refresh-then-exec path: compose, project, and hand off to the real harness with a recursion guard and a last-known-good net.
layouts
Package layouts loads the harness load-point table, so no harness name lives in Go.
Package layouts loads the harness load-point table, so no harness name lives in Go.
mcpscope
Package mcpscope narrows the host MCP inventory to one role's servers for a native launch.
Package mcpscope narrows the host MCP inventory to one role's servers for a native launch.
nativelaunch
Package nativelaunch builds and projects one caller-assigned role bundle for a native harness session.
Package nativelaunch builds and projects one caller-assigned role bundle for a native harness session.
nativeui
Package nativeui projects a selected person into the Claude Code terminal surfaces a composed identity can drive: a custom theme and the settings fragment that selects it and carries the role's spinner voice.
Package nativeui projects a selected person into the Claude Code terminal surfaces a composed identity can drive: a custom theme and the settings fragment that selects it and carries the role's spinner voice.
overlay
Package overlay projects the canonical person model into a compact, caller-stateful identity surface.
Package overlay projects the canonical person model into a compact, caller-stateful identity surface.
palette
Package palette projects a selected person source into the small JSON contract consumed by a personality palette explorer.
Package palette projects a selected person source into the small JSON contract consumed by a personality palette explorer.
person
Package person loads the mounted roster: roles, agent seats, personality definitions, and the invariant.
Package person loads the mounted roster: roles, agent seats, personality definitions, and the invariant.
personpolicy
Package personpolicy owns the policy vocabulary for choosing a person package.
Package personpolicy owns the policy vocabulary for choosing a person package.
project
Package project places bundle content at harness load points.
Package project places bundle content at harness load points.
repositoryplan
Package repositoryplan owns the strict compiled repository-availability contract.
Package repositoryplan owns the strict compiled repository-availability contract.
roleslug
Package roleslug maps a retired role slug to the slug that replaced it, so a launch or a provider roles.kdl still naming the old slug keeps resolving while the fleet migrates.
Package roleslug maps a retired role slug to the slug that replaced it, so a launch or a provider roles.kdl still naming the old slug keeps resolving while the fleet migrates.
roster
Package roster renders the seat dispatch table as a v1-cascade source: every agent self-selects its identity by harness and role at launch.
Package roster renders the seat dispatch table as a v1-cascade source: every agent self-selects its identity by harness and role at launch.
rostertest
Package rostertest points a test binary at the repository's seed roster.
Package rostertest points a test binary at the repository's seed roster.
skillaudit
Package skillaudit names every skill that two load roots both offer and says whether the copies match.
Package skillaudit names every skill that two load roots both offer and says whether the copies match.
skillmount
Package skillmount links configured skill roots into harness-native skill directories while tracking exactly which links agent-compose owns.
Package skillmount links configured skill roots into harness-native skill directories while tracking exactly which links agent-compose owns.
skillselector
Package skillselector validates and applies bounded ordinary-skill selectors.
Package skillselector validates and applies bounded ordinary-skill selectors.
statusline
Package statusline renders compact identity and composition health from the immutable bundle selected by the nearest Agent Compose projection.
Package statusline renders compact identity and composition health from the immutable bundle selected by the nearest Agent Compose projection.
telemetry
Package telemetry decides the OpenTelemetry environment a Claude seat launches with: token metrics tagged by seat, and never logs or events.
Package telemetry decides the OpenTelemetry environment a Claude seat launches with: token metrics tagged by seat, and never logs or events.
treehash
Package treehash digests a skill or source tree by content, so two copies of one commit compare equal.
Package treehash digests a skill or source tree by content, so two copies of one commit compare equal.
voiceprofile
Package voiceprofile builds the linter profile a composed seat lints itself against.
Package voiceprofile builds the linter profile a composed seat lints itself against.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL