Model Citizen by Jake Selby v0.13.1
GitHub
View source
Doc

One personal switch, two runtime projections

Path
docs/stance-demo.md
Lines
57

Nine stance axes ship, and three of them bind to enforcement: autonomy decides which shell-command grade stops and asks, delegation routes a spawn, and cost resolves a class, an effort and a budget per role. The other six are prose that swaps cleanly in both projections. The switch demonstrated below is delegation, one of the three.

The demonstration describes deterministic adapter behavior. It is not a native client qualification result; use the catalog for that evidence.

harness config set stances.delegation off
harness stances --json
harness sync

The resolved source is primitives/stances/delegation/off.md. Claude’s selected rule link and Codex’s generated instructions carry that same policy. With native hooks active, a Claude Agent event and a Codex spawn_agent event normalize to the same shared spawn policy: ask before the spawn, so only an explicit user request permits it. tests/test_lifecycle.py exercises both native envelopes.

harness config set stances.delegation tiered
harness stances --json
harness sync

Both projections now carry primitives/stances/delegation/tiered.md: bounded gathering is allowed; judgment stays with the session. Each shared role names a capability class and each adapter’s tiers table maps the classes to its own native models, so neither adapter interprets the other’s names. Both map all four. A class an adapter leaves out resolves upward or inherits the session model, and a role_bindings override of model to inherit does the same per role.

For communication, switch stances.voice from answer-card to scannable: the resolved text changes from the answer/why/catch contract to verdict-first sections and explicit status labels. The same source drives both projections, but only native behavioral tests can measure compliance.

Author a switch of your own

Create stances/feedback/direct.md and stances/feedback/gentle.md in an external primitive root:

# Feedback stance: direct
Lead with the conclusion. Name the evidence and the next useful action.
# Feedback stance: gentle
Explain the observation first, then suggest one concrete next action.

Register the absolute root in primitive_roots, select stances.feedback=direct, inspect with harness stances --json, then sync. Switching to gentle changes both projections without a provider-specific copy. A new prose stance is advisory in both adapters; it does not acquire new enforced controls by its name. The authoring contract covers project and session precedence, invalid selections, duplicate authorities and conflict constraints.

↑↓ move↵ openPagefind · indexed at build