Wick — Automate (spot the repetition, propose the automation)
Updated: 2026-07-02 · first written 2026-07-02
The efficiency reflex: notice when work is being repeated and turn the repetition into an
automation — so the third time you do a thing is the last time you do it by hand.
Complements /evolve (which graduates logged instincts into skills). This works one level
earlier and broader: it detects task repetition in the work stream and proposes a
program (for mechanical repetition) or a skill (for repeated judgment). The
program-vs-skill call is the whole point.
When to invoke
- You (or the user) just did the same multi-step task a 3rd time.
- Periodically, to mine
memory/.observations.jsonl (if the observer hook is installed) for
frequent command/tool sequences.
- The user says "automate this" / "I keep doing X."
Step 1 — Detect the repetition
Three kinds (structural is the most valuable):
- Literal — the same command/sequence run N times (N≥3). Often just wants an alias.
- Structural — the same shape of task with different inputs: "ship a version" done for
1.1 / 1.2 / 1.3; "onboard a client" done 4×. The variable parts (version, name) become
parameters. This is the high-value target.
- Frictional — a task that's slow, error-prone, or many-step each time: high per-instance
cost even at low frequency.
Sources, in order: the current session's tool-call history → memory/ (decisions,
learning-journal, sessions) → memory/.observations.jsonl (if present) → the user pointing at it.
Step 2 — Decide IF it's worth automating (don't automate reflexively)
Automate only when payoff > cost AND the task is stable.
- Payoff ≈ (frequency × per-instance friction) over a realistic horizon.
- Cost = building it + maintaining it + the risk of ossifying a workflow that's still changing.
- Stability gate (load-bearing): if the task is still being figured out — steps changing
run to run — wait. Premature automation freezes a moving target; that's its own waste.
Automate the settled, not the exploratory.
- Skip the rare, the already-a-one-liner, and the moving target.
Step 3 — Program or Skill? (the classifier)
| The repeated task… |
→ Program (script/tool) |
→ Skill (SKILL.md) |
| Same steps every time, no judgment |
✓ |
|
| Needs per-instance reasoning / adaptation |
|
✓ |
| Deterministic I/O — files, git, data, builds |
✓ |
|
| Reads/writes prose, weighs options, decides |
|
✓ |
| High frequency, speed & cost matter |
✓ (no LLM = free + fast + reliable) |
|
| Infrequent but complex, benefits from the gates |
|
✓ |
- Program = deterministic, cheap to run, reliable — but brittle to change, can't adapt.
- Skill = adapts per instance, carries the gates — but costs tokens each run.
- Both (the mechanical-with-judgment case, often the right answer): a thin skill decides
whether / when / how, and calls a program for the mechanical heavy-lifting. E.g. a
/ship skill that runs a deterministic ship.mjs; or wick-migrate (skill) calling
wick-path-audit (program).
Step 4 — Propose (never auto-build)
Return:
- The pattern — what's repeated, how often, the evidence (cite the instances).
- Verdict — automate now / wait (not stable) / skip (low payoff), with the payoff estimate.
- Program, skill, or both — with the classifier reasoning; name the parameters (the
variable parts abstracted out of the structural repetition).
- A draft — a skeleton
.claude/skills/wick-<name>/SKILL.md or a script stub, ready to
build on approval.
- Gate — build only on explicit approval, then verify the automation on a real instance
(verify behavior, not form) before trusting it.
Cross-session mode (the observation log)
For detection that spans sessions, install the observer (Claude Code): tools/wick-observer.mjs
appends a compact {ts, tool, target} record to memory/.observations.jsonl on each Edit /
Write / Bash via a PostToolUse hook. This skill then mines the log for frequent n-gram
sequences. The log is runtime — keep it gitignored.
// .claude/settings.json
{ "hooks": { "PostToolUse": [ { "matcher": "Edit|Write|Bash",
"hooks": [ { "type": "command", "command": "node tools/wick-observer.mjs --post-tool-use" } ] } ] } }
What this will never do
- Auto-build an automation (propose + gate, always).
- Automate a moving target (stability gate) or a low-payoff rarity.
- Recommend a skill where a $0 deterministic program would do — or a brittle script where the
task genuinely needs judgment. Matching the automation to the task is the discipline.
1---2name: wick-automate3description: Detect when a task is being repeated often enough to be worth automating, then propose the right automation — a PROGRAM (deterministic script) or a SKILL (reusable judgment procedure). Analyzes the current session, the memory/ record, or an observation log; classifies program-vs-skill; estimates payoff; drafts the automation. Proposes, never auto-builds. Use when you catch yourself or the user repeating a multi-step task, or to mine an observation log periodically.4license: MIT5---67# Wick — Automate (spot the repetition, propose the automation)89*Updated: 2026-07-02 · first written 2026-07-02*1011The efficiency reflex: notice when work is being *repeated* and turn the repetition into an12automation — so the third time you do a thing is the last time you do it by hand.1314Complements `/evolve` (which graduates logged *instincts* into skills). This works one level15earlier and broader: it detects **task repetition in the work stream** and proposes a16**program** (for mechanical repetition) or a **skill** (for repeated judgment). The17program-vs-skill call is the whole point.1819## When to invoke20- You (or the user) just did the same multi-step task a 3rd time.21- Periodically, to mine `memory/.observations.jsonl` (if the observer hook is installed) for22 frequent command/tool sequences.23- The user says "automate this" / "I keep doing X."2425## Step 1 — Detect the repetition26Three kinds (structural is the most valuable):27- **Literal** — the same command/sequence run N times (N≥3). Often just wants an alias.28- **Structural** — the same *shape* of task with different inputs: "ship a version" done for29 1.1 / 1.2 / 1.3; "onboard a client" done 4×. The variable parts (version, name) become30 **parameters.** This is the high-value target.31- **Frictional** — a task that's slow, error-prone, or many-step each time: high per-instance32 cost even at low frequency.3334Sources, in order: the current session's tool-call history → `memory/` (decisions,35learning-journal, sessions) → `memory/.observations.jsonl` (if present) → the user pointing at it.3637## Step 2 — Decide IF it's worth automating (don't automate reflexively)38Automate only when **payoff > cost AND the task is stable.**39- **Payoff** ≈ (frequency × per-instance friction) over a realistic horizon.40- **Cost** = building it + maintaining it + the risk of ossifying a workflow that's still changing.41- **Stability gate (load-bearing):** if the task is still being figured out — steps changing42 run to run — **wait.** Premature automation freezes a moving target; that's its own waste.43 Automate the settled, not the exploratory.44- **Skip** the rare, the already-a-one-liner, and the moving target.4546## Step 3 — Program or Skill? (the classifier)4748| The repeated task… | → **Program** (script/tool) | → **Skill** (SKILL.md) |49|---|---|---|50| Same steps every time, no judgment | ✓ | |51| Needs per-instance reasoning / adaptation | | ✓ |52| Deterministic I/O — files, git, data, builds | ✓ | |53| Reads/writes prose, weighs options, decides | | ✓ |54| High frequency, speed & cost matter | ✓ (no LLM = free + fast + reliable) | |55| Infrequent but complex, benefits from the gates | | ✓ |5657- **Program** = deterministic, cheap to run, reliable — but brittle to change, can't adapt.58- **Skill** = adapts per instance, carries the gates — but costs tokens each run.59- **Both (the mechanical-with-judgment case, often the right answer):** a thin **skill decides60 whether / when / how**, and calls a **program** for the mechanical heavy-lifting. E.g. a61 `/ship` skill that runs a deterministic `ship.mjs`; or `wick-migrate` (skill) calling62 `wick-path-audit` (program).6364## Step 4 — Propose (never auto-build)65Return:661. **The pattern** — what's repeated, how often, the evidence (cite the instances).672. **Verdict** — automate now / wait (not stable) / skip (low payoff), with the payoff estimate.683. **Program, skill, or both** — with the classifier reasoning; name the **parameters** (the69 variable parts abstracted out of the structural repetition).704. **A draft** — a skeleton `.claude/skills/wick-<name>/SKILL.md` or a script stub, ready to71 build on approval.725. **Gate** — build only on explicit approval, then **verify the automation on a real instance**73 (verify behavior, not form) before trusting it.7475## Cross-session mode (the observation log)76For detection that spans sessions, install the observer (Claude Code): `tools/wick-observer.mjs`77appends a compact `{ts, tool, target}` record to `memory/.observations.jsonl` on each Edit /78Write / Bash via a PostToolUse hook. This skill then mines the log for frequent n-gram79sequences. The log is runtime — keep it gitignored.8081```jsonc82// .claude/settings.json83{ "hooks": { "PostToolUse": [ { "matcher": "Edit|Write|Bash",84 "hooks": [ { "type": "command", "command": "node tools/wick-observer.mjs --post-tool-use" } ] } ] } }85```8687## What this will never do88- Auto-build an automation (propose + gate, always).89- Automate a moving target (stability gate) or a low-payoff rarity.90- Recommend a skill where a $0 deterministic program would do — or a brittle script where the91 task genuinely needs judgment. Matching the automation to the task is the discipline.