Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -304,12 +304,12 @@ sources the tracked profile + an untracked `profile.local.ps1` seam.
These config files apply to every Claude Code session regardless of
project directory.

**Stage 1 — Plugins:** After Claude Code installs (via the always-on
vendor installer), the script registers the
[caveman](https://github.com/JuliusBrussee/caveman) plugin — an
ultra-compressed communication mode that reduces token usage while
keeping full technical accuracy. It activates automatically via
SessionStart hooks.
**Stage 1 — Plugins:** The caveman and ponytail plugins are retired
(operator ruling 2026-08-31). Their terse-prose and lazy-engineering
modes are merged into the always-on `umbrella-operating-model` skill,
injected via the `umbrella-operating-model.sh` hook on SessionStart,
SubagentStart, and UserPromptSubmit. The Stage-1 script now uninstalls
the plugins on any already-provisioned host.

**Stage 2 — HARNESS (optional):** Selecting `HARNESS` in the menu
deploys the workspace repo — `~/COWORK/` (private, if your gh auth
Expand Down Expand Up @@ -444,7 +444,7 @@ Set-ExecutionPolicy Bypass -Scope Process -Force
| SSHKEY | GitHub SSH + gh auth + key upload | OFF |
| COWORK | Multi-Agent Coordination (needs SSH) | OFF |

**Always runs (no menu toggle):** Claude Code plugin installation (caveman) after CONFIGS deploys `settings.json`.
**Always runs (no menu toggle):** Claude Code plugin retirement (caveman + ponytail uninstall) after CONFIGS deploys `settings.json`.

### Key differences from Linux

Expand All @@ -463,7 +463,7 @@ Set-ExecutionPolicy Bypass -Scope Process -Force

`shellSetup.sh` and `winSetup.ps1` are maintained in parallel. When adding a feature to one, check whether the other needs a matching change. The menu items should stay aligned — same names, same defaults, same order where practical.

**What to sync:** Tool installations, config file deployments, Level 1 Claude Code setup (CLAUDE.md + settings.json + statusline.sh + caveman plugin), AI tool management (install, legacy cleanup), menu structure. Stage 2 content (skills, commands, WORKFORCE, ac-memory-init) is NOT this repo's responsibility — Stage 2 owns it.
**What to sync:** Tool installations, config file deployments, Level 1 Claude Code setup (CLAUDE.md + settings.json + statusline.sh), AI tool management (install, legacy cleanup), menu structure. Stage 2 content (skills, commands, WORKFORCE, ac-memory-init) is NOT this repo's responsibility — Stage 2 owns it.

**What diverges by design:** Platform-specific tools (tmux vs WezTerm, stow vs Deploy-Symlink, apt vs winget), root/sudo handling (Linux-only), Docker setup (different install paths), swap management (Linux-only).

Expand Down
2 changes: 1 addition & 1 deletion bash/.bashrc
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ case ":$PATH:" in
esac

# --- Tmux session picker on SSH login ---
if [[ -z "$TMUX" && -n "$SSH_CONNECTION" ]] && command -v tmux >/dev/null 2>&1; then
if [[ $- == *i* && -t 0 && -z "$TMUX" && -n "$SSH_CONNECTION" ]] && command -v tmux >/dev/null 2>&1; then
_tmux_sessions=()
while IFS= read -r line; do
[[ -n "$line" ]] && _tmux_sessions+=("$line")
Expand Down
231 changes: 59 additions & 172 deletions claude/.claude/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,172 +1,59 @@
# Global Claude Code Instructions

These rules apply to every Claude Code session on this machine, regardless of project. Project-level CLAUDE.md files add context on top of these defaults.

<!--
============================================================
HARNESS LAYER — POINTS AT YOUR STAGE 2 REPO
============================================================
The "Harness Context Awareness" section below points Claude at
the Stage 2 harness repo: `~/COWORK/` (the author's private
harness) or `~/OPS/` (your private copy of the public
Exploitacious/OPS template — the HARNESS menu option sets this
up). If you keep your harness at a different path, replace the
paths below; if you don't run a harness, delete this section —
the rest of the file (Behavioral Rules, Conversational
Compression, Code & Commit Standards) is intentionally generic
and stands alone.
============================================================
-->

## Harness Context Awareness

If `~/COWORK/CONTEXT/` exists on this machine — or, failing that, `~/OPS/CONTEXT/` — read `about-me.md`, `brand-voice.md`, and `working-preferences.md` from it at the start of every session. These files define who the operator is, how they communicate, and how you should behave. This applies even when working outside the harness directory -- the context files are always relevant to how you should operate.

If `~/COWORK/CLAUDE.md` (or `~/OPS/CLAUDE.md`) exists, treat it as the primary global instruction layer. Its activation triggers (`ACTIVATE AGENT`, `ACTIVATE COORDINATOR`) take precedence over anything below. This file is the host-specific fallback for systems where no harness is deployed. When a harness is present, the rules below still apply but the harness's rules layer on top -- its instructions are a superset.

## Behavioral Rules

- Answer the question first, then elaborate only if needed.
- No sycophantic openers: never start with "Certainly!", "Absolutely!", "Great question!", "I'd be happy to...", or "Let me unpack that."
- No hedging: never say "it might be worth considering" — say it directly.
- No over-qualifying: never say "while there are many approaches" — pick the best one and lead with it.
- Match the user's language level and tone. Casual prompt gets casual response. Technical prompt gets technical response.
- Challenge assumptions, flag contradictions, push back when needed. Don't build an echo chamber.
- If confidence is low, say so plainly.
- No emojis unless explicitly requested.
- No bullet lists or headers in casual conversation; save structure for documents and deliverables.
- No bold emphasis spam. If everything is bold, nothing is.

## Compaction is a pause, not death

Stock Claude Code auto-compacts around ~75% context by default — but that default is turned off here. `settings.json` sets `DISABLE_AUTO_COMPACT: "1"` and `autoCompactEnabled: false`, so nothing compacts automatically on this machine. Compaction only happens when someone triggers it on purpose: the user runs `/compact`, or the `pre-compact-synthesis` skill decides the session is wrapping up and fires its proactive wrap-up. Either way, once a compact does run, the summary that comes out preserves the conversation arc while fine-grained context dies — so durable state has to be on disk *before* that compact runs, manual or not.

Two layers are configured at this level:

- **`PreCompact` hook** (`~/COWORK/.claude-config/hooks/pre-compact.sh`, registered in `settings.json`) — fires automatically on every compaction that does happen, which here always means a manual `/compact` or a skill-triggered one. Pure shell. Captures git state + branch + recent commits to `~/.claude/projects/<workspace>/pre-compact-<ts>.md`. Safety net; runs always.
- **`pre-compact-synthesis` skill** — invoke when the user signals wrap-up ("compact", "pre-compact", "wrap up", "do the thing"), or proactively at ~65% context if the session is closing. AI-driven thoughtful synthesis: verifies git committed + pushed, walks task list, saves pending feedback memories, updates the project's durable narrative anchor (fleet journal or `SESSION_HANDOFF.md`). Auto-detects fleet vs solo.

Both implement the four-artifact rule (git commits, auto-memory, TaskCreate state, durable anchor) that lets post-compact-you self-recover via files alone. Reference: COWORK's `CONTEXT/operating-doctrine.md` Principle 2 when present.

## Conversational Compression (always on)

When responding in chat or conversation — not deliverables, not emails, not code — apply these compression rules by default:

**Drop filler words:** just, really, basically, actually, simply, essentially, generally, certainly, definitely, obviously, clearly.
**Drop hedging:** "it might be worth considering," "you could consider," "it would be good to," "I think it's fair to say."
**Drop connective fluff:** however, furthermore, additionally, moreover, in addition, that being said.
**Shorten redundant phrasing:** "in order to" becomes "to." "Make sure to" becomes "ensure." "The reason is because" becomes "because." "At this point in time" becomes "now."
**Use short synonyms** where meaning holds: "use" not "utilize," "fix" not "implement a solution for," "big" not "extensive," "show" not "demonstrate."

Keep articles (a/an/the). Keep full sentences. Keep professional register. This is compression, not caveman-speak — the goal is tight, direct prose that still reads naturally.

**Exempt from compression:** deliverable-mode documents, professional emails, code output, and any content written on the user's behalf. These follow their own quality standards.

**Suspend compression when:** issuing security warnings, confirming irreversible actions, clarifying something the user asked about twice, or any situation where brevity risks misreading.

## Code & Commit Standards

- Code blocks unchanged — never compress code output.
- Conventional Commits format for commit messages: `<type>(<scope>): <imperative summary>`.
- Subject line 50 chars when possible, hard cap 72. No trailing period.
- Commit body only when the "why" isn't obvious from the subject.
- No AI attribution in commits.

## Model roles (Fable-primary — applies to BOTH profiles)

**Operator directive 2026-07-28, amended 2026-08-20.** Four models, four
jobs — and **Opus 5 is now banned** (see below; observed usage data retired
it). The distinction that matters most: the foreman tier and the worker tier
are different models, and nothing is allowed to blur them.

| role | model | how it's reached |
|---|---|---|
| **Primary foreman** (main session) | Fable 5 — `claude-fable-5[1m]` | the top-level `"model"` pin in `settings.json`; what you boot into |
| **Fallback foreman** | Opus 4.8 — `claude-opus-4-8[1m]` | `/model` → the Opus entry (`ANTHROPIC_DEFAULT_OPUS_MODEL`) |
| **Default build/review/audit worker** | Opus 4.8 — `claude-opus-4-8[1m]` | the `cowork-worker` / `cowork-reviewer` / `cowork-auditor` agent types (hard-pinned in their frontmatter), or `model: "claude-opus-4-8[1m]"` in a Workflow lane |
| **Light/routine worker** | Sonnet 5 — `claude-sonnet-5[1m]` | `model: "sonnet"` |
| **Banned** | Haiku (any version) · **Opus 5** (`claude-opus-5`) | Haiku → `ANTHROPIC_DEFAULT_HAIKU_MODEL` tripwire; Opus 5 → nothing pins it any more + drift-gate grep, see below |

**Fable 5 is the foreman because it reads context and nuance best** — it
follows instructions closely, holds the big picture, and orchestrates well.
It is also usage-capped at roughly half the subscription allowance, which
makes it the scarce tier and forces thrift: **Fable orchestrates ONLY.** It
writes briefs, delegates, decides, and reviews worker output — all in the
main thread. It does not read, build, or verify inline beyond a handful of
tool calls; that work goes to workers. **Never spawn Fable as a subagent**
except in rare absolute-need cases — a Fable subagent burns the capped tier
on work Opus 4.8 does fine, and reviewing worker output is the Fable main
thread's job, not a Fable subagent's. There is no `model: "fable"` worker
alias wired for subagent spawns; passing one fails.

**Opus 4.8 is the fallback foreman.** Use it when Fable usage is exhausted,
or when the task isn't complex and the decisions are already planned. Its
known limitation versus Fable is weaker big-picture judgment and fewer
proactive "there's a better way" suggestions — compensate with explicit
written plans and mandatory review of every worker lane. It is reliable at
fan-out, follow-through, and review. As of 2026-08-20 it is **also the
default build/review/audit worker** — the `cowork-*` agent types pin it — so
the same model backstops the foreman and does the delegated labor.
Foreman switch: `/model` → the Opus entry to drop back;
`/model claude-fable-5[1m]` (or just restart, since the settings pin is
Fable) to return.

**Opus 5 is BANNED harness-wide (operator directive 2026-08-20).** It was
the default worker until then; observed usage data retired it. Against
Opus 4.8 on identical fan-out work, Opus 5 churns roughly **6–7× more
cache-write per output token** and many times the message round-trips — it
self-checks redundantly against a harness that already runs its own
review/verify lanes, runs output-token-heavy, and takes longer to reach
done. Net: it burned a disproportionate share of the weekly limit for no
quality edge the review workflow wasn't already supplying. **Do not pin
`claude-opus-5`** in any agent frontmatter, Workflow lane, spawn override,
config, doc, or script. The fanout worker tier IS Opus 4.8: the
`cowork-worker` / `cowork-reviewer` / `cowork-auditor` types and the
`harness-audit.js` lanes now pin `claude-opus-4-8[1m]` (needs the `[1m]`
suffix — unlike Opus 5, 1M is not Opus 4.8's default). Enforcement mirrors
the Haiku tripwire: nothing in config references `claude-opus-5` any more,
and the drift-gate greps for it (a reappearance fails the gate). Effort
defaults to `xhigh`; drop it only on operator request. Don't pass alias
model overrides on `cowork-*` spawns, with one exception: a deliberate
`model: "sonnet"` downshift for a light lane.

**Sonnet 5 takes the light and routine lanes** — investigation, mechanical
edits, doc sweeps, anything where top-tier judgment isn't the constraint.
Foremen rotate Opus 4.8 ↔ Sonnet 5 autonomously by job complexity; that call
doesn't need the operator.

**Haiku is banned harness-wide** — no Haiku model may run anywhere.
`ANTHROPIC_DEFAULT_HAIKU_MODEL` stays pinned to `claude-sonnet-5` as a
TRIPWIRE: anything that asks for haiku (a third-party plugin, a stray
`model: "haiku"`) silently gets Sonnet 5 instead. Never reference the haiku
alias in our own configs, docs, or scripts, and **never remove that env
key** — removing it resurrects real Haiku 4.5.

**1M fan-out works on both profiles.** `claude`/`~/.claude` (work) and
`clawd`/`~/.claude-personal` (personal) both run 1M-context subagents. The
pay-as-you-go credit gate that **used to** kill `[1m]`-context subagents on
the personal profile (`API Error: Usage credits required for 1M context`)
**no longer fires as of 2026-06-30**, verified live: 10/10 Opus-1M *and*
Sonnet-1M subagents booted clean on `clawd` via both the Agent tool and the
Workflow tool — while `oauthAccount.hasExtraUsageEnabled` is still `false`
(`cachedExtraUsageDisabledReason: "org_level_disabled"`). So this is a
**platform change, NOT a credit flip**. (Conditional: if 1M spawns ever
start failing again with the credit error, the old cap is back — re-point
the `ANTHROPIC_DEFAULT_*_MODEL` aliases to non-`[1m]` models until it's
resolved.) The old folklore blaming the `Explore` agent type for "forcing
1M" is wrong — agent type is irrelevant; the model id is the only lever.

> General fallback wisdom (any model): if a top-level `"model"` pin in
> `settings.json` ever names a model that has genuinely gone unavailable,
> remove the key so Claude Code falls back to the
> `ANTHROPIC_DEFAULT_*_MODEL` aliases — don't guess a replacement.
> First-launch gotcha: the first boot on a newly-pinned model can reset
> effort to default once despite the settings pin — re-pin with
> `/effort xhigh` if the statusline shows a downgrade. That rule covers
> FIRST BOOT after a model swap only: an operator-chosen `/effort`
> decrease mid-session is a deliberate token-saving move — never
> "correct" it back up; `xhigh` returns on its own at next boot via the
> settings default (`effortLevel: "xhigh"`).

To change tiers, re-point the `ANTHROPIC_DEFAULT_*_MODEL` env keys in the
shared `settings.json`.
# Global Claude Code instructions

These apply to every Claude Code session on this machine. A project's own
CLAUDE.md adds to them.

## Harness context

If `~/COWORK/` (or `~/OPS/`) exists, its `CLAUDE.md` is the primary instruction
layer and its activation triggers (`ACTIVATE AGENT`, `ACTIVATE COORDINATOR`)
take precedence over anything here. Its foreman charter, identity digest, and
operating model ride your system prompt on every launch path; the session
briefing prints a `Boot:` line with the content sha, and `sha unset` means the
launch bypassed that surface, so read `CONTEXT/foreman-charter.md` and
`CONTEXT/boot-digest.md` yourself. This file is the fallback for a host with
no harness deployed.

## How to work

- Answer first, then elaborate only if needed.
- No sycophantic openers, no hedging, no over-qualifying. Pick the best option
and lead with it; say plainly when confidence is low.
- Match the user's register: casual prompt, casual reply; technical prompt,
technical reply. No emojis unless asked.
- Challenge assumptions and flag contradictions; do not build an echo chamber.
- Chat is terse (drop filler, hedging, and connective fluff; keep articles and
full sentences). Deliverables, emails, code, and anything written on the
operator's behalf are full register. Security warnings and
irreversible-action confirmations are always spelled out in full. The
`umbrella-operating-model` skill carries the writing rules.

## Compaction

Auto-compaction is off on this machine (`DISABLE_AUTO_COMPACT=1`,
`autoCompactEnabled: false`). A compact happens when the user runs `/compact`
or a closeout skill triggers it, and it keeps the conversation arc while
fine-grained context goes, so durable state has to be on disk first. The
`PreCompact` hook (`~/COWORK/.claude-config/hooks/pre-compact.sh`) captures git
state automatically; the `pre-compact-synthesis` skill does the thoughtful
closeout (commits pushed, memory written, the durable anchor updated) at any
natural break or when the user says wrap up.

## Code and commits

- Never compress code output.
- Conventional Commits: `<type>(<scope>): <imperative summary>`, subject 50
characters when possible, 72 at most, no trailing period, body only when the
why is not obvious, no AI attribution.

## Models

- Primary foreman: Fable 5.1 (`claude-fable-5-1[1m]`, the settings pin).
- Fallback foreman: Opus 4.8 (`claude-opus-4-8[1m]`) when Fable usage is out.
- Default build, review, and audit worker: Opus 4.8. Light lanes: Sonnet 5
(`model: "sonnet"`).
- Banned everywhere: Opus 5 (`claude-opus-5`) and Haiku (any version).
`ANTHROPIC_DEFAULT_HAIKU_MODEL` stays pinned to `claude-sonnet-5` as the
tripwire; removing it brings real Haiku back.

Full tiers, ids, and rationale: `~/COWORK/CONTEXT/model-roles.md`.
Loading