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...
Installs into .claude/skills of the current project.
Are you the author of Config?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/godshiba-config)
---
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.