@infinitedusky/indusk-mcp 1.9.1 → 1.9.4

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.
@@ -17,18 +17,21 @@ function run(cmd, options) {
17
17
  return "";
18
18
  }
19
19
  }
20
- function ensureGitignoreMcpJson(projectRoot) {
20
+ function ensureGitignore(projectRoot) {
21
21
  const gitignorePath = join(projectRoot, ".gitignore");
22
+ const entries = ["# MCP config (contains auth tokens)", ".mcp.json"];
22
23
  if (existsSync(gitignorePath)) {
23
24
  const content = readFileSync(gitignorePath, "utf-8");
24
- if (content.includes(".mcp.json"))
25
+ if (content.includes(".mcp.json")) {
26
+ console.info(" skip: .gitignore (.mcp.json already ignored)");
25
27
  return;
26
- writeFileSync(gitignorePath, `${content.trimEnd()}\n\n# MCP config (contains auth tokens)\n.mcp.json\n`);
28
+ }
29
+ writeFileSync(gitignorePath, `${content.trimEnd()}\n\n${entries.join("\n")}\n`);
27
30
  console.info(" updated: .gitignore (added .mcp.json)");
28
31
  }
29
32
  else {
30
- writeFileSync(gitignorePath, "# MCP config (contains auth tokens)\n.mcp.json\n");
31
- console.info(" created: .gitignore (with .mcp.json)");
33
+ writeFileSync(gitignorePath, `${entries.join("\n")}\n`);
34
+ console.info(" create: .gitignore (with .mcp.json)");
32
35
  }
33
36
  }
34
37
  function createCgcIgnore(projectRoot) {
@@ -43,6 +46,9 @@ function createCgcIgnore(projectRoot) {
43
46
  "dist/",
44
47
  "build/",
45
48
  ".git/",
49
+ ".jj/",
50
+ ".indusk/",
51
+ ".claude/",
46
52
  "*.png",
47
53
  "*.jpg",
48
54
  "*.svg",
@@ -664,13 +670,12 @@ export async function init(projectRoot, options = {}) {
664
670
  }
665
671
  // 8. Create .cgcignore and manage git excludes
666
672
  createCgcIgnore(projectRoot);
673
+ // .mcp.json contains auth tokens — always gitignore it regardless of mode
674
+ ensureGitignore(projectRoot);
667
675
  if (local) {
668
676
  console.info("\n[Git Excludes]");
669
677
  writeGitInfoExclude(projectRoot);
670
678
  }
671
- else {
672
- ensureGitignoreMcpJson(projectRoot);
673
- }
674
679
  // 9. Run on_init hooks from enabled extensions
675
680
  console.info("\n[Extension Hooks]");
676
681
  const { getEnabledExtensions } = await import("../../lib/extension-loader.js");
@@ -753,12 +758,52 @@ export async function init(projectRoot, options = {}) {
753
758
  writeConfig(projectRoot, config);
754
759
  console.info(`\n[Config]`);
755
760
  console.info(` create: .indusk/config.json (mode: ${config.mode})`);
761
+ // Create initial handoff so /catchup runs full orientation on first session
762
+ const handoffPath = join(projectRoot, ".claude/handoff.md");
763
+ if (!existsSync(handoffPath) || force) {
764
+ const today = new Date().toISOString().split("T")[0];
765
+ const handoffContent = [
766
+ "# Handoff",
767
+ "",
768
+ `**Date:** ${today}`,
769
+ "**Session:** Fresh init — first session orientation needed",
770
+ "",
771
+ "## Catchup Status",
772
+ "- [ ] mcp-ready",
773
+ "- [ ] handoff",
774
+ "- [ ] lessons",
775
+ "- [ ] health",
776
+ "- [ ] context",
777
+ "- [ ] plans",
778
+ "- [ ] skills",
779
+ "- [ ] extensions",
780
+ "- [ ] graph",
781
+ "",
782
+ "## What Was Being Worked On",
783
+ "`indusk init` just set up this project. No prior session.",
784
+ "",
785
+ "## Where It Stopped",
786
+ "Init complete. Agent needs full orientation (lessons, context, skills, extensions, graph).",
787
+ "",
788
+ "## What's Next",
789
+ "1. Run `/catchup` to orient the agent (reads lessons, context, skills, extensions, graph)",
790
+ "2. Edit CLAUDE.md with project details",
791
+ "3. Start planning: `/planner your-first-feature`",
792
+ "",
793
+ "## Open Issues",
794
+ "None — fresh project.",
795
+ "",
796
+ ].join("\n");
797
+ writeFileSync(handoffPath, handoffContent);
798
+ console.info("\n[Handoff]");
799
+ console.info(" create: .claude/handoff.md (first-session orientation)");
800
+ }
756
801
  // Summary
757
802
  console.info("\nDone!");
758
803
  console.info("\n⚠ Restart Claude Code to load the updated MCP server and skills.");
759
804
  console.info("\nNext steps:");
760
805
  console.info(" 1. Set up infrastructure (if not done): indusk infra start");
761
- console.info(" 2. Restart Claude Code");
806
+ console.info(" 2. Restart Claude Code — /catchup will auto-orient the agent");
762
807
  console.info(" 3. Edit CLAUDE.md with your project details");
763
- console.info(" 4. Start planning: /plan your-first-feature");
808
+ console.info(" 4. Start planning: /planner your-first-feature");
764
809
  }
@@ -41,7 +41,7 @@ That's it. No tokens, no config files, no environment variables.
41
41
 
42
42
  ## When to Create Diagrams
43
43
 
44
- - **During `/plan` research or brief**: sketch the proposed architecture to make it concrete
44
+ - **During `/planner` research or brief**: sketch the proposed architecture to make it concrete
45
45
  - **During `/work` teach mode**: visualize what a phase is building before and after
46
46
  - **During debugging**: draw the request flow to identify where things break
47
47
  - **During retrospective**: before/after architecture comparison
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@infinitedusky/indusk-mcp",
3
- "version": "1.9.1",
3
+ "version": "1.9.4",
4
4
  "description": "InDusk development system — skills, MCP tools, and CLI for structured AI-assisted development",
5
5
  "type": "module",
6
6
  "files": [
package/skills/catchup.md CHANGED
@@ -78,7 +78,7 @@ Call `extensions_status` to see what extensions are enabled and their capabiliti
78
78
  Call `get_skill_summaries` to load the name, description, and type of every installed skill. This returns a compact summary — you do NOT need to read each skill file individually. The full skill content loads automatically when the user invokes a slash command.
79
79
 
80
80
  Skill types:
81
- - **process** — workflow skills with slash commands (plan, work, verify, context, document, retrospective)
81
+ - **process** — workflow skills with slash commands (planner, work, verify, context, document, retrospective)
82
82
  - **extension** — tool integrations (cgc, composable-env, excalidraw, etc.)
83
83
  - **domain** — technology-specific best practices (typescript, testing, etc.)
84
84
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: plan
2
+ name: planner
3
3
  description: Create and advance plans. Every plan follows the same document lifecycle — research, brief, ADR, impl, retrospective. Knows how to write each one, what order they go in, and how to pick up where things left off.
4
4
  argument-hint: "[workflow] [plan name] — workflow: feature (default), bugfix, refactor, spike"
5
5
  ---
@@ -29,15 +29,15 @@ General-purpose research (insights useful across plans) also lives in `research/
29
29
 
30
30
  ## Workflow Types
31
31
 
32
- The first argument to `/plan` can optionally be a workflow type that controls which documents are created:
32
+ The first argument to `/planner` can optionally be a workflow type that controls which documents are created:
33
33
 
34
34
  | Command | Workflow | Documents |
35
35
  |---------|----------|-----------|
36
- | `/plan bugfix auth-expiry` | bugfix | brief + impl only |
37
- | `/plan refactor extract-auth` | refactor | brief + impl (with boundary map) |
38
- | `/plan spike redis-options` | spike | research only |
39
- | `/plan feature payment-flow` | feature | full lifecycle (default) |
40
- | `/plan payment-flow` | feature | same — no type defaults to feature |
36
+ | `/planner bugfix auth-expiry` | bugfix | brief + impl only |
37
+ | `/planner refactor extract-auth` | refactor | brief + impl (with boundary map) |
38
+ | `/planner spike redis-options` | spike | research only |
39
+ | `/planner feature payment-flow` | feature | full lifecycle (default) |
40
+ | `/planner payment-flow` | feature | same — no type defaults to feature |
41
41
 
42
42
  Parse the input: if the first word is `bugfix`, `refactor`, `spike`, or `feature`, use that workflow. Otherwise, default to `feature`. The remaining words become the plan name (kebab-cased).
43
43
 
@@ -21,7 +21,7 @@ The retrospective skill replaces the freeform "write a retrospective" step with
21
21
  ## When to Use
22
22
 
23
23
  - After `/work` completes all impl phases and the status is `completed`
24
- - When `/plan {name}` detects the impl is completed and the next step is retrospective
24
+ - When `/planner {name}` detects the impl is completed and the next step is retrospective
25
25
  - Directly via `/retrospective {plan-name}`
26
26
 
27
27
  ## The Audit Checklist
@@ -17,7 +17,7 @@ To see which MCP servers and extensions are active, call `extensions_status`.
17
17
  ## How the Skills Work Together
18
18
 
19
19
  ```
20
- /plan → creates planning docs (research, brief, ADR, impl)
20
+ /planner → creates planning docs (research, brief, ADR, impl)
21
21
 
22
22
  /work → executes impl checklist, phase by phase
23
23
  each phase has four gates:
@@ -139,7 +139,7 @@ While executing impl items:
139
139
 
140
140
  Gates prevent skipping important work. Three enforcement levels, set via `gate_policy` in impl frontmatter or `.claude/settings.json`:
141
141
 
142
- | Mode | Writing the impl (`/plan`) | Executing the impl (`/work`) |
142
+ | Mode | Writing the impl (`/planner`) | Executing the impl (`/work`) |
143
143
  |------|---------------------------|------------------------------|
144
144
  | **`strict`** | Every gate must have a real item. No `(none needed)`. | Every item must be completed. No skipping. |
145
145
  | **`ask`** (default) | Every gate must have a real item. No `(none needed)`. | Skip only with conversation proof: `(none needed — asked: "..." — user: "...")` |
package/skills/work.md CHANGED
@@ -70,7 +70,7 @@ Three modes, configured via `gate_policy` in the impl frontmatter or `.claude/se
70
70
 
71
71
  | Mode | Behavior |
72
72
  |------|----------|
73
- | **`strict`** | No overrides at any stage. Every gate must have a real item when the impl is written (`/plan`), and every item must be completed during `/work`. No `(none needed)`, no `skip-reason:`, no conversation proof. |
73
+ | **`strict`** | No overrides at any stage. Every gate must have a real item when the impl is written (`/planner`), and every item must be completed during `/work`. No `(none needed)`, no `skip-reason:`, no conversation proof. |
74
74
  | **`ask`** (default) | Every gate must have a real item when the impl is written. During `/work`, the agent must ask the user before skipping, and include proof of the conversation in the skip format. Hooks enforce both stages. |
75
75
  | **`auto`** | Gates can be pre-filled with `(none needed)` or `skip-reason:` at write time. During `/work`, the agent can skip without asking. Use when running autonomously. |
76
76
 
@@ -118,7 +118,7 @@ In `ask` mode, skipped gates MUST include proof that the conversation happened:
118
118
 
119
119
  The hook validates that both `asked:` and `user:` are present with non-empty quoted content. Bare `(none needed)` or `skip-reason:` without conversation proof will be **blocked by the hook**.
120
120
 
121
- | Mode | At write time (`/plan`) | At execution time (`/work`) |
121
+ | Mode | At write time (`/planner`) | At execution time (`/work`) |
122
122
  |------|------------------------|---------------------------|
123
123
  | `strict` | No opt-outs — real items required | No skipping — everything completed |
124
124
  | `ask` | No opt-outs — real items required | Skip only with conversation proof |
@@ -148,7 +148,7 @@ The hook validates that both `asked:` and `user:` are present with non-empty quo
148
148
  - Update impl status to `completed`
149
149
  - Summarize what was done
150
150
  - If this plan included an ADR, confirm CLAUDE.md's Key Decisions was updated
151
- - Let the user know the plan is ready for a retrospective if they want one (`/plan {name}` will pick up at the retrospective stage)
151
+ - Let the user know the plan is ready for a retrospective if they want one (`/planner {name}` will pick up at the retrospective stage)
152
152
 
153
153
  ## Teach Mode
154
154