auto-wm
Use when the user wants Claude to auto-approve tool calls — "enable autonomic/autonomous work mode", "/auto-wm", "partner mode", "work by yourself for N…
Skill by Arasz
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/arasz-auto-wm
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 26, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/auto-wm/dev/fd/dev/null/dev/stderr/dev/stdout/dev/tty- Your home directory (~)
~/.ai-badger~/.ai-badger/ai-badger.db~/.hermes/plugins/ai-badger/.ai-badger
What's inside
- Skill name
auto-wm- Description
- Use when the user wants Claude to auto-approve tool calls — "enable autonomic/autonomous work mode", "/auto-wm", "partner mode", "work by yourself for N hours", "no one will be around to approve/answer" — or to check status, switch modes, or turn it off ("awm status", "auto-wm away 4h", "auto-wm off").
- License
- MIT
- Instructions
- 95 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (7)
- SKILL.md
- awm_context.py · hooks/
- awm_gate.py · hooks/
- settings-snippet.json · hooks/
- shell_parser.py · hooks/
- awm.py · scripts/
- badger_store.py · scripts/
SKILL.md (first lines)
# auto-wm — Autonomic Work Mode
## Overview
Two modes, both auto-approving most tool calls via a `PreToolUse` hook and logging each decision to an audit log. They differ only on whether the user is around to be asked something:
- **partner** (default) — you're at the keyboard: available for questions, brainstorming, feedback, hints. Tool calls auto-approve; `AskUserQuestion` is left completely alone, same as a session with no hooks. Window defaults to **8h**.
- **away** — you're not around. Same auto-approval, but `AskUserQuestion` is denied (nothing to gain from asking). Window defaults to **4h**.
Three guards bound both modes, re-checked by the hooks on every event — no cron or session timer needed:
- **Wall-clock expiry.** No window is open-ended; anything longer than **12h** is capped to 12h. An elapsed window flips itself off and normal prompts resume.
- **Project scope.** State is kept per project: each one records its own mode and window, and a call whose `cwd` is outside every armed tree is never auto-approved. Enabling AWM in one repo neither arms the machine nor disarms another repo — two sessions in two checkouts can both be covered at once, each expiring on its own clock. The banner obeys the same scope, so a project AWM is not armed in is told nothing (#296).
- **Denylist.** Destructive shell commands (`rm -r`, `sudo`, force-pushes, `reset --hard`, `crontab`, …), network egress (`WebFetch`, `WebSearch`, `curl`/`wget`/`ssh`-style clients, and every MCP tool), writes outside the project (including shell redirections), and changes to away-mode state (any `awm.py` subcommand except `status` and `decision`) are never auto-approved. Flags are judged word by word, so their order and spelling do not matter, and any tool whose input carries a shell command is scanned, not only Bash. They fall through to the normal permission prompt and are logged as `denylisted`. AWM refuses to arm at `/` or at `$HOME`, and the gate ignores a window recorded there.
Partner only ever starts because you explicitly ran `auto-wm` (or `/auto-wm`) — a session where auto-wm is never invoked keeps Claude Code's normal per-tool prompts. Once started, `enable`/`partner` and `away` are just the two states that mode can be in; switching between them overwrites the current one.
## Commands
All via `python3 ~/.claude/skills/auto-wm/scripts/awm.py`:
| Command | Effect |
|---|---|
| `enable` / `partner` `[DURATION]` | Switch to partner mode: auto-approve, questions untouched, expires (default 8h) |
| `away [DURATION]` | Switch to away mode: auto-approve, questions denied, expires (default 4h). Grammar: `Nh`, `Nm`, `NhMm`, or a bare number = hours (`4h`, `90m`, `1h30m`, `4`); anything over 12h is capped |
| `disable` (or `off`, `stop`) | Turn AWM off **for this project** — normal per-tool prompts resume here; other projects keep their windows |
| `status` | This project's mode, since when, and time remaining — plus any other project still armed |
| `forget [PATH] [--force]` | Remove this project's entry (or PATH's) from `awm_state` entirely. `disable` only flips an entry off; entries otherwise accumulate for every directory AWM was ever enabled in. Refuses a live window without `--force`. Takes a path because the usual case — a deleted worktree — cannot be `cd`'d into |
| `decision "<what and why>"` | Register a judgment call in the audit log |
## Invocation
`/auto-wm [away DURATION | off | status | forget [PATH] [--force] | partner DURATION]` — no argument means `partner` (8h, default). Away mode must be asked for explicitly, since it changes how questions are handled and has a clock running.
1. Run the matching `awm.py` command and relay its output (partner/away both print what changed).
2. On first enable (partner or away), smoke-test that the gate hook actually fires: run any trivial command (e.g. `true`), then `sqlite3 ~/.ai-badger/ai-badger.db "SELECT payload FROM awm_decisions ORDER BY id DESC LIMIT 2"` — a fresh `auto_approve` entry proves auto-approval is live. If no entry appears, check registration with `jq '.hooks.PreToolUse' ~/.claude/settings.json`; if missing, merge `~/.claude/skills/auto-wm/hooks/settings-snippet.json` into `~/.claude/settings.json` (preserve existing keys), then tell the user hooks load on `/hooks` or restart.
3. In the same reply, warn once (either mode): tool calls will be auto-approved without asking — close to `bypassPermissions`, minus the denylist, and with an audit trail. Say which project it is scoped to and when the window expires. For away mode, also note that questions get denied outright.
## Files (all user-level)
| File | Purpose |
|---|---|
| `awm_state` table, `~/.ai-badger/ai-badger.db` | One row per project: `{"enabled": ..., "mode": ..., "enabled_at": ..., "duration": ..., "expires_at": ...}`. A legacy `~/.claude/awm/state.json` imports on the first write and is renamed `*.migrated.*`. |
| `awm_decisions` table, `~/.ai-badger/ai-badger.db` | Audit log: `mode_enabled/disabled/expired`, `auto_approve`, `question_denied`, `denylisted`, `out_of_scope`, `decision`. Rows older than 60 days are pruned. |
| `~/.claude/skills/auto-wm/hooks/` | `awm_gate.py` (PreToolUse), `awm_context.py` (UserPromptSubmit) |
## While AWM is active (behavior contract)
**Partner mode:**
- Ask questions, brainstorm, or check in whenever it's genuinely useful — the user is available, so there's no reason to hold back the way away mode does. Tool calls still auto-approve, so the value of asking is about judgment and direction, not permission.
- Still worth registering notable judgment calls with `awm.py decision`, so there's a record even for things nobody was asked about.
**Away mode:**
- Never ask the user anything or wait for approval; the gate denies `AskUserQuestion` anyway. Pick the best-judgment option and continue.
- Register every significant judgment call with `awm.py decision` — option chosen, alternatives, why.
- Prefer reversible choices (branch instead of main, keep backups before overwrites); log anything risky before doing it.
## Gotchas
- **State in the project** (`.claude/` in a repo, `CLAUDE.md` edits) — the *scripts* are scaffolded per project, but the *state* is user-level: enabled flag, window, decisions. Keep all of it in `~/.claude/awm/`; a state marker committed to a repo both leaks and misleads.
- **Permission allowlist ≠ AWM.** Adding `permissions.allow` entries doesn't approve everything; only the PreToolUse hook does.
- **Treating partner mode like away mode.** Partner mode does not deny `AskUserQuestion` — don't apply away's "never ask, always log" contract when the state file says `mode: partner`.
- **Reading a fall-through as a failure.** A denylisted or out-of-scope call is not an error: the normal permission prompt reaches the user, exactly as if AWM were off. Don't retry it a different way to get around the gate — ask.
- **Session cron for expiry** — dies with the session. The hooks compare `expires_at` to wall-clock instead.
- **Reading the banner as proof the gate will approve.** It used to be: the banner ignored scope entirely and announced away mode in every project on the machine, including ones where every call was denied (#296). Both now read the same per-project entry, but the audit log is still the only place that records what the gate actually decided.
- **Editing `awm_state` by hand** — always go through `awm.py` so changes land in the audit log. That includes removing a stale project: `forget` records a `mode_forgotten` event, a text editor records nothing.
## Installing from ai-badger
Two things are user-level here, and one is not. Getting them mixed up is why this section used
to describe an install that never happened (review F-42).
**What `welcome-ai-badger` does:** it scaffolds this skill into `.ai-badger/skills/auto-wm/`
like every other skill. It does **not** copy anything to `~/.claude/skills/`, and it does
**not** merge `hooks/settings-snippet.json` into `~/.claude/settings.json`.
**What you do once, by hand:** the gate only fires if its two hooks are registered in
`~/.claude/settings.json`. Copy the hooks somewhere stable and merge the snippet:
```bash
mkdir -p ~/.claude/skills/auto-wm
cp -R .ai-badger/skills/auto-wm/. ~/.claude/skills/auto-wm/
# then merge hooks/settings-snippet.json into ~/.claude/settings.json, preserving existing keys
```
The snippet's commands point at `~/.claude/skills/auto-wm/hooks/`, so the registered hooks keep
working in every repo — which is the point: the state **file** is machine-wide
(`~/.claude/awm/`), but each project gets its own entry inside it, keyed by path rather than by
which copy of the scripts ran.
**Why the skill files are per project anyway:** they are versioned with the framework, so a
`den-refresh` updates them. Re-copy to `~/.claude/skills/auto-wm/` after an update that touches
`hooks/` — nothing does it for you.From Arasz/ai-badger, MIT.
More from Arasz/ai-badger
- 0.609score
complete-project-scope-code-review
Arasz
Use when the whole project — not a diff — is the review target and the result must survive being acted on: "review the entire codebase", "full quality…
SkillAFreshness: A★ 3Claude Code +9 - 0.609score
code-review-evidence
Arasz
Use when reviewing code that wraps external libs/extensions/SDKs/CLIs, or QA-reviewing a test harness: verify wrapped-library semantics from the upstream…
SkillAFreshness: A★ 3Claude Code +9 - 0.609score
commit-reminder
Arasz
Use when a project has accumulated uncommitted changes and nobody has said so out loud — several edits in a row with no commit in between — or when a subagent…
SkillAFreshness: A★ 3Claude Code +9 - 0.609score
ai-raccoon-memory
Arasz
Use when a project needs a memory server — search project and shared memory first, write durable facts with source paths, watch a docs directory, or promote…
SkillAFreshness: A★ 3Claude Code +9 - 0.609score
decision-record
Arasz
Use when a change adds a feature or meaningfully changes how something works and the decision behind it has to be written down before implementation — "record…
SkillAFreshness: A★ 3Claude Code +9 - 0.609score
call-behaviorist
Arasz
Use when ai-badger's own machinery needs to be observed — "did that hook even run?", "enable debug logging", "why is the drift notice silent?", "turn on the…
SkillAFreshness: A★ 3Claude Code +9 - 0.609score
den-refresh
Arasz
Use when an already-scaffolded project is behind the framework — a drift notice appeared, a new ai-badger version shipped, or the user asks to…
SkillAFreshness: A★ 3Claude Code +9 - 0.604score
change
Arasz
Use when making an ad-hoc change with no issue or task behind it — fix a failing unit test, refactor a method, rename something, tweak a config value, adjust…
SkillAFreshness: A★ 3Claude Code +9 - 0.569score
differential-feature-refactor
Arasz
Use when a feature already exists in code but has drifted from — or was never reconciled with — its intended design, and someone must decide what changes…
SkillBFreshness: B★ 3Claude Code +9 - 0.569score
artifact-verification
Arasz
Use when verifying changed artifacts that lack a canonical test gate — specs, docs, manifests, generated files, published packages: use the workflow-defined…
SkillBFreshness: B★ 3Claude Code +9 - 0.569score
code-review-checklist
Arasz
Use when reviewing code — a PR, a diff, or freshly written changes — and you want concrete pass/fail checks rather than impressions.
SkillBFreshness: B★ 3Claude Code +9 - 0.569score
create-task-spec
Arasz
Use when a feature idea needs to become an exact, agreed specification before anyone builds it — "spec this out", "create a task spec", "turn this idea into…
SkillBFreshness: B★ 3Claude Code +9
Signals
- Stars
- 3
- Forks
- 0
- Open issues
- 9
- Last commit (this folder)
- Oct 21, 2026 (7 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/Arasz/ai-badger
- Website
- github.com/Arasz/ai-badger
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Arasz
- 0.609score
complete-project-scope-code-review
Arasz
Use when the whole project — not a diff — is the review target and the result must survive being acted on: "review the entire codebase", "full quality…
SkillAFreshness: A★ 3Claude Code +9 - 0.609score
commit-reminder
Arasz
Use when a project has accumulated uncommitted changes and nobody has said so out loud — several edits in a row with no commit in between — or when a subagent…
SkillAFreshness: A★ 3Claude Code +9 - 0.609score
ai-raccoon-memory
Arasz
Use when a project needs a memory server — search project and shared memory first, write durable facts with source paths, watch a docs directory, or promote…
SkillAFreshness: A★ 3Claude Code +9 - 0.609score
code-review-evidence
Arasz
Use when reviewing code that wraps external libs/extensions/SDKs/CLIs, or QA-reviewing a test harness: verify wrapped-library semantics from the upstream…
SkillAFreshness: A★ 3Claude Code +9 - 0.609score
call-behaviorist
Arasz
Use when ai-badger's own machinery needs to be observed — "did that hook even run?", "enable debug logging", "why is the drift notice silent?", "turn on the…
SkillAFreshness: A★ 3Claude Code +9 - 0.609score
decision-record
Arasz
Use when a change adds a feature or meaningfully changes how something works and the decision behind it has to be written down before implementation — "record…
SkillAFreshness: A★ 3Claude Code +9
Cite this page
auto-wm skill. Agent Mart. https://agentmart.dev/skills/arasz-auto-wm (last updated 2026-10-24)