fable-setup
Skill57 starsChanged 33 days agoMITView on GitHub
Optional, recommended once. The plugin works with no setup (hook delivery, auto-detected mode, subagents covered). Use /fable-setup to move the base rules into a rules file (the recommended delivery, also the one for agent teams) or a CLAUDE.md section, pin interactive/unattended mode, see where effort comes from, or audit CLAUDE.md for conflicting rules. To see what is in effect, use /fable-status instead. Triggers: "/fable-setup", "fable 세팅", "환경 점검", "무인 모드로", "apply the Fable guide", "set up for Fable 5.1", "set up for Opus 5.5", "unattended mode", "rules file".
In this repository3 other files it gives its agents.
- fable-auditSkill
- fableSkill
- fable-statusSkill
The file
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 3 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 44
Ask afterwards, only when relevant, one more call:
- Distinctive: line 52
Ask in the user's language.
- Distinctive: line 59
If the write is refused, print the JSON and path.
- Very specific: line 79
Effort: write nothing. If the user passed medium or high, print exactly this, translated: "Run /effort <level> and press Enter to save it …
- Very specific: line 112
delete ~/.claude/oh-my-fable.json and ./.claude/oh-my-fable.json
- Very specific: line 114
remove the <!-- oh-my-fable:start … <!-- oh-my-fable:end --> section (and its heading line) from any CLAUDE.md
- Very specific: line 118
No questions. Find the rules file the hook uses (./.claude/rules/oh-my-fable.md, else ~/.claude/rules/oh-my-fable.md or the one under …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
fable-setup · choose delivery and mode, see where effort comes from; audit conflicts
Blocks: ${CLAUDE_PLUGIN_ROOT}/hooks/always-on.md (+ autonomy-unattended.md, two paragraphs, for unattended mode;
and effort-high.md, block N, when the session starts at xhigh or max).
Guide reference: ${CLAUDE_PLUGIN_ROOT}/skills/fable/references/prompt-blocks.md.
Three layers: per request → /fable; always-on rules → hook by default, this skill can move them to a
file; settings → mode, where effort comes from, and an admin checklist. Nothing here is required: the defaults work without any file.
Arguments (skip the matching question)
auto (no questions, keep defaults) · hook (= hook only, the default) | rules-file (rules file + hook, recommended) | claude-md (delivery; hook-only is accepted as an alias of hook) ·
auto | interactive | unattended (mode) · medium | high (prints the /effort line for that level; this skill no longer writes effortLevel, see Step 3) · refresh (re-copy the rules file only, no
questions, see Step 7) · remove (undo everything, see Step 6). To see what is in effect without changing anything, use
/fable-status.
Step 1 · Detect (one batch of reads, silent)
./CLAUDE.md, ./.claude/CLAUDE.md, ~/.claude/CLAUDE.md, ~/.claude/settings.json, ./.claude/settings.json,
~/.claude/oh-my-fable.json, ./.claude/oh-my-fable.json, ~/.claude/rules/, ./.claude/rules/,
claude --version, and the environment variable CLAUDE_CODE_EFFORT_LEVEL.
Step 2 · Questions: one AskUserQuestion call with up to two questions
Bundle questions 1 and 2 into a single AskUserQuestion call (it supports several questions at once), each with one-line options and the recommended one marked. No preamble, no explanation paragraphs. The goal is zero manual steps for the user, so prefer asking over leaving something for them to do by hand.
- Where should the rules live?
Rules file + hook (recommended)· base rules in~/.claude/rules/oh-my-fable.md(auto-loaded; per the docs agent teammates load it, the hook does not reach them in a verified way); the hook adds only what depends on the session (the unattended paragraphs, block N atxhigh/max) and the short version for Explore/Plan subagents. Claude Code's hooks doc says to prefer CLAUDE.md-style files for instructions that never change, and that hook text framed as system commands can trigger prompt-injection defensesHook only (zero-setup default)· nothing written; the hook carries everything for the main session and sends the short version to every subagent. Always current after a plugin update, nothing to clean up on uninstallCLAUDE.md section· inside your CLAUDE.md, static, needs edit approval (not in auto mode)
- How do you mostly work?
Auto (recommended)· detects per session: unattended for headless/SDK/agent runs, interactive in the terminal or IDEInteractive· always as if you watch and steerUnattended· always adds the two unattended paragraphs ("the user is not watching" and the early-stop list), even in the terminal
Effort is not a question. Show this one line with the questions, in the user's language: "Effort is not written by
this skill. Opus 5.5 and Sonnet 5.5 start at medium (their Claude Code default), Fable 5.1 and the other models at
high. To save a level for the model you are on: /effort <level> then Enter (saved per model in modelSettings); s
applies it to this session only."
Ask afterwards, only when relevant, one more call: 4. Scope? (only when the current directory is a git repo with its own CLAUDE.md)
All projects (recommended)· global files under~/.claudeThis project only· files under./.claude
- Fix the conflicting rules for you? (only when Step 4 finds conflicts; ask after showing the table)
Yes, apply the suggested edits· edits CLAUDE.md, needs approval outside auto modeNo, just show me· you edit by hand
Ask in the user's language.
Step 3 · Apply
Config (always, global ~/.claude/oh-my-fable.json or project ./.claude/oh-my-fable.json):
{"enabled": true, "mode": "auto", "delivery": "hook"}If the write is refused, print the JSON and path; defaults apply without a file.
Rules text = always-on.md, with autonomy-unattended.md inserted after the heading when unattended. English
regardless of the user's language. The rules file carries the base rules only; the unattended paragraphs are always
added by the hook per session, so auto mode works with the default delivery. Only the CLAUDE.md section is static.
hook(hook only, default): write nothing besides the config; make sure norules/oh-my-fable.mdwith the marker is left behind (delete one written earlier by this skill; never touch a file without the marker). Main session and every subagent get the rules from the hook.rules-file(rules file + hook): copy${CLAUDE_PLUGIN_ROOT}/hooks/rules-file.mdverbatim to~/.claude/rules/oh-my-fable.md(project scope:./.claude/rules/oh-my-fable.md). It starts with the marker<!-- oh-my-fable:rules v3which tells the hook to add only the unattended paragraphs per session. Claude Code loadsrules/*.mdfor the main session and for subagents and teams, so CLAUDE.md is not edited. Keep"delivery": "hook"in the config. If the write is refused (auto permission mode may block instruction files), say so in one line: the hook then carries everything for the main session, and the user can create the file by hand from the shown path. When the plugin ships a newer file, the hook says so at session start;/fable-setup refreshupdates the copy.claude-md: insert the section between<!-- oh-my-fable:start v3 -->and<!-- oh-my-fable:end -->, or replace an existing one that starts with<!-- oh-my-fable:start v(any version), in the chosen CLAUDE.md with the Edit tool; touch nothing else. Set"delivery": "claude-md". If refused, do not retry with another tool: say it needs a session outside auto mode, keephook, and show the section for manual paste.
Effort: write nothing. If the user passed medium or high, print exactly this, translated: "Run /effort <level>
and press Enter to save it for the model you are on (s = this session only). A top-level effortLevel in
~/.claude/settings.json is ignored by Opus 5.5 and Sonnet 5.5, which is why this skill no longer writes it." If the env var
CLAUDE_CODE_EFFORT_LEVEL is set, say in one line that it beats every saved level.
Copies are snapshots. A rules file or CLAUDE.md section is the text at install time. The rules file carries a
version marker (oh-my-fable:rules vN); when the plugin ships a newer one, the hook shows a one-line notice at
session start and /fable-setup refresh updates the copy. The hook delivery always uses the current text. Never
replace a copy with an older one: if its marker carries a higher version than the one this skill would write, this
session runs an older copy of the plugin, so leave the copy, say so, and tell the user to start a new session (after
updating the plugin, if it is not updated yet).
Step 4 · Audit (one table, then question 5)
Rule found → verdict → one-line suggestion. Edit CLAUDE.md only if the user chose "Yes" in question 5; if the edit is refused, show the exact replacement text once and move on. Conflicts to flag: narration suppression ("hold findings for the final response", "no closing recap"), anti-formatting rules ("no bullets", "no headers"), "ask before every step". Same-meaning rules → "already covered".
Step 5 · Verify and close
Hook: run bash "${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh" with CLAUDE_PROJECT_DIR set and confirm the
last line starts with (oh-my-fable and names the expected rules source (--status prints the same as a key list). Rules file + hook: confirm the file exists with the marker and the hook prints only the mode line (or the
unattended paragraphs, or block N when the session is at xhigh/max). CLAUDE.md: confirm the markers appear exactly once and the hook prints nothing. Then close with exactly this, translated:
Done. Rules:
<delivery>, mode:<mode>, effort: <effort and effort_source from --status>. They apply automatically from the next Claude Code session. To use them in this session right now: if the plugin was installed in this session, type/reload-pluginsfirst, then/clear(one per line; the rules are injected on session start, /clear, and compaction). Ask as usual; for short or vague requests use/fable <request>. Add "just the prompt" to preview only.
One status line: DONE, DONE_WITH_CONCERNS, or NEEDS_CONTEXT.
Step 6 · /fable-setup remove
Undo everything this skill may have written, then tell the user to run claude plugin uninstall oh-my-fable@oh-my-fable:
- delete
~/.claude/oh-my-fable.jsonand./.claude/oh-my-fable.json - delete
~/.claude/rules/oh-my-fable.mdand./.claude/rules/oh-my-fable.md - remove the
<!-- oh-my-fable:start…<!-- oh-my-fable:end -->section (and its heading line) from any CLAUDE.md - effort levels in settings.json (saved by
/effort, or aneffortLevelwritten by an older version of this skill) are left as is; say so in one line
Step 7 · /fable-setup refresh
No questions. Find the rules file the hook uses (./.claude/rules/oh-my-fable.md, else ~/.claude/rules/oh-my-fable.md
or the one under CLAUDE_CONFIG_DIR). If it carries the marker oh-my-fable:rules, overwrite it with
${CLAUDE_PLUGIN_ROOT}/hooks/rules-file.md verbatim and report the old and new version numbers (for example v1 → v2),
unless its version is higher than that file's: then leave it, say this session runs an older copy of the plugin, tell
the user to start a new session (after updating the plugin, if it is not updated yet), and stop. If it has no marker
it is the user's own file: do not touch it, say so, and stop. If there is no file, say that nothing needs refreshing
(hook-only delivery is always current).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

