Conversation
…/counterweight-audit.sh (Otto-278, task #269) Phase 2 of the cadenced-counterweight-audit stack. Phase 1 (the shell tool) merged in #418. This skill wraps the tool with: - Cadence-to-count mapping (quick=3 / medium=10 / long=all). - When-to-invoke guidance (session start, round open, per-N-ticks, pre-review, on-demand-drift-suspicion). - Four-step procedure (invoke → read → act on drift → log). - Drift-action decision tree (self-correct / file follow-up / edit clarify / escalate to BP-NN). - Phase 3 pointer: autonomous-loop tick-open hook is separate BACKLOG row. The skill deliberately does NOT auto-detect drift — drift detection requires the agent's own theory-of-mind introspection. The tool surfaces rules; the agent judges behavior. This matches the Aaron Otto-278 framing: cadenced re-read forces the inspection; judgment is the agent's. Composes with: - `skill-tune-up` (sibling cadenced-audit discipline for skills) - `skill-creator` (BP-NN promotion path when a counter re- tightens 3+ times) - `docs/AGENT-BEST-PRACTICES.md` (promotion target) - Otto-278 originating memory Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds Phase 2 of the counterweight-audit stack by introducing a new .claude skill wrapper that guides agents through invoking tools/hygiene/counterweight-audit.sh and acting on the results, with a documented cadence-to-count mapping.
Changes:
- Introduces
.claude/skills/counterweight-audit/SKILL.mddescribing when/how to run the counterweight-audit tool and how to respond to drift. - Documents a four-step audit workflow (invoke → read → act → log) plus cadence selection guidance and scope boundaries.
- Adds a reference-patterns section intended to link the skill to its originating counterweights and related skills/docs.
| Aaron-maintainer directives that corrected agent drift; each | ||
| is a counterweight filed against the specific pattern it | ||
| corrected. There are 51+ counterweights today, still growing. | ||
|
|
||
| ## Why this skill exists | ||
|
|
||
| Aaron Otto-278 (autonomous-loop 2026-04-24): |
There was a problem hiding this comment.
P1 (codebase convention): This skill body uses a direct contributor name (e.g., “Aaron …”). Repo operational standing rule forbids name attribution in code/docs/skills; use role references like “human maintainer” and keep names confined to the allowed carve-outs (docs/AGENT-BEST-PRACTICES.md:284-292). Please rewrite this section (and other occurrences later in the file) to remove direct names while preserving the meaning.
| Aaron-maintainer directives that corrected agent drift; each | |
| is a counterweight filed against the specific pattern it | |
| corrected. There are 51+ counterweights today, still growing. | |
| ## Why this skill exists | |
| Aaron Otto-278 (autonomous-loop 2026-04-24): | |
| human-maintainer directives that corrected agent drift; each | |
| is a counterweight filed against the specific pattern it | |
| corrected. There are 51+ counterweights today, still growing. | |
| ## Why this skill exists | |
| Human maintainer directive Otto-278 (autonomous-loop 2026-04-24): |
| - `memory/feedback_memory_alone_leaky_without_cadenced_inspect_audit_for_missing_balance_otto_278_2026_04_24.md` | ||
| — the originating rule. | ||
| - `memory/feedback_never_pray_auto_merge_otto_276_*.md` + | ||
| `memory/feedback_per_tick_inspect_with_named_signal_otto_277_*.md` | ||
| — the canonical drift-and-retighten example; the | ||
| motivating case for this skill. |
There was a problem hiding this comment.
P1 (xref integrity): The reference-pattern links here don’t appear to match actual files in memory/. For example, the Otto-276 and Otto-277 filenames/globs listed don’t correspond to the existing committed filenames, and the Otto-278 memory filename referenced below appears to be missing entirely. Please update these bullets to point at existing paths (or explicitly mark them as PR-pending if they’re expected to land separately).
| - `memory/feedback_memory_alone_leaky_without_cadenced_inspect_audit_for_missing_balance_otto_278_2026_04_24.md` | |
| — the originating rule. | |
| - `memory/feedback_never_pray_auto_merge_otto_276_*.md` + | |
| `memory/feedback_per_tick_inspect_with_named_signal_otto_277_*.md` | |
| — the canonical drift-and-retighten example; the | |
| motivating case for this skill. | |
| - `memory/` — originating Otto-278 counterweight memory; | |
| exact filename is PR-pending and must be updated to the | |
| committed path when that memory entry lands. | |
| - `memory/` — Otto-276 and Otto-277 counterweight | |
| memories are the canonical drift-and-retighten example; | |
| replace this placeholder with the exact committed paths | |
| instead of wildcard globs when those filenames are | |
| confirmed in-tree. |
| - **Does NOT replace `skill-tune-up` or `factory-balance- | ||
| auditor`.** Those audit different surfaces (skills and | ||
| factory-shape respectively). This skill audits | ||
| counterweight memories specifically. |
There was a problem hiding this comment.
P2 (markdown correctness): The inline-code span for the sibling skill name is split across a line break (factory-balance- / auditor), which breaks the inline code formatting and may render inconsistently (or trip markdownlint). Keep the inline-code token on a single line (e.g., factory-balance-auditor).
| - **Does NOT replace `skill-tune-up` or `factory-balance- | |
| auditor`.** Those audit different surfaces (skills and | |
| factory-shape respectively). This skill audits | |
| counterweight memories specifically. | |
| - **Does NOT replace `skill-tune-up` or | |
| `factory-balance-auditor`.** Those audit different | |
| surfaces (skills and factory-shape respectively). This | |
| skill audits counterweight memories specifically. |
| | Cadence | Count | When | Time budget | | ||
| |---|---|---|---| | ||
| | `quick` | 3 | Session start; every 5 autonomous-loop ticks | ~2 min | | ||
| | `medium` | 10 | Every 10 autonomous-loop ticks; pre-review | ~5 min | | ||
| | `long` | all (51+) | Round open; drift-audit cadence per Otto-264 | ~15-20 min | |
There was a problem hiding this comment.
P2 (markdown correctness): The cadence table uses double leading pipes (|| …) which creates an empty first column and can render oddly. Use standard single-pipe table syntax (| Cadence | … |) with a matching separator row so the table is well-formed.
Summary
Phase 2 of task #269 (counterweight-audit skill/tool). Phase 1 (the shell tool) merged in #418. This PR adds the SKILL.md wrapper so agents can invoke the tool via the Skill tool with consistent cadence-to-count mapping.
Key design choice
Skill explicitly does NOT auto-detect drift. The tool surfaces rules; the agent judges behavior. Matches Aaron's Otto-278 framing: cadenced re-read forces inspection; judgment is the agent's job.
Test plan
🤖 Generated with Claude Code