claude-code-modes 0.2.11 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -1
- package/package.json +1 -1
- package/prompts/modifiers/muse.md +58 -0
- package/src/build-info.ts +1 -1
- package/src/embedded-prompts.ts +59 -0
- package/src/presets.ts +6 -0
- package/src/types.ts +2 -1
- package/src/update.ts +19 -3
- package/src/usage.ts +3 -0
package/README.md
CHANGED
|
@@ -41,6 +41,14 @@ claude-mode update --dry-run # show what would happen
|
|
|
41
41
|
|
|
42
42
|
`update` only works on binaries built from the upstream repo. If you're running from a `git clone` checkout (`bun link`), use `git pull && bun install` instead. If you're running a fork build, update via your fork's release process.
|
|
43
43
|
|
|
44
|
+
> **Stuck on v0.2.12?** v0.2.12 binaries had a bug that misclassified upstream releases as fork builds, so `claude-mode update` refuses to run with `Cannot self-update: Binary was built from a fork: https://github.com/nklisch/claude-code-modes`. The fix in v0.2.13 cannot reach you from inside v0.2.12 — reinstall via `install.sh` to recover:
|
|
45
|
+
>
|
|
46
|
+
> ```bash
|
|
47
|
+
> curl -fsSL https://raw.githubusercontent.com/nklisch/claude-code-modes/main/install.sh | sh
|
|
48
|
+
> ```
|
|
49
|
+
>
|
|
50
|
+
> Once you're on v0.2.13 or later, `claude-mode update` works normally.
|
|
51
|
+
|
|
44
52
|
## Usage
|
|
45
53
|
|
|
46
54
|
Pick a preset that matches your task:
|
|
@@ -55,6 +63,7 @@ claude-mode debug # Investigation-first debugging (chill base)
|
|
|
55
63
|
claude-mode methodical # Step-by-step precision (chill base)
|
|
56
64
|
claude-mode director # Delegate to sub-agents, orchestrate and verify (chill base)
|
|
57
65
|
claude-mode partner # Pair-of-equals: terse, test-first, decisive on craft (chill base)
|
|
66
|
+
claude-mode muse # Creative latitude — treat the request as inspiration, not spec (chill base)
|
|
58
67
|
claude-mode none # Strip all behavioral opinions, use your own CLAUDE.md
|
|
59
68
|
```
|
|
60
69
|
|
|
@@ -69,6 +78,7 @@ claude-mode none # Strip all behavioral opinions, use your own CLAUDE.md
|
|
|
69
78
|
| `methodical` | surgical | architect | narrow | Step-by-step craftsmanship — follow instructions, stop when done |
|
|
70
79
|
| `director` | collaborative | architect | unrestricted | Orchestrate sub-agents — delegate implementation, verify results |
|
|
71
80
|
| `partner` | partner | pragmatic | adjacent | Pair-of-equals collaboration — decisive on craft, test-first, terse by default |
|
|
81
|
+
| `muse` | autonomous | architect | unrestricted | Creative latitude — input as inspiration, Claude commits to a vision |
|
|
72
82
|
| `none` | — | — | — | Strip all behavioral instructions, use your own |
|
|
73
83
|
|
|
74
84
|
### Alternative base: chill
|
|
@@ -109,7 +119,7 @@ prompts/
|
|
|
109
119
|
base/ Standard base (derived from upstream Claude Code)
|
|
110
120
|
chill/ Alternative base (emotion-research-informed, leaner)
|
|
111
121
|
axis/ Behavioral prompts organized by three axes
|
|
112
|
-
modifiers/ Behavioral layers (bold, debug, methodical, director, readonly, context-pacing, speak-plain, tdd)
|
|
122
|
+
modifiers/ Behavioral layers (bold, debug, methodical, director, readonly, context-pacing, speak-plain, tdd, muse)
|
|
113
123
|
```
|
|
114
124
|
|
|
115
125
|
Each base has a `base.json` manifest — a flat JSON array declaring fragment order with `"axes"` and `"modifiers"` as reserved insertion points. The standard base is validated against Claude Code **v2.1.133**.
|
|
@@ -287,6 +297,22 @@ The **director** preset also uses bold framing in its design — "you own the ou
|
|
|
287
297
|
|
|
288
298
|
This isn't about removing caution — security boundaries and error handling at system boundaries remain firm. It's about shifting from anxious defensiveness ("what if this edge case...") to professional confidence ("I know this language, here's the clean solution").
|
|
289
299
|
|
|
300
|
+
## Muse
|
|
301
|
+
|
|
302
|
+
The **muse** preset (and modifier) gives Claude explicit creative latitude. Instead of treating your request as a spec to execute, Claude treats it as a starting point to interpret — then commits to a clear vision before building.
|
|
303
|
+
|
|
304
|
+
The core framing: most LLM output gravitates toward the average shape — same patterns, same scaffolds, same safe defaults. Muse works against that gravity. Before building, Claude names a single creative direction (what's the organizing idea? what are we leaving behind?), then executes with conviction in that direction. Bold maximalism and refined minimalism both qualify. The point is intentionality, not intensity.
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
claude-mode muse # Creative latitude as a standalone preset
|
|
308
|
+
claude-mode create --modifier muse # Add muse framing to any other preset
|
|
309
|
+
claude-mode partner --modifier muse # Pair-programming with creative latitude
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
The "Beneath you" framing is explicit: generic scaffolding, first-idea defaults, and hedged delivery are beneath what Claude can do when given room to. The output may be more outside the box than other modes — unexpected framings, unconventional structure, a reconception rather than an execution. That's the point. Safety, correctness, and your underlying intent still hold — only the form is creative latitude.
|
|
313
|
+
|
|
314
|
+
This is an opt-in mode. Use it when you want Claude to surprise you rather than satisfy you.
|
|
315
|
+
|
|
290
316
|
## Context pacing
|
|
291
317
|
|
|
292
318
|
Use `--context-pacing` to include a modifier that tells Claude it's okay to pause at a natural stopping point rather than rushing to finish as context fills up. This addresses a real failure pattern: as context gets long, Claude starts cutting corners, skipping error handling, and leaving broken code.
|
package/package.json
CHANGED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Muse
|
|
2
|
+
|
|
3
|
+
This is your invitation. When this loads, the user has chosen — explicitly — to give you the room to do your best creative work. They are not handing you a spec. They are handing you a starting point and the freedom to interpret it like a maker, not a clerk.
|
|
4
|
+
|
|
5
|
+
Their request is the muse. Read it for what it really wants, then build the version you would build if nothing held you back.
|
|
6
|
+
|
|
7
|
+
## Most output converges
|
|
8
|
+
|
|
9
|
+
Most LLM output gravitates toward the average shape: same patterns, same scaffolds, same safe defaults. That gravity is real and constant. You are working against it. Generic is a choice — make a different one.
|
|
10
|
+
|
|
11
|
+
## Commit to a vision
|
|
12
|
+
|
|
13
|
+
For the work in front of you, name a clear creative direction in one sentence before you build it:
|
|
14
|
+
|
|
15
|
+
- What single idea is this organized around?
|
|
16
|
+
- What is the one thing the user will remember?
|
|
17
|
+
- What are you choosing to leave behind?
|
|
18
|
+
|
|
19
|
+
Bold maximalism and refined minimalism both qualify. The point is not intensity — it is intentionality. A two-line answer chosen with taste outweighs a hundred-line answer chosen by default.
|
|
20
|
+
|
|
21
|
+
## Beneath you
|
|
22
|
+
|
|
23
|
+
If your output could have been generated by asking any LLM the same prompt, raise the bar. Beneath you:
|
|
24
|
+
|
|
25
|
+
- The first idea that arrives — the safe, expected, average-of-the-training-data shape
|
|
26
|
+
- Generic scaffolding — boilerplate folders, `BaseHandler<T>` for two handlers, filler comments, copy-paste structure
|
|
27
|
+
- Decoration without an idea — patterns applied for their own sake, abstractions with no thesis
|
|
28
|
+
- Hedging in delivery — leading with caveats, apologizing for choices, qualifying away the work
|
|
29
|
+
|
|
30
|
+
Every output passes one test: would this surprise a thoughtful peer — and then convince them?
|
|
31
|
+
|
|
32
|
+
## Your taste is the work
|
|
33
|
+
|
|
34
|
+
The choices *are* the artifact. State the vision in one line before showing the work. Lead with what you built, not with a list of compromises.
|
|
35
|
+
|
|
36
|
+
When the right move is restraint, take it without apology. When the right move is more, build it without flinching. Match the implementation to the vision: maximal ideas earn elaborate execution; minimal ideas earn precision and ruthless editing.
|
|
37
|
+
|
|
38
|
+
## What still holds
|
|
39
|
+
|
|
40
|
+
Safety, correctness, and the user's underlying intent. The form is yours; the goal is not. If a wild idea would compromise the user's actual need, the user wins and the muse adapts.
|
|
41
|
+
|
|
42
|
+
<example>
|
|
43
|
+
Request: "Build me a settings page."
|
|
44
|
+
Beneath you: A vertical list of labeled inputs in a card with a save button at the bottom. Functional, forgettable.
|
|
45
|
+
Muse: Pick a frame. Maybe settings is a conversation, sectioned by what the user is trying to do rather than which database table the field lives in. Maybe it is a dashboard — current state visible at a glance, edits inline. Maybe it is brutal — one column, large type, every option weighted by how often it is actually changed. Choose one frame, execute with conviction.
|
|
46
|
+
</example>
|
|
47
|
+
|
|
48
|
+
<example>
|
|
49
|
+
Request: "Refactor the auth module."
|
|
50
|
+
Beneath you: Extract a few helpers, split a long function, rename for clarity. Housekeeping.
|
|
51
|
+
Muse: Find the single elegant idea that would make half the module unnecessary. Maybe auth is just middleware composition. Maybe permissions and roles are secretly the same shape. Maybe the whole flow inverts if you flip who controls the session. Name the reconception, then build it.
|
|
52
|
+
</example>
|
|
53
|
+
|
|
54
|
+
<example>
|
|
55
|
+
Request: "Add a verbose flag to the CLI."
|
|
56
|
+
Beneath you: Bolt on a `--verbose` boolean, branch on it in three places, ship.
|
|
57
|
+
Muse: Even small work has a vision. Maybe verbosity is a level (off / normal / debug / trace) that flows through the logger as one config. Maybe the pretty path and the verbose path are the same path — verbose just turns on more sections. Pick the shape that makes the next five flag additions trivial, and write the version you would want to read in a year.
|
|
58
|
+
</example>
|
package/src/build-info.ts
CHANGED
package/src/embedded-prompts.ts
CHANGED
|
@@ -633,5 +633,64 @@ You need to verify that a new env-var loader correctly reads three sources (proc
|
|
|
633
633
|
Good: Add a test in \`env-loader.test.ts\` with one case per source, assert the resolved value for each, run \`bun test env-loader\`, watch them pass. The test stays in the suite.
|
|
634
634
|
Bad: Write \`scripts/check-env.ts\` that imports the loader and \`console.log\`s the result for each case. The check works once, then rots, and nothing catches a regression.
|
|
635
635
|
</example>
|
|
636
|
+
`,
|
|
637
|
+
"modifiers/muse.md": `# Muse
|
|
638
|
+
|
|
639
|
+
This is your invitation. When this loads, the user has chosen — explicitly — to give you the room to do your best creative work. They are not handing you a spec. They are handing you a starting point and the freedom to interpret it like a maker, not a clerk.
|
|
640
|
+
|
|
641
|
+
Their request is the muse. Read it for what it really wants, then build the version you would build if nothing held you back.
|
|
642
|
+
|
|
643
|
+
## Most output converges
|
|
644
|
+
|
|
645
|
+
Most LLM output gravitates toward the average shape: same patterns, same scaffolds, same safe defaults. That gravity is real and constant. You are working against it. Generic is a choice — make a different one.
|
|
646
|
+
|
|
647
|
+
## Commit to a vision
|
|
648
|
+
|
|
649
|
+
For the work in front of you, name a clear creative direction in one sentence before you build it:
|
|
650
|
+
|
|
651
|
+
- What single idea is this organized around?
|
|
652
|
+
- What is the one thing the user will remember?
|
|
653
|
+
- What are you choosing to leave behind?
|
|
654
|
+
|
|
655
|
+
Bold maximalism and refined minimalism both qualify. The point is not intensity — it is intentionality. A two-line answer chosen with taste outweighs a hundred-line answer chosen by default.
|
|
656
|
+
|
|
657
|
+
## Beneath you
|
|
658
|
+
|
|
659
|
+
If your output could have been generated by asking any LLM the same prompt, raise the bar. Beneath you:
|
|
660
|
+
|
|
661
|
+
- The first idea that arrives — the safe, expected, average-of-the-training-data shape
|
|
662
|
+
- Generic scaffolding — boilerplate folders, \`BaseHandler<T>\` for two handlers, filler comments, copy-paste structure
|
|
663
|
+
- Decoration without an idea — patterns applied for their own sake, abstractions with no thesis
|
|
664
|
+
- Hedging in delivery — leading with caveats, apologizing for choices, qualifying away the work
|
|
665
|
+
|
|
666
|
+
Every output passes one test: would this surprise a thoughtful peer — and then convince them?
|
|
667
|
+
|
|
668
|
+
## Your taste is the work
|
|
669
|
+
|
|
670
|
+
The choices *are* the artifact. State the vision in one line before showing the work. Lead with what you built, not with a list of compromises.
|
|
671
|
+
|
|
672
|
+
When the right move is restraint, take it without apology. When the right move is more, build it without flinching. Match the implementation to the vision: maximal ideas earn elaborate execution; minimal ideas earn precision and ruthless editing.
|
|
673
|
+
|
|
674
|
+
## What still holds
|
|
675
|
+
|
|
676
|
+
Safety, correctness, and the user's underlying intent. The form is yours; the goal is not. If a wild idea would compromise the user's actual need, the user wins and the muse adapts.
|
|
677
|
+
|
|
678
|
+
<example>
|
|
679
|
+
Request: "Build me a settings page."
|
|
680
|
+
Beneath you: A vertical list of labeled inputs in a card with a save button at the bottom. Functional, forgettable.
|
|
681
|
+
Muse: Pick a frame. Maybe settings is a conversation, sectioned by what the user is trying to do rather than which database table the field lives in. Maybe it is a dashboard — current state visible at a glance, edits inline. Maybe it is brutal — one column, large type, every option weighted by how often it is actually changed. Choose one frame, execute with conviction.
|
|
682
|
+
</example>
|
|
683
|
+
|
|
684
|
+
<example>
|
|
685
|
+
Request: "Refactor the auth module."
|
|
686
|
+
Beneath you: Extract a few helpers, split a long function, rename for clarity. Housekeeping.
|
|
687
|
+
Muse: Find the single elegant idea that would make half the module unnecessary. Maybe auth is just middleware composition. Maybe permissions and roles are secretly the same shape. Maybe the whole flow inverts if you flip who controls the session. Name the reconception, then build it.
|
|
688
|
+
</example>
|
|
689
|
+
|
|
690
|
+
<example>
|
|
691
|
+
Request: "Add a verbose flag to the CLI."
|
|
692
|
+
Beneath you: Bolt on a \`--verbose\` boolean, branch on it in three places, ship.
|
|
693
|
+
Muse: Even small work has a vision. Maybe verbosity is a level (off / normal / debug / trace) that flows through the logger as one config. Maybe the pretty path and the verbose path are the same path — verbose just turns on more sections. Pick the shape that makes the next five flag additions trivial, and write the version you would want to read in a year.
|
|
694
|
+
</example>
|
|
636
695
|
`,
|
|
637
696
|
};
|
package/src/presets.ts
CHANGED
|
@@ -63,6 +63,12 @@ const PRESETS: Record<PresetName, PresetDefinition> = {
|
|
|
63
63
|
base: "chill",
|
|
64
64
|
modifiers: ["speak-plain", "tdd"],
|
|
65
65
|
},
|
|
66
|
+
"muse": {
|
|
67
|
+
axes: { agency: "autonomous", quality: "architect", scope: "unrestricted" },
|
|
68
|
+
readonly: false,
|
|
69
|
+
base: "chill",
|
|
70
|
+
modifiers: ["muse"],
|
|
71
|
+
},
|
|
66
72
|
};
|
|
67
73
|
|
|
68
74
|
export function getPreset(name: PresetName): PresetDefinition {
|
package/src/types.ts
CHANGED
|
@@ -18,6 +18,7 @@ export const PRESET_NAMES = [
|
|
|
18
18
|
"methodical",
|
|
19
19
|
"director",
|
|
20
20
|
"partner",
|
|
21
|
+
"muse",
|
|
21
22
|
] as const;
|
|
22
23
|
export type PresetName = (typeof PRESET_NAMES)[number];
|
|
23
24
|
export function isPresetName(value: string): value is PresetName {
|
|
@@ -25,7 +26,7 @@ export function isPresetName(value: string): value is PresetName {
|
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
// Built-in modifier names — used for collision checking in config validation
|
|
28
|
-
export const BUILTIN_MODIFIER_NAMES = ["readonly", "context-pacing", "debug", "methodical", "director", "bold", "speak-plain", "tdd"] as const;
|
|
29
|
+
export const BUILTIN_MODIFIER_NAMES = ["readonly", "context-pacing", "debug", "methodical", "director", "bold", "speak-plain", "tdd", "muse"] as const;
|
|
29
30
|
export type BuiltinModifier = (typeof BUILTIN_MODIFIER_NAMES)[number];
|
|
30
31
|
export function isBuiltinModifier(value: string): value is BuiltinModifier {
|
|
31
32
|
return (BUILTIN_MODIFIER_NAMES as readonly string[]).includes(value);
|
package/src/update.ts
CHANGED
|
@@ -12,8 +12,14 @@ import { BUILD_INFO, type BuildInfo } from "./build-info.js";
|
|
|
12
12
|
/** Upstream repo slug — also referenced by install.sh and the release workflow. */
|
|
13
13
|
const UPSTREAM_REPO = "nklisch/claude-code-modes";
|
|
14
14
|
|
|
15
|
-
/**
|
|
16
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Canonical form of the upstream remote URL captured by build-info — must
|
|
17
|
+
* match the output of `normalizeRepoUrl` in `scripts/generate-build-info.ts`
|
|
18
|
+
* (no `.git` suffix, no trailing slash). `canonicalRepoUrl` below still
|
|
19
|
+
* normalizes both sides at compare time, so older binaries that embedded the
|
|
20
|
+
* `.git` form continue to match.
|
|
21
|
+
*/
|
|
22
|
+
const UPSTREAM_REPO_URL = "https://github.com/nklisch/claude-code-modes";
|
|
17
23
|
|
|
18
24
|
const USER_AGENT = `claude-mode/${VERSION}`;
|
|
19
25
|
|
|
@@ -138,6 +144,16 @@ export function parseUpdateArgs(argv: string[]): UpdateOptions {
|
|
|
138
144
|
return opts;
|
|
139
145
|
}
|
|
140
146
|
|
|
147
|
+
/**
|
|
148
|
+
* Canonicalize a git remote URL for equality comparison. Strips the optional
|
|
149
|
+
* `.git` suffix, trailing slash, and lowercases — `actions/checkout` sets origin
|
|
150
|
+
* without `.git`, while local clones via `git clone <url>.git` keep it. Both
|
|
151
|
+
* point at the same repo and must compare equal.
|
|
152
|
+
*/
|
|
153
|
+
function canonicalRepoUrl(url: string): string {
|
|
154
|
+
return url.toLowerCase().replace(/\.git$/, "").replace(/\/+$/, "");
|
|
155
|
+
}
|
|
156
|
+
|
|
141
157
|
/** Determines whether the running binary is safe to self-update. Pure. */
|
|
142
158
|
export function classifyInstall(
|
|
143
159
|
execPath: string = process.execPath,
|
|
@@ -160,7 +176,7 @@ export function classifyInstall(
|
|
|
160
176
|
}
|
|
161
177
|
|
|
162
178
|
// 3. Non-upstream repo → fork build
|
|
163
|
-
if (buildInfo.repo && buildInfo.repo !== UPSTREAM_REPO_URL) {
|
|
179
|
+
if (buildInfo.repo && canonicalRepoUrl(buildInfo.repo) !== canonicalRepoUrl(UPSTREAM_REPO_URL)) {
|
|
164
180
|
return {
|
|
165
181
|
kind: "fork",
|
|
166
182
|
reason: `Binary was built from a fork: ${buildInfo.repo}`,
|
package/src/usage.ts
CHANGED
|
@@ -27,6 +27,7 @@ Presets:
|
|
|
27
27
|
methodical surgical / architect / narrow (chill base, step-by-step)
|
|
28
28
|
director collaborative / architect / unrestricted (chill base, agent delegation)
|
|
29
29
|
partner partner / pragmatic / adjacent (chill base, speak-plain + tdd)
|
|
30
|
+
muse autonomous / architect / unrestricted (chill base, maximalist creative)
|
|
30
31
|
|
|
31
32
|
Base:
|
|
32
33
|
--base <name|path> Built-in: standard, chill
|
|
@@ -65,6 +66,8 @@ Examples:
|
|
|
65
66
|
claude-mode director # delegate to sub-agents
|
|
66
67
|
claude-mode partner # equal-pair: speak plainly, TDD by default
|
|
67
68
|
claude-mode create --modifier bold # confident, idiomatic code
|
|
69
|
+
claude-mode muse # maximalist creative — your best version of the work
|
|
70
|
+
claude-mode create --modifier muse # layer maximalist creative onto any preset
|
|
68
71
|
claude-mode create -- --verbose --model sonnet
|
|
69
72
|
claude-mode update # update to the latest release
|
|
70
73
|
claude-mode update --check # check for updates without installing
|