Interactively turn GENESIS gates on, warn, or off and write the choice to settings.json - no hand-editing JSON or memorizing env vars. Walks each gate (G7 session, G1 registration, G3 TODO, G2 config guard, G2 commit, pre-compaction snapshot, session resume) plus the GitHub-mirroring toggle, shows its current value, writes the change globally or per-project, and offers to record why (G6). Use when the user types /genesis:config, or asks to turn a gate on/off/warn, soften/disable/loosen a gate...
Scanned 9/7/2026
Install to Claude Code
npx -y skills add godshiba/genesis --skill config --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Config?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/godshiba-config)More formats (shields.io, HTML) on the badges page.
---
name: config
description: Interactively turn GENESIS gates on, warn, or off and write the choice to settings.json - no hand-editing JSON or memorizing env vars. Walks each gate (G7 session, G1 registration, G3 TODO, G2 config guard, G2 commit, pre-compaction snapshot, session resume) plus the GitHub-mirroring toggle, shows its current value, writes the change globally or per-project, and offers to record why (G6). Use when the user types /genesis:config, or asks to turn a gate on/off/warn, soften/disable/loosen a gate, change gate intensity, toggle GitHub/gh issue mirroring, or quiet down GENESIS.
---
# /genesis:config — Configure the gates
GENESIS ships with every gate on. This command changes that without making you
hand-edit JSON or memorize an env var: it reads the current state, walks each
gate, and writes your choice into `settings.json` under `"env"`. The hooks
re-read the environment when a session starts, so a change lands next session.
The seven gate toggles and their legal values:
| Variable | Values | Gate |
|----------|--------|------|
| `GENESIS_G7` | `on` / `warn` / `off` | G7 session gate — the only one that blocks |
| `GENESIS_G1` | `on` / `warn` / `off` | G1 unregistered-file nudge |
| `GENESIS_G3` | `on` / `warn` / `off` | G3 orphan TODO/FIXME nudge |
| `GENESIS_G2_CONFIG` | `on` / `warn` / `off` | G2 quality-config guard |
| `GENESIS_G2` | `on` / `off` | G2 pre-commit validation reminder |
| `GENESIS_PRECOMPACT` | `on` / `off` | Pre-compaction snapshot |
| `GENESIS_RESUME` | `on` / `off` | Session-resume loader |
Every one defaults to `on`; an unset variable *is* `on`. `warn` keeps the
gate's message but never blocks or interrupts (exit 0); `off` is silent. Only
the first four support `warn` — the bottom three are `on`/`off`. The master
kill switch `GENESIS_OFF=1` silences every hook at once; do not offer it in the
walk, but honor it if the user explicitly asks to turn everything off.
Beyond the gates, this command also sets one **capability toggle**:
`GENESIS_GITHUB` (`on`/`off`, default `off`) — whether `/genesis:issue` mirrors
issues to GitHub. It is not a gate (it gates a side-effecting, opt-in
integration), so it is handled on its own in step 3.
## 1. Read the current state
Two files matter, and a value in the second overrides the first inside that repo:
- **Global**: `~/.claude/settings.json` — applies everywhere.
- **Per-project**: `<repo>/.claude/settings.json` — overrides the global value
in that repo only.
Read both (either may be missing — treat a missing file or key as the default
`on`). For each gate compute the effective value: project override, else
global, else default. Print a compact dashboard before asking anything:
```text
GENESIS CONFIG — <project name | global>
gate var set in effective
G7 session GENESIS_G7 global warn
G1 registration GENESIS_G1 — on (default)
G3 orphan TODO GENESIS_G3 project off
G2 config guard GENESIS_G2_CONFIG — on (default)
G2 commit GENESIS_G2 — on (default)
pre-compaction GENESIS_PRECOMPACT — on (default)
session resume GENESIS_RESUME — on (default)
```
## 2. Pick where to write
If the working directory is inside a project (a git repo, or it already has
`.claude/` or `docs/registry/`), ask once via AskUserQuestion which file to
edit: **this project only** or **global**. Outside a project it is global — do
not ask. Recommend per-project to loosen gates for one noisy repo, global for a
standing default across everything.
## 3. Walk every gate
Ask via AskUserQuestion, batched — never one giant wall, never a free-text
prompt for a fixed choice. Cover all seven gates in two rounds:
- **Round 1** — the four warn-capable gates (`GENESIS_G7`, `GENESIS_G1`,
`GENESIS_G3`, `GENESIS_G2_CONFIG`), one question each, three options each.
- **Round 2** — the three on/off gates (`GENESIS_G2`, `GENESIS_PRECOMPACT`,
`GENESIS_RESUME`), one question each, two options each.
For each gate: name it in plain words and say what dialing it down means (e.g.
"G7 is the only gate that blocks — `warn` advises instead, `off` is silent").
List its legal values as options, and put the **current effective value first,
labeled `(keep)`**, so leaving a gate untouched is one tap.
If the user already named a gate and a mode when invoking the command (e.g.
`/genesis:config g7 warn`), set that directly and skip straight to writing —
still show the dashboard so the rest stays visible.
### Also offer: GitHub mirroring (a capability toggle, not a gate)
`GENESIS_GITHUB` (`on`/`off`, default `off`) controls whether `/genesis:issue`
mirrors issues to GitHub. Treat it as opt-in — `gh` acts on GitHub's servers —
and present it honestly. First detect and show the truth: a git repo
(`git rev-parse --is-inside-work-tree`), a `github.com` remote (`git remote -v`),
and `gh` installed (`command -v gh`) and authed (`gh auth status`). If any piece
is missing, say so and note that turning it `on` stays inert until that piece
exists — never imply it will work. Then offer `on`/`off` with the current value
first, and write it exactly like a gate (remove the key to return to the
default `off`).
## 4. Write the change
**Actually write the file** — use the file tools to create or edit the chosen
`settings.json`; never just describe or tabulate the result. Merge under
`"env"`: create the file and the `"env"` block if absent, **preserve every key
already there** (GENESIS or not), and never reformat or reorder unrelated
settings.
**Write every value the user confirmed in the walk — even one left at its
default — so the file is a visible, editable record of the whole session.
Efficient is fine; silent is not.** A gate the user kept at `on` is still
written as `"on"`; that is the point — the config you walked is the config on
disk. (Exceptions: in the argument shortcut `/genesis:config g7 warn`, write
only the gate(s) named; and if the user explicitly asks to *reset* a gate,
remove its key instead of writing it.)
```json
{
"env": {
"GENESIS_G7": "warn",
"GENESIS_G1": "on",
"GENESIS_G3": "off",
"GENESIS_G2_CONFIG": "on",
"GENESIS_G2": "on",
"GENESIS_PRECOMPACT": "on",
"GENESIS_RESUME": "on",
"GENESIS_GITHUB": "on"
}
}
```
If the user asked to silence everything, write `"GENESIS_OFF": "1"` instead of
touching each gate, and say that one switch overrides all the rest until removed.
## 5. Record why (G6)
Softening or disabling a gate is exactly the non-obvious choice the G6 decision
gate exists for. If this is a GENESIS project (has `docs/registry/`) and a gate
was turned down, offer to log it with `/genesis:decision` — one line on the
reason (too noisy here, solo repo, CI covers it). Offer, never force.
## 6. Confirm back
Show the **exact `"env"` block you wrote** and the file path — the real block,
not a summary — so the user can see every value that landed. Then one line: it
takes effect in the **next session** (the hooks read the env on start — start a
fresh session to feel it). If you wrote `GENESIS_OFF`, say GENESIS is fully
silent until that key is removed.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!