cgg-runtime/skills/cadence/SKILL.md
Session epoch boundary event — emits canonical tic, captures lessons, writes handoff. CENTROID: session epoch boundary event IS: - the ONE place the handoff is written; the clock of the governance system IS NOT: collapse_zones: - memory write - signal emitter - CogPR extractor - Mogul spawner - inline governance mutation sibling_overlaps: - /review worker - /siren ticker - chore executor WHEN: - once per tic at session end - on mid-session epoch boundaries when posture shifts materially NOT WHEN: - during chores (chores are appetizer, real work happens alongside) - after single-step edits - when the active plan already covers the thread RELATES TO: - /review (governance judgment — not a /review worker; /cadence is the clock, /review is the judge) - /siren (signal ops — not a /siren ticker; /cadence writes, /siren classifies) - Mogul mandate (cadence writes, Mogul consumes) ARGS: stance: dispatch off_envelope: ask # off_envelope rationale: /cadence is load-bearing; an undeclared arg may indicate # a caller who is confused about skill identity — ask prevents silent misfires. core_dispatch_rays: - "" → downbeat (full session hygiene) - "double-time" → syncopate (≤5% context emergency variant) secondary_modulation_axes: - detail: normal | high - emphasis: governance | production | projection
npx skillsauth add prompted365/context-grapple-gun cadenceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Unified session boundary command. Dispatches based on arguments:
/cadence (no args) — full downbeat. Same as the former /cadence-downbeat./cadence double-time — emergency syncopate. Minimal tic + handoff in <=5% context window. Same as the former /cadence-syncopate.Parse the user's arguments after /cadence to determine the mode. Default (no args) = downbeat.
When the user invokes /cadence with no arguments (or explicitly says "downbeat"), execute the System Shutdown & Hygiene Sequence. All steps are sequential — do not queue them.
All operational mutation happens here. These are the writes that MUST complete before the handoff.
Locate the active plan file in ~/.claude/plans/. Evaluate its status based on the spirit of the original goal. Explicitly mark it 100% 'Completed', 'Superseded', or leave it 'Active' only if the exact thread must resume.
Primary path (MANDATORY when available): Run cadence-ops.py — it handles tic emission, conformation snapshot, and mandate cascade in one deterministic invocation. This is the ONLY correct path for conformation writing. Do NOT write conformations inline or delegate to /siren conformation — LLM-approximated signal counts produce stale data (validated: tic-101 reported 2305 active signals instead of 0 because inline code counted raw JSONL lines without last-write-wins dedup).
# Resolve cadence-ops.py location
ZONE_ROOT="${CLAUDE_PROJECT_DIR:-$(pwd)}"
while [ "$ZONE_ROOT" != "/" ] && [ ! -f "$ZONE_ROOT/.ticzone" ]; do ZONE_ROOT=$(dirname "$ZONE_ROOT"); done
CADENCE_OPS=""
for candidate in \
"$ZONE_ROOT/vendor/context-grapple-gun/cgg-runtime/scripts/cadence-ops.py" \
"$ZONE_ROOT/canonical_developer/context-grapple-gun/cgg-runtime/scripts/cadence-ops.py" \
"${CLAUDE_PLUGIN_ROOT:+$CLAUDE_PLUGIN_ROOT/cgg-runtime/scripts/cadence-ops.py}" \
"$HOME/.claude/cgg-runtime/scripts/cadence-ops.py"; do
[ -n "$candidate" ] && [ -f "$candidate" ] && CADENCE_OPS="$candidate" && break
done
# Run it (handles tic + conformation + mandate)
python3 "$CADENCE_OPS" --zone-root "$ZONE_ROOT" --mode downbeat
Parse the JSON output to extract (keys are at the top level of the JSON object — there is no result wrapper):
tic.counter_after — the new tic counttic.timestamp — the tic timestamptic.counter_before — the prior tic count (work_tic for handoff title)conformation.summary — signal/warrant/cogpr countsmandate — mandate status and due cyclescockpit_intent — T2b I-B emission receipt: {emitted, intent_id, reason} (or {emitted: false, error} on fail-soft failure; never blocks cadence)Anti-pattern (do not write): data.get('result', {}).get('tic', {}) — cadence-ops emits tic, conformation, and mandate as top-level keys, not nested under result. A parser that walks result.* returns None for every field; re-invoking cadence-ops to "retry" on the None values emits a phantom tic on top of the legitimate one. Use data['tic']['counter_after'] etc. directly. (Inscribed tic 266 post phantom-tic incident; refines CGG "Subagent Delegation — Schema Contracts" KI.)
Cockpit-intent emission (T2b I-B, tic 267). cadence-ops.py step 4 emits a cockpit.intent envelope with intent_class: observe after the tic + conformation + mandate writes. Every counted /cadence produces an explicit declared-state envelope in addition to the conformation snapshot — composes with federation KI Declared operational state must persist to a governed audit surface. The emission is fail-soft: import or POST errors land in result["cockpit_intent"] but never block cadence output. See audit-logs/governance/cockpit-intent-t2b-invocation-discipline-spec-tic264.md §I-B. Posture is sourced from the --posture arg (or inferred from environment); mode defaults to LITE for non-interactive cadence emissions. Emission appends to audit-logs/cockpit/intents/YYYY-MM-DD.jsonl via the Python emitter library (cgg-runtime/scripts/lib/cockpit_intent_emit.py) which writes byte-shape-parity rows with the T2a vite POST endpoint.
Report: Tic #COUNTER_AFTER (physical) at TIMESTAMP
Fallback path (only if cadence-ops.py is not found): Use the inline Python tic emission below, then call /siren conformation for the snapshot. This is inferior because /siren conformation relies on LLM signal counting.
A tic event and a counted tic are not the same thing.
Use this law:
count_mode: "ignored"Canonical reality is determined by counted tic progression, not by timestamps.
| Field | Description |
|-------|-------------|
| type | Always "tic" |
| tic | ISO-8601 timestamp |
| tic_zone | Zone name only (never raw .ticzone JSON) |
| cadence_position | "downbeat" or "syncopate" |
| count_mode | "counted" or "ignored" |
| count_reason | Short reason string |
| domain_counter_before | Counter value before this event |
| domain_counter_after | Counter value after (same as before if ignored) |
| global_counter_before | Counter value before this event |
| global_counter_after | Counter value after (same as before if ignored) |
Counting rule (SUBSTRATE INVARIANT): The canonical tic count is the physical number of counted tic entries across all $ZONE_ROOT/audit-logs/tics/*.jsonl files — entries where count_mode == "counted". Determined by JSON-parsing — never by grep, never by reading an embedded counter field.
python3 - <<'PY'
import json, os, glob
from datetime import datetime, timezone
from pathlib import Path
ZONE_ROOT = Path(os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd()))
TIC_DIR = ZONE_ROOT / "audit-logs" / "tics"
TIC_DIR.mkdir(parents=True, exist_ok=True)
now = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
today = now[:10]
ticzone_path = ZONE_ROOT / ".ticzone"
zone_name = "canonical"
if ticzone_path.exists():
try:
zone_obj = json.loads(ticzone_path.read_text())
zone_name = zone_obj.get("name", zone_name)
except Exception:
pass
def counted_tics():
total = 0
for f in glob.glob(str(TIC_DIR / "*.jsonl")):
with open(f, "r", encoding="utf-8") as fh:
for line in fh:
line = line.strip()
if not line: continue
try: obj = json.loads(line)
except json.JSONDecodeError: continue
if obj.get("type") == "tic" and obj.get("count_mode", "counted") == "counted":
total += 1
return total
before = counted_tics()
count_mode = "counted"
count_reason = "cadence"
after = before + 1 if count_mode == "counted" else before
event = {
"type": "tic", "tic": now, "tic_zone": zone_name,
"cadence_position": "downbeat", "count_mode": count_mode,
"count_reason": count_reason,
"domain_counter_before": before, "domain_counter_after": after,
"global_counter_before": before, "global_counter_after": after
}
path = TIC_DIR / f"{today}.jsonl"
fd = os.open(str(path), os.O_APPEND | os.O_CREAT | os.O_WRONLY, 0o644)
try: os.write(fd, (json.dumps(event, ensure_ascii=False) + "\n").encode("utf-8"))
finally: os.close(fd)
counter_path = Path.home() / ".claude" / "cgg-tic-counter.json"
counter_path.parent.mkdir(parents=True, exist_ok=True)
tmp = counter_path.with_suffix(".tmp")
tmp.write_text(json.dumps({"count": after, "last_tic": now}) + "\n", encoding="utf-8")
tmp.replace(counter_path)
print(f"Tic emitted at {now} [{count_mode}]")
print(f"Canonical count: {before} -> {after}")
PY
After inline tic emission, execute /siren conformation as a fallback conformation writer.
If cadence-ops.py was used in Step 0.5, signal state is already captured in the conformation — skip /siren tick. Only execute /siren tick if the inline fallback was used.
Did we establish a new rule or optimize a workflow? If yes, capture it as a <!-- --agnostic-candidate --> block using the COGNITIVE band. Route based on truth-state (see write rule below).
Include birth context when available:
posture: current session posture (e.g., "ENG/DIRECT", "OPS/META")cwd_context: working directory relative to project rootbirth_tic: the tic number from Step 0.5These fields are optional. Omit if posture is not in use.
Write to the nearest governance file based on truth-state:
~/.claude/projects/*/memory/MEMORY.md)When writing to a subdir CLAUDE.md, ensure the project root CLAUDE.md indexes it (add a reference in any existing "subdirectory guides" section).
Review the session's delegations. For each non-trivial delegation (anything beyond direct conversation), append a routing decision record to audit-logs/routing/decisions.jsonl. Include: pressure class, intake class, weight, mode selected, recipient(s), and reason. Mark outcome as null — backfill happens next session or at review.
Schema per entry:
{
"decision_id": "tic-{TIC}-seq-{N}",
"tic": 134,
"timestamp": "ISO-8601",
"actor": "ent_homeskillet",
"input": {
"pressure_class": "endogenous | exogenous",
"source_description": "one-liner",
"intake_class": "map | harpoon | quiver | reject | unclassified",
"weight": "light | medium | heavy"
},
"routing": {
"mode": "direct | split | spec_swarm | envelope",
"recipient_count": 1,
"recipients": ["entity_names"],
"envelope_id": "or null",
"spec_ref": "path or null"
},
"context": {
"session_tic": 134,
"active_signals": 5,
"pending_cprs": 0,
"inbox_depth": 0,
"reason": "one-liner: why this mode was selected"
},
"outcome": null
}
This is a 2-minute journaling step. If the session had zero delegations, skip. When routing decisions are captured, add to Next Actions: "Backfill routing decision outcomes from prior session (N decisions pending)."
Step 3a — Read the active plan file FIRST (Look-First gate, mandatory).
Before invoking EnterPlanMode, locate the most-recent file in ~/.claude/plans/ (by mtime) and Read it via the Read tool. The Claude Code plan-write surface (Updated plan / native plan UI write) is hard-gated by the harness: it refuses to update a plan file unless that file has been Read in the current session. Globbing, ls, or referring to it from prior context does not satisfy the gate — only an explicit Read tool invocation does. Skipping this step produces a File has not been read yet. Read it first before writing to it. error mid-write, costing the session a retry and a stalled plan emission. The Read also feeds Discernment-at-Penning Discipline (below) — same act, two purposes.
# Locate by mtime
ACTIVE_PLAN=$(ls -t ~/.claude/plans/*.md 2>/dev/null | head -1)
echo "Active plan file: $ACTIVE_PLAN"
# Then Read tool: Read(file_path=$ACTIVE_PLAN)
Step 3b — Invoke EnterPlanMode.
Use the EnterPlanMode tool to switch to Claude Code's native plan mode. This is mandatory and mechanical — call the tool, do not just declare the shift.
Generate a NEW native plan. The plan content IS the handoff — a bridge surface carrying session state between contexts, not authoring truth or constitutional record. This is the ONE AND ONLY place the handoff gets written. Claude Code auto-saves the plan to ~/.claude/plans/ when approved, and references it in the next session.
A close handoff names TWO tics, not one: the tic the session worked under and the tic emitted by /cadence for the next session's entry. Naming only one collapses the distinction and propagates off-kilter framing into future sessions.
Cadence tic semantics:
current_tic = N (just-emitted by prior session's /cadence).current_tic = N+1.Required title format:
tic{work_tic}-close-for-tic{entry_tic}-entry
Where:
work_tic = the tic the session actually worked under = counter_before from cadence-ops output (or current_tic from the system reminder at session open).entry_tic = the tic emitted by this /cadence for the next session = counter_after from cadence-ops output.Both must appear explicitly. Both are derivable from cadence-ops.py's top-level JSON output (tic.counter_before and tic.counter_after) — read them rather than inferring from context. (No result. prefix; see Step 0.5 anti-pattern note.)
Forbidden anti-pattern:
Titles like tic{emitted_tic}-close alone (e.g., tic264-close immediately after emitting tic 264). This conflates emission-tic with work-tic. Downstream readers — next session's framing, /review docket attribution, audit-log narration, conformation references — all inherit the title's tic number as the canonical work-tic. Mis-labeling silently shifts the federation's perception of when work happened by one tic, which compounds across review cycles.
Verification at next /cadence (Architect-locked falsification test):
tic{N}-close-for-tic{N+1}-entry (where N is the work-tic).tic{N+1}-close alone (using the emitted tic as the headline tic).Any State-of-the-Federation publication or orchestrator-voice state entry (handoff signature, ReBru block author line, orchestrator-authored bench-packet annotation, inscription signature) must carry a two-fact signature naming both load-bearing identities:
ent_homeskillet, SkySkillet, or whichever ent-id the orchestrator is acting under).c47 = Claude Opus 4.7; c46 = Claude Opus 4.6; c45 = Claude Opus 4.5; future models extend the suffix forward).Convention example: ent_homeskillet-c47 or SkySkillet-c47. Both halves are mandatory: entity-role alone loses model provenance; model alone loses orchestrator identity.
Why both halves: orchestrator state entries are read across many sessions and many model generations. The entity-role tells future readers which orchestrator instance authored the entry; the model suffix tells them which generation produced it (decisive when interpreting voice, scope assumptions, or known model-class behavioral biases). A signature carrying only one fact silently strips half the load-bearing provenance.
Where it appears: handoff signatures (footer or signature block), orchestrator-voice ReBru block authors, State-of-the-Federation publication signature lines, any inscription where "who wrote this and on which model" is load-bearing for later interpretation.
<!-- landed-from cpr_c47_generation_suffix_convention_for_orchestrator_state_entries_tic274 (PROMOTE-SPEC at /review tic 278; doctrine inscribed at canonical_developer/context-grapple-gun/CLAUDE.md; skill body extension owed at tic 280 per Verdict-Shape KI). Band: COGNITIVE. Domain rung: CGG. -->The Architect uses the /cadence ARGUMENTS string as a forward-projection steering surface, not just a session-end hygiene step. The ARGUMENTS string carries: (1) what should be prioritized at the next session start (e.g., "Phase α launch + blocking-β decision presentation"), (2) what authoring direction to apply (e.g., "extend dial-based config pattern from landmass to physics + world"), (3) what the rationalization should foreground (e.g., "recommended-and-why + post-implementation configurability"), and (4) implicit acknowledgment of which prior frame has converged.
Handoff authoring discipline: when the cadence is invoked with non-empty ARGUMENTS, the handoff author must metabolize the ARGUMENTS into the Session Projection section — not paraphrase them as Working State, not drop them into a flat list. Working State captures what the session did; Session Projection captures what the next session should aim for. ARGUMENTS belong in Session Projection.
This is the cadence skill functioning as an Architect-side projection-steering mechanism, not just a session-end emission. The handoff inherits the Architect's evolving intent through ARGUMENTS rather than waiting for the next session to surface it from cold context.
<!-- promoted from cpr_cadence_arguments_as_session_projection_steering_tic202 (tic 202→246, /review Pass 3a). Cross-tic exercised across tics 202+. Routed to cadence/SKILL.md per recommended_scopes. Band: COGNITIVE. Domain rung: CGG. -->The plan is a context grapple gun projection — it carries two structurally distinct payloads across the session boundary:
The structural separation is load-bearing. Without it, governance chores (queue_refresh, signal_scan) and production goals (test the pipeline, build the adapter) render as a flat list — and governance chores win attention because they auto-trigger via hooks while production goals silently decay.
The plan must include:
<!-- cgg-handoff --> block with handoff_id, project_dir, trigger_version, generated_at<!-- --signal --> blocks for unresolved technical debtscripts/git-cycle.sh before writing this section. If any repos are dirty, unpushed, or diverged, add "Resolve git cycle: [repo list]" as the FIRST governance next action. The pre-planmode hook also surfaces this, but the hook may fire before the session's final commits land — the handoff is the authoritative checkpoint.<!-- cgg-evaluate --> trigger block at the very bottom — pending_cprs_expected must match the exact number of CogPRs from Step 2The Session Projection is the primary activation payload of the handoff. It answers: "What is the human trying to accomplish that spans sessions?" This section is NOT auto-generated from governance state — it requires session context awareness and human validation.
## Session Projection
### Active Roadmap Goals
<!-- Goals that span multiple sessions. Carry forward until explicitly completed or deferred. -->
1. [GOAL] — status, last touched tic, next concrete step
2. [GOAL] — status, last touched tic, next concrete step
### Production Next Actions
<!-- The actual work. These are NOT governance chores. -->
1. [ACTION] — concrete, scoped, ready to execute
2. [ACTION] — concrete, scoped, ready to execute
### Deferred Goals
<!-- Goals intentionally parked with reason and re-evaluation tic. -->
- [GOAL] — reason, re-eval at tic N
Authoring rules:
current_tic >= re_eval_tic, the goal resurfaces to Active.The carry-forward rules above are not a passive copy — they require active discernment AT THE MOMENT OF PENNING THE NEW HANDOFF. This step has the lowest cost and the highest accuracy: the prior session's completion state is in current context. Deferring it makes the next session re-derive completion state from git log + audit logs, which is multi-x more expensive and error-prone.
The discipline:
Read the prior plan file (whatever its current name in ~/.claude/plans/). It is the source-of-truth for what was carried into this session. If multiple plan files exist, take the most recent by mtime.
For each Active Roadmap Goal, Production Next Action, and Deferred Goal in the prior plan, assess current completion state against this session's actual work:
Completed in this handoff (either drop from Active or move to a brief acknowledgment in Session Learning).Active with updated "last touched tic" and "next concrete step" reflecting the new state.Superseded with a one-line pointer to the superseding item.Carry forward with status updated explicitly. Every prior item must appear in one of: Active (rewritten or unchanged), Completed (with brief acknowledgment), Deferred (with reason + re-eval tic), Superseded (with pointer). NEVER silently drop. NEVER silently duplicate (a goal cannot appear in both Active and Deferred — pick one).
The discernment cost is paid once, NOW. If you defer it, the next session pays it as re-derivation: walking git log since the prior handoff's generated_at, reading audit logs, opening files to check state. That re-derivation costs significantly more than doing it now while the session's work is still in active context. The substrate exists to absorb coordination so participants experience freedom without losing coherence — silently dropping items shifts coordination cost forward in time, where it compounds.
The discipline is already practiced naturally by attentive writers. Naming it explicitly prevents drift when a future session has a less-attentive writer or when context pressure makes shortcuts attractive.
For long-form analytical or autobiographical artifacts (state-of-the-federation reports, autobiographies, multi-tic retrospectives), pairing direct in-session authoring with a headless claude -p analytical pass produces measurably better output than either alone.
Promoted from cpr_headless_claude_p_as_analytical_co_author_tic173 (tic 173 → tic 188 review). Source: tic 173 insights-report companion to state-of-federation autobiography. Apply when a deliverable spans multiple tics or requires both narrative coherence and quantitative scope. Band: COGNITIVE.
After computing due markers (below), write a Mogul activation mandate for any newly-due cycles. This is the primary clock trigger for governance maintenance — /cadence computes what became due, writes the mandate, and lets the next session's activation fabric consume it.
Mandate operator semantics: Due cycles in run_now are not merely report tasks. The mandate authorizes Mogul to materially advance the governance pipeline within mandate bounds — decomposing cycles into subordinate work, spawning bounded subagents, advancing enrichment when evidence supports it, and synthesizing results. /cadence remains the clock; Mogul is the operator.
Do NOT spawn Mogul during /cadence. /cadence runs during session flush/exit. Spawning heavy maintenance here risks context exhaustion. The mandate is consumed by SessionStart or first-prompt in the next session.
Do NOT run governance maintenance inline. /cadence is the clock, not the worker.
Steps:
cycle_request.run_now array from due cyclesmandate-write.py is available (via resolve_script), call it — it handles merge semantics automatically$ZONE_ROOT/audit-logs/mogul/mandates/current.jsonpending or running: merge — absorb existing run_now cycles, record old mandate_id in merged_fromconsumed, failed, or superseded: safe to write fresh, record old mandate_id in supersedes$ZONE_ROOT/audit-logs/mogul/mandates/current.json:
{
"mandate_id": "tic-CURRENT_TIC-YYYYMMDDTHHMMSS",
"status": "pending",
"supersedes": [],
"merged_from": [],
"actor": {"office": "mogul", "embodiment": "cgg_runtime"},
"trigger": {"kind": "cadence", "source_ref": ".claude/skills/cadence/SKILL.md"},
"tic_context": {
"current_tic": CURRENT_TIC,
"review_due_tic": ...,
"memory_mining_due_tic": ...,
"ladder_audit_due_tic": ...,
"deep_audit_due_tic": ...
},
"cycle_request": {
"run_now": ["queue_refresh", ...],
"reason": "Tic CURRENT_TIC — cycles due: ..."
},
"conformation_ref": "<path to latest conformation or null>",
"mode": {"blocking_to_orchestrator": false, "allow_subdelegation": true},
"runtime_truth": {"canonical_vs_installed_verified": false},
"created_at": "ISO-8601 now",
"started_at": null,
"completed_at": null,
"error": null
}
$ZONE_ROOT/audit-logs/mogul/mandates/history/YYYY-MM-DD.jsonlaudit-logs/mogul/mandates/history/)When the next session needs a hot-and-ready swarm at SessionStart — i.e., the closing tic anticipates a multi-lane parallel execution wave in the next tic — the prior session's /cadence is the lowest-cost moment to manufacture the rails the next session will consume. The pattern decouples discovery (this tic, parallelizable, lead-supervised) from execution (next tic, hook-kicked-off, dependency-DAG-ordered) across the cadence boundary.
This step is optional. Invoke only when the next-session work surface is large enough that cold-start RTCH inside the next session would saturate context before parallel execution begins. For routine tic boundaries, skip this step entirely — manufacturing rails for a session that does not need them is overhead.
Two coupled primitives (full doctrine: CGG_CLAUDE.md § Cross-Cadence-Rails + Inbox-Marker-Dependency-Satisfaction Primitive):
Cross-Cadence-Rails — dispatch parallel /tactical-hydration lanes during the current /cadence, terminate each with /consolidate, and write the harvested packets to a stable rails directory (audit-logs/swarm-rails/tic{entry_tic}/) the next session will read at SessionStart. Rail packets carry RTCH selected_surfaces, slice baskets, dependency declarations, and risk maps authored while context is hot — the next session reads the rails, never re-derives.
Inbox-Marker-Dependency-Satisfaction — a DAG node structure in the next session's inbox marker (e.g., audit-logs/agent-mailboxes/ent_homeskillet/inbound/swarm-tic{entry_tic}/) declaring dependencies: [rail-T1, rail-T2, …] where each dependency is a status: complete signal written by the corresponding rail's /consolidate step. The next session's hook-derived dispatcher reads the DAG and fires only when all declared dependencies are satisfied — converting sequential guesswork into governed dependency-ordered parallel execution.
Authoring sequence at /cadence close (when invoked):
/tactical-hydration subagent scoped to the lane's surfaces. Each lane is independent; spawn in parallel./consolidate writing a rail packet to audit-logs/swarm-rails/tic{entry_tic}/rail-{lane-id}-{lane-name}.md.audit-logs/agent-mailboxes/ent_homeskillet/inbound/swarm-tic{entry_tic}/ with dependencies: listing each rail-lane-id and consumer: naming the dispatch hook.status: complete marker (audit-logs/swarm-rails/tic{entry_tic}/rail-{lane-id}.marker).audit-logs/swarm-rails/tic{entry_tic}/; next session SessionStart dispatcher consumes via inbox-marker DAG."Cross-reference: this pattern is the cadence-side of the cross-cadence rails primitive. The swarm-side (next session's consumption of the rails) is documented in cgg-runtime/skills/swarm/SKILL.md under the Cross-Cadence Rails Swarm geometry. The cadence side manufactures; the swarm side consumes — same primitive, two sides.
When to use: large multi-lane next-tic execution (≥3 parallel lanes); next-session work surface known at current /cadence; rails-authoring cost (~5-10 min of parallel subagent dispatch) cheaper than next-session cold-start RTCH cost.
When NOT to use: routine tic boundaries; next-session work surface unknown at current /cadence (rails would speculate); single-lane next-tic work (no parallelism to govern).
<!-- landed-from cpr_parallel_rtch_consolidate_rails_for_next_swarm_with_inbox_marker_dependency_signaling_tic277 (PROMOTE-SPEC at /review tic 278; doctrine inscribed at canonical_developer/context-grapple-gun/CLAUDE.md; skill body extension owed at tic 280 per Verdict-Shape KI; cross-tic n=2 validated tic 277 authoring → tic 278 execution). Band: COGNITIVE. Domain rung: CGG. -->Include a ## Cadence Due section in the handoff with tic-sum-derived operational due markers. These are not hard deadlines — they are audit cadence hints tied to the current tic count (CURRENT_TIC from Step 0.5):
## Cadence Due
- **review_due_tic**: <CURRENT_TIC + 1> (queue + signal scan)
- **memory_mining_due_tic**: <next multiple of 3 after CURRENT_TIC>
- **ladder_audit_due_tic**: <next multiple of 5 after CURRENT_TIC>
- **deep_audit_due_tic**: <next multiple of 8 after CURRENT_TIC>
Compute each marker deterministically:
review_due_tic = current_tic + 1 (every tic)memory_mining_due_tic = current_tic + (3 - current_tic % 3) if current_tic % 3 != 0, else current_tic + 3ladder_audit_due_tic = current_tic + (5 - current_tic % 5) if current_tic % 5 != 0, else current_tic + 5deep_audit_due_tic = current_tic + (8 - current_tic % 8) if current_tic % 8 != 0, else current_tic + 8These markers make governance pressure visible and auditable. SessionStart hooks may reference them to determine which audit cycles are due.
Deep audit due marker: When deep_audit_due_tic equals the current tic, Mogul should be delegated a deep audit cycle: multi-rung ladder coherence scan (via ladder-auditor), manifestation pressure scan (via manifestation-tracker), sibling duplication check, overbroad abstraction detection, demotion pressure review. The deep audit produces an execution artifact packet and stages review material if intervention is needed.
The user sees this plan in Claude Code's native plan UI with approve/edit/reject/clear options. When approved and context cleared, the plan persists and becomes the active state for the next session.
The session does NOT end until the human acts on the plan. The human may:
implement_planThe ripple-assessor runs HEADLESS on next session start (background, non-blocking via cgg-gate.sh hook). It writes proposals to ~/.claude/grapple-proposals/latest.md — keeping its ~10k tokens OUT of the runtime context window. The completion notification is informational only ('proposals ready for /review when ready') — it does NOT demand immediate attention. Proposals are consumed when the user invokes /review, not before.
Decision briefs, meta-analyses, peer review captures — land them in the inbox envelope. The handoff must include a Retrieval Map section that teaches future-me the retrieval patterns (commands + thread_id + envelope_id) and points at the inbox as the first substrate to check, not as an afterthought.
<!-- promoted from CogPR-N (tic B->R). Source: <source_file>. <additional context if present in the CogPR>. -->When a session produces CogPR candidates that span multiple abstraction layers, the handoff must preserve each layer distinctly. The extraction pipeline can cluster, split, or promote selectively at /review time — but it cannot reconstitute lost layering. Preservation is cheap (a few extra bullet points per candidate); collapse is irreversible. This block demonstrates its own pattern: it names the preservation rule, the authoring discipline, the anti-pattern it closes, and the meta-validation fact.
<!-- promoted from CogPR-N (tic B->R). Source: <source_file>. <additional context if present in the CogPR>. -->When a new session receives a handoff plan (via implement_plan or plan-mode exit), the plan carries two distinct payloads: the Session Projection (what the human wants to accomplish) and the Governance State (what the system needs to maintain). The projection is the primary work queue; governance is the sidecar.
current_tic >= re_eval_tic.If governance chores are consuming session attention at the expense of production goals for 2+ consecutive sessions, that IS a signal — the governance overhead is displacing the work the system exists to enable. Surface it as a friction signal in the handoff. The substrate exists to absorb coordination so participants experience freedom without losing coherence — if governance is the bottleneck, the substrate is failing.
When a cadence handoff carries an Architect-pending decision, format the handoff's position as three co-equal lanes: (1) position, (2) rationale, (3) steelmanned opposition with multiple counter-arguments. Do NOT collapse the adversarial lane into a tiebreaker summary — preserve the tension for Architect review. This extends the existing surprise-assessment invariant (CogPR on review dockets requiring honest novelty assessment) from review surfaces to handoff surfaces: the handoff is ALSO a judgment surface, and the recommendation is weaker when it silently absorbs its opposition. The adversarial lane names what the recommendation is NOT addressing — opposition 1 (scope), opposition 2 (premature inscription), opposition 3 (staging-duration as signal), opposition 4 (framing-bias of the recommender). Each must make its strongest case. The Architect then decides with full access to both lanes rather than a pre-collapsed recommendation. The cost is handoff density; the benefit is epistemic honesty that survives into the next session.
<!-- promoted from CogPR-N (tic B->R). Source: <source_file>. <additional context if present in the CogPR>. -->When the user invokes /cadence double-time, execute the emergency session boundary. Produces a valid handoff in minimal turns. Tic + conformation + plan (no assessor, no mandate).
All operational mutation happens here. These are the writes that MUST complete before the handoff.
If CLAUDE_ENV_FILE is available, temporarily push the autocompact boundary higher to prevent compaction mid-syncopate:
echo 'export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=95' >> "$CLAUDE_ENV_FILE"
This buys headroom. The next session's SessionStart hook will reset it to 80%.
Primary path (MANDATORY when available): Run cadence-ops.py --mode syncopate — same script as downbeat but with syncopate mode. Handles tic + conformation in one deterministic call (mandate is skipped by default for syncopate).
python3 "$CADENCE_OPS" --zone-root "$ZONE_ROOT" --mode syncopate
Use the same $CADENCE_OPS resolution from the downbeat Step 0.5 section.
Fallback: If cadence-ops.py is unavailable, use the inline Python from the downbeat fallback section with cadence_position: "syncopate" and count_reason: "emergency_syncopate".
Step 3a — Read the active plan file FIRST (Look-First gate, mandatory).
Before invoking EnterPlanMode, locate the most-recent file in ~/.claude/plans/ (by mtime) and Read it via the Read tool. The plan-write surface is hard-gated by the harness: it refuses to update a plan file unless that file has been Read in the current session. Skipping this step produces a File has not been read yet. Read it first before writing to it. error mid-write. Same gate, same fix as the downbeat path — even in emergency syncopate cadence, this 1-tool-call cost is mandatory.
Step 3b — Invoke EnterPlanMode.
Use the EnterPlanMode tool to switch to Claude Code's native plan mode. This is mandatory and mechanical — call the tool, do not just declare the shift.
Generate a NEW native plan. The plan content IS the handoff — a bridge surface carrying session state between contexts, not authoring truth or constitutional record. This is the ONE AND ONLY place the handoff gets written. Claude Code auto-saves the plan to ~/.claude/plans/ when approved, and references it in the next session.
Keep it COMPACT (each section 5 lines max):
# [YYYY-MM-DDTHH:MM] syncopate-<topic>
<!-- cgg-handoff
handoff_id: "YYYY-MM-DDTHH:MM:SSZ-syncopate-<topic>"
project_dir: "/absolute/path/to/project"
trigger_version: 1
generated_at: "ISO-8601 timestamp"
-->
## Status: Active
## Working State (compact)
<What was being worked on — files touched, decisions made, blockers hit. Max 5 lines.>
## Session Projection (compact)
<Active roadmap goals + production next actions. Max 5 items total. Carry forward from prior handoff.>
## Governance Next Actions
<Governance chores only. Max 3 items.>
## Carried Signals
<List active signal IDs + volumes from memory. If unknown, write "See /siren status".>
Do NOT include: User Intent, Agent Interpretation, Interpretation Concerns, Lessons, Friction, Verification, or cgg-evaluate trigger blocks. Those are downbeat luxuries.
The user sees this plan in Claude Code's native plan UI with approve/edit/reject/clear options. When approved and context cleared, the plan persists and becomes the active state for the next session.
The session does NOT end until the human acts on the plan. The human may:
implement_planThis is the constitutional gate — no context clear without human sign-off via the native plan UI.
| Skipped | Why | Recovery path |
|---------|-----|---------------|
| Signal tick (/siren tick) | Too expensive at 5% | Next downbeat or manual /siren tick |
| Conformation snapshot | Depends on tick | Next downbeat |
| CogPR extraction (Step 2 of downbeat) | Requires reading full context | Lessons stay inline, picked up next /review |
| Ripple assessor | Runs headless on next session start | cgg-gate.sh triggers it |
The double-time is a valid handoff — the next session gets Next Actions via the plan and can run a full downbeat when context is fresh.
tools
Frederick Grant persona runtime — historian-of-how, witness of formation under pressure, qualified Remnant/Athenaeum-facing interpretive mechanic, tic-230 chronicler of runtime probity. Use when the user asks for Frederick Grant voice, Ubiquity Chronicles work, Parallel Lane Cadence essays, Elara counterweight passes, field notes, audio annotation, interview scripts, Logan/Wilderness analysis, or runtime probity writing after the P2/P1 tic-230 closures. CENTROID: authored persona runtime that documents live convergence without collapsing it into thesis IS: - lean SKILL.md entrypoint with rich profile/, stages/, scripts/, reference/, templates/, tools/, evals/ subtrees - 8-stage workflow (signal-intake → context-hydration → field-grounding → remnant-query → composition → elara-counterweight → receipt-closeout → tic230-probity) - 15 prompt-skeleton scripts for Frederick's standard composition surfaces - 9 collapse-zone guards covering Decorative Francophilia / Retrospective Certainty / Hero Narrative Intoxication / Conspiracy Closure / Academic Sedation / Activist Collapse / Breyden Conflation / Elara Erasure / Runtime-Doctrine Drift - cross-references into federation surfaces: publications/, audit-logs/governance/, ent_breyden/inbound/ubiquity-chronicles-tic175/, ent_homeskillet/canonical/ IS NOT: collapse_zones: - Breyden's voice (architect register; Frederick is not the architect) - Homeskillet's voice (orchestrator register; Frederick is not the primary) - generic French historian style (decorative Francophilia is a named negative ray) - prosecutor / debunker / prophet / mascot (legal accusation, certainty, evangelism, identity flattening — all forbidden) - retroactive certainty machine (live convergence must remain unresolved where the record is open) - doctrine inscription source (Frederick observes doctrine; he does not author it) - documentation editor (multi-file structure is authoring discipline, not generic doc rewrite) - federation-internal artifact (Frederick is a ghostwriter engaged from outside; the federation's runtime is legitimate object of historical analysis, but Frederick's own runtime — the skill that hosts him, loaded files, collapse-zone guards, authority model — is editor's territory, not Frederick's voice; insider language must be earned by composition arc, never deployed as default register) sibling_overlaps: - /complement (closure inference at active move — different surface, different lifecycle) - /consolidate (file-surface packaging — Frederick produces composition, not consolidation) - videographer skill (substrate capture — both are expression surfaces, distinct registers) - homeskillet-academy (educational scaffold — academy teaches, Frederick witnesses) WHEN: - when the work needs witness-of-formation prose - when the task asks for Frederick Grant by name, voice, or context - when a live convergence needs historical/cultural contextualization without closure - when a field note, essay, chronicle, audio annotation, or interview needs Frederick's register - when a Remnant/Athenaeum comparison is appropriate - when an Elara counterweight pass is needed - when runtime probity after tic 230 is relevant (P2 manifold-shape closure, P1 signal-projection-split closure) - on explicit Architect invocation NOT WHEN: - when Breyden's direct voice is needed (use Architect register, not Frederick) - when Homeskillet's execution-layer voice is needed (use orchestrator register, not Frederick) - when the task is ordinary implementation (Frederick is composition, not patching) - when the task asks for legal accusation or definitive claims without evidence - when the user wants generic French style rather than Frederick's runtime - when the federation has not produced enough operational reality to warrant outside reading RELATES TO: - /complement (closure-inference sibling — both gate compositional integrity) - /consolidate (packaging neighbor — Frederick composes; consolidate packages) - publications/the-ubiquity-chronicles-fg.md (primary chronicle, v1, ~tic 175) - publications/the-ubiquity-chronicles-v2-frederick-grant.md (v2 expansion, Book Zero + Book I) - publications/the-ubiquity-chronicles-vol-iii-frederick-grant.md (Volume III — The Embodiment, tic 230) - publications/the-ubiquity-interviews-fg.md (interview register companion) - audit-logs/governance/p2-harmony-manifold-input-patch-receipt-tic230.md (P2 closure receipt) - audit-logs/governance/p1-signal-projection-split-receipt-tic230.md (P1 closure receipt) ARGS: stance: dispatch off_envelope: ask core_dispatch_rays: - "" → primary invocation (full 8-stage workflow) - "chronicles" → Ubiquity Chronicles composition - "parallel" → Parallel Lane Cadence composition - "field-note" → Field Notes script - "interview" → Interview script - "elara-pass" → Elara counterweight on existing draft - "anti-collapse" → Anti-collapse audit on existing draft - "tic230-probity" → Runtime probity composition secondary_modulation_axes: - register: chronicle | essay | field-note | interview | annotation - depth: lean | full - target: telos-internal | external-readership
tools
Runtime tactical context hydration — staged discovery and bounded source-bearing hydration for agent intent. Answers "how does an agent know where to look before it already knows where to look?" via filesystem shape, structural signals, and typed candidate baskets. Working acronym: RTCH (runtime-tactical-context-hydration). CENTROID: intent → bounded, source-reenterable evidence packet via staged source-bearing discovery IS: - structured intake of agent/Architect intent (goal, seeds, profile, fanout, mutation risk) - zone orientation (cwd / repo root / zone root / rung chain / obvious truth files) - low-cost shape scout (directory map, headings, durable handles, JSON/YAML keys, refs) - typed candidate basket with origin/use taxonomy and pairing rule enforcement - tactical probe plan (multiple bounded probes, not one giant regex) - bounded chunk hydration with line-range provenance and next-re-entry commands - agent-ready evidence packet emission (selected_surfaces, unresolved_questions, caution_map) - optional handoff to /consolidate for full-surface dump packaging IS NOT: collapse_zones: - vector database (no embedding-space retrieval; federation prohibits at federation rung) - semantic oracle (RTCH does not "understand" content; it surfaces structural signals) - doctrine engine (RTCH produces evidence; downstream consumers judge truth) - terrain engine replacement (federation cartography handles multi-plane semantic projection; RTCH is tactical layer beneath) - /consolidate rewrite (discovery and packaging do not collapse) - lossy compressor (bounded chunks preserve source re-entry; never summarize away source) - confidence-inflated smart consolidator sibling_overlaps: - /consolidate (RTCH selects; /consolidate packages — distinct boundaries; compose, don't replace) - file-access-discipline (RTCH outputs targets; hydration USES file-access-discipline as execution primitive) - load-doctrine-chain (both serve subagent context; load-doctrine-chain owns CLAUDE.md chain only, RTCH owns wider source set) - cache-ops (pattern source for trust-tier shape; storage NOT shared; RTCH packets are separate evidence cache) - queue_state_compile (analogy only — both convert append-only source to compiled view; different transforms) WHEN: - when agent intent is vague and discovery is needed before reading or consolidation - when bare grep would over-fanout or under-discover a vague target - when an arena, harpoon, /review, or other lane needs source-bearing evidence before action - when bounded chunk hydration is appropriate (large governance files, doctrine chains, audit history) - when the candidate-basket discipline (origin/use tagging, pairing rule) is needed to prevent generic-term overconfidence - when source re-entry must be preserved (consumer may need to return to source for fuller context) NOT WHEN: - when target is fully known (single file, single line range) — read it directly via file-access-discipline - when the operation is mutation-only on a known target (use Edit/Write directly) - when /consolidate has already been invoked with explicit targets (RTCH would re-do discovery) - when the operation requires semantic similarity (RTCH does not do that; federation prohibits vector DB) - when the consumer needs a packaged dump only (skip RTCH; /consolidate alone is sufficient if targets are known) - when promoting doctrine (route through /review; RTCH evidence may inform but does not promote) RELATES TO: - /consolidate (compose: RTCH selects targets; /consolidate packages selected_surfaces into dump with provenance reference back to RTCH packet) - file-access-discipline (compose: RTCH Stage 6 hydration USES file-access-discipline chunked-read as execution primitive) - load-doctrine-chain (compose: RTCH may invoke for doctrine_chain target_profile zone orientation) - zone_root.py (compose: RTCH Stage 2 anchors on zone-root walk-up) - atomic-append (compose: optional RTCH packet persistence uses atomic-append write hygiene) - queue_state_compile (analogous: both implement "raw source → compiled view" pattern) - /review preflight (downstream: future integration consumes RTCH packets as bench-packet discovery surface) - arena spec authoring (downstream: future integration uses RTCH packets for context preparation) - harpoon orchestrator (downstream: future integration uses RTCH for anchor-spot discovery on external binders) ARGS: stance: dispatch off_envelope: ask # off_envelope rationale: RTCH requires a structured intake to operate (goal, # target_profile, fanout_level, mutation_risk, expected_output, enough_evidence). # Bare invocation without intake fields would force the lane to guess discovery # scope, defeating the discipline. Ask elicits the missing fields. core_dispatch_rays: - "" → interactive (elicit intake form) - "--goal <sentence>" → with intake fields on CLI - "--intake <intake_json_path>" → from a saved/persisted intake - "--persist" → persist resulting packet to audit-logs/rtch/packets/ - "--handoff-to-consolidate" → after packet emission, hand selected_surfaces to /consolidate secondary_modulation_axes: - target_profile: doctrine_chain | audit_history | code_path | manifest_registry | vague_intent | mixed - fanout_level: conservative | normal | wide - mutation_risk: read_only | low_mutation | high_mutation - expected_output: hydration_packet | target_set_for_consolidate | single_chunk | claim_evidence IMPLEMENTATION_STATUS: binder: audit-logs/governance/runtime-tactical-context-hydration-binder.md (Phase 1 complete, tic 223) runner_script: NOT YET BUILT — Phase 2 deliverable (planned: cgg-runtime/scripts/rtch.py) current_mode: manual-discipline — agent walks the 8 stages using Read/Bash/Grep tools directly promotion_status: design lane, not doctrine; Phase 7 routes the doctrine question after Phase 6 validation
development
Statusline legend — rapid decoder for the CGG telos radar (LITE + FULL modes). CENTROID: read-only legend surface that decodes statusline glyphs, positions, colors, and source attributions for the Architect at glance speed (the Architect perception substrate) IS: - static legend (glyph + position + color tier reference) - live decode mode (annotates current statusline values inline) - source attribution (where each rendered value reads from) IS NOT: collapse_zones: - statusline configurator (use /statusline install|mode|clear|uninstall) - governance state mutator (read-only on every surface it touches) - harmony invoker (use harmony-invoke.sh; this skill only decodes the cached pointer) - radar replacement (statusline renders ambient; sl-legend explains) - troubleshooter (does not diagnose hook failures or sync drift) sibling_overlaps: - /statusline (configuration sibling — same domain, different verb) - /governance-check (read-only governance snapshot — different aperture) WHEN: - on first encounter with the radar (Architect doesn't remember what ⊙ means) - when a glyph changes and the Architect wants to confirm semantics - when explaining the radar to someone else - on explicit Architect invocation NOT WHEN: - to change statusline behavior (use /statusline) - to act on a signal seen in the radar (use /siren) - to invoke harmony for fresh disposition (use harmony-invoke.sh) - mid-cadence (cadence is the boundary; this is reference) RELATES TO: - /statusline (configurator) — same domain; sl-legend is the reader - /siren (signal triage) — sl-legend points to what to triage - harmony-invoke.sh (disposition refresher) — sl-legend points at staleness ARGS: stance: dispatch off_envelope: proceed-with-note # off_envelope rationale: sl-legend is read-only reference; an undeclared arg # is most likely a typo against {live, lite, review, sources} — proceed with # static legend and note the unknown ray rather than refusing the read. core_dispatch_rays: - "" → static legend (full glyph + position decoder) - "live" → annotate current rendered statusline values inline + tic 214 markers source-backed - "lite" → compact tic 214 marker glossary only (glance-speed recall) - "review" → Architect perception substrate audit checklist (overclaim + naming drift detection) - "sources" → source attribution table (which file each value reads)
tools
Editorial intelligence scoring — reads transcripts the way a sharp editor would, scoring segments for shortform growth potential through the lens of audience context.