Repository navigation
v0.14.0 — Cohort aliases + joint (model, effort) calibration primitive
v0.14.0 — Cohort aliases + joint (model, effort) calibration primitive
One milestone (M010) reshapes /aih-calibrate around role-based cohorts — each cohort binds both model and effort jointly, so one flag downgrades a whole role in one commit. Also bundles a Phase-1 rendering bugfix.
Headline
- 4 cohort aliases —
:planner,:doer,:verifier,:adversarial— formalize the 43 agents into role buckets with canonical membership inpkg/.aihaus/skills/aih-calibrate/annexes/cohorts.md. - Joint
(model, effort)calibration —/aih-calibrate --cohort :doer --model sonnet --effort highdowngrades all 11 doers in one atomic commit.--agent <name> --model X --effort Yis an escape hatch for truly atypical agents (both axes required). :adversarialis preset-immune —plan-checker,contrarian,reviewer,code-reviewernever mutate via--preset <name>(extends ADR-M008-C from 2 → 4 agents via ADR-M010-A).- Schema v2 sidecar — v1 auto-migrates.
.aihaus/.calibrationbumps v1 → v2 additively. Existing v0.13.0 sidecars keep restoring byte-identically on first v0.14.0/aih-update; first subsequent/aih-calibratewrites v2. - Bundled bugfix — Phase-1 distribution report now renders as a GFM pipe table instead of Unicode box-drawing (the latter was clipping to garbage on narrow terminals / cmd.exe / split panes).
What changed (M010)
afd26d6fix(calibrate): SKILL.md Phase 1 step 4 now prescribes a GFM pipe table (| Agent | Model | Effort | PermissionMode |) — explicit "NOT Unicode box-drawing" directive. Root cause in.aihaus/debug/calibrate-table-fragment.md.546581ffeat(calibrate): newannexes/cohorts.md— canonical 43-agent → 4-cohort mapping. 5-column pipe table, totals 17 planners / 11 doers / 11 verifiers / 4 adversarials.34877bffeat(calibrate):annexes/presets.mdrewrite — each preset now expressed as 4 cohort tuples + a bounded override block (≤ 5 grouped lines per preset). Coverscost-optimized,balanced,quality-first,auto-mode-safe. Applyingbalancedon a clean v0.13.0 install produces zero byte-diff (AC-07 zero-diff reversibility contract preserved).4d909d9docs(calibrate):annexes/state-file.mddocuments sidecar schema v2 side-by-side with v1 legacy; migration algorithm auto-infers cohort rows from current frontmatter state, falls back to per-agent overrides when non-uniform.6a9df51feat(calibrate): SKILL.md gets--cohort :<name> --model X --effort YCLI surface + Phase-4 v2 sidecar write. Phase-2 preset-immune filter reads:adversarialmembers fromcohorts.md(no hardcoded list). Newannexes/cli-surface.mdannex absorbs the Phase-3/4 detail to keep SKILL.md under 200 lines.925412cfeat(calibrate):restore-calibration.sh+install.ps1::Restore-Calibrationlearn schema=2 + v1 auto-migration. Cohort membership resolved at runtime from<aihaus_root>/skills/aih-calibrate/annexes/cohorts.md. CRLF handling preserved.545bee9test(calibrate): smoke Check 27 A5 asserts preset apply skips:adversarialmembers; new Check 28 covers v1→v2 migration round-trip (6 sub-assertions). New fixturestools/fixtures/calibration/v2.calibration+v2-migration-input.calibration. Both checks source the production shared lib — no test/prod drift.6ce24b5chore(release):pkg/VERSION0.13.0 → 0.14.0, CLAUDE.md "Calibration and Permission Modes" paragraph extended with cohort shape, README v0.14.0 callout.
Binding decisions (ADRs)
- ADR-M008-A (amended M010) — cohort-scoped
model:edits now allowed via three explicit paths: (a)--preset <name>iterating cohort tuples excluding:adversarial; (b)--cohort :<name> --model X --effort Y; (c)--agent <name> --model X --effort Y(escape hatch, both axes required). Still rejected: bare--model X;--agent <name> --model Xwithout effort. - ADR-M010-A (new) — 4 cohorts with joint (model, effort) as calibration primitive; membership in
cohorts.md(single source of truth — not duplicated into frontmatter); preset-map expressed as cohort tuples + overrides;:adversarialcohort formalizes preset-immunity. - ADR-M008-C (superseded by ADR-M010-A) — preset-immune list extended from 2 → 4 agents via
:adversarialcohort; semantics preserved byte-identically. - ADR-M009-A (preserved) — sidecar ownership (user-owned, never-committed, gitignored, absolute values) unchanged; only schema version + field shape evolved.
Usage
New CLI surface
# Interactive — Phase-1 now renders as a readable pipe table
/aih-calibrate
# Apply a preset (cohort tuples + overrides)
/aih-calibrate --preset balanced
# Downgrade a whole cohort in one atomic commit
/aih-calibrate --cohort :doer --model sonnet --effort high
# Per-agent escape hatch (both axes required)
/aih-calibrate --agent pattern-mapper --model haiku --effort medium
# Read-only audit (includes new Cohort column)
/aih-calibrate --inspectCohort membership
:planner(17) — analyst, architect, planner, product-manager, roadmapper, eval-planner, domain-researcher, phase-researcher, project-researcher, ai-researcher, framework-selector, ux-designer, ui-researcher, advisor-researcher, assumptions-analyzer, brainstorm-synthesizer, research-synthesizer:doer(11) — implementer, frontend-dev, executor, code-fixer, doc-writer, intel-updater, test-writer, notion-sync, project-analyst, codebase-mapper, pattern-mapper:verifier(11) — verifier, integration-checker, security-auditor, doc-verifier, eval-auditor, nyquist-auditor, ui-auditor, ui-checker, debugger, debug-session-manager, user-profiler:adversarial(4, preset-immune) — plan-checker, contrarian, reviewer, code-reviewer
Full mapping with current (model, effort) per agent: pkg/.aihaus/skills/aih-calibrate/annexes/cohorts.md.
Upgrade notes
v0.13.0 → v0.14.0 is byte-safe
/aih-updatefrom v0.13.0 restores v1.aihaus/.calibrationcleanly through the v2-aware reader (auto-migration happens in memory; file stays v1 until next/aih-calibrate)./aih-calibrate --preset balancedon a clean v0.13.0-state install produces zero byte-diff — the new cohort+overrides spec is mathematically equivalent to v0.13.0's per-agent enumeration.- First calibrate run on v0.14.0 rewrites
.aihaus/.calibrationin schema v2 format.
New preset vocabulary, same effective distribution
v0.14.0 ships the same effective distribution as v0.13.0 cost-optimized (no silent tier shifts). The cohort redesign is representational — users opt into the new vocabulary when they next run /aih-calibrate.
--agent <name> --model X without --effort is rejected
If you were hand-editing model: frontmatter outside /aih-calibrate under v0.13.0 (not officially supported but technically possible), run /aih-calibrate --preset <your-preset> once on v0.14.0 to populate a consistent v2 sidecar before the next /aih-update.
Claude Code requirements (unchanged from v0.13.0)
effort: xhighrequires Claude Code ≥ v2.1.111. Older releases silently fall back toeffort: high.permissions.defaultMode: autorequires Claude Code ≥ v2.1.83. Older releases ignore the field.
Deferred / follow-up
- R11 — pre-existing
update_aihaus_dirrm -rf+cp -Rcrash window (Ctrl-C leaves agents/ empty). Out of scope; dedicated plan if prioritized. - R12 — pre-v0.13.0 hand-edited frontmatter migration. One-time user action; documented in
state-file.md. - L1/L2 (carried from M009) —
--dry-runphantom guard doc cleanup; "warn-per-line" spec/code alignment. Both LOW, deferred to follow-up doc sweep. - G2 — smoke Check 28 fixture doesn't exercise
cohort.planner.*apply (sets doer + verifier only). All 4 cohorts traverse identical production code; risk negligible.
Full changelog
See the merged PR: M010 — #10