benjamin-docs 0.1.0 → 0.1.2

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 CHANGED
@@ -1,248 +1,99 @@
1
1
  # benjamin-docs
2
2
 
3
- Repo-local project memory for humans and AI agents.
3
+ Local project memory for humans and AI agents.
4
4
 
5
- `benjamin-docs` turns planning and build conversations into structured Markdown docs that live inside your project. It works before code exists, inside existing codebases, and for individual feature scopes.
5
+ `benjamin-docs` turns useful chats into project docs.
6
6
 
7
- ## Status
7
+ It keeps decisions, plans, open questions, and handoff notes in Markdown files inside your project.
8
8
 
9
- Early MVP. The CLI is prepared for its first public `0.1.0` package release as `benjamin-docs`.
9
+ No cloud. No dashboard. No transcript dump.
10
10
 
11
- The current goal is to make the open-source repo useful, understandable, and safe to try before adding hosted publishing or SaaS features.
11
+ ## What It Solves
12
12
 
13
- ## Why It Exists
13
+ AI work gets lost in chat history.
14
14
 
15
- Long agent sessions create valuable project context: product decisions, rejected options, feature plans, user-facing notes, handoff context, and code references. That context is easy to lose.
15
+ You explain the same context again.
16
16
 
17
- `benjamin-docs` keeps that memory close to the work:
17
+ Future agents miss decisions.
18
18
 
19
- - human-readable Markdown in `benjamin-docs/`
20
- - machine-readable metadata in `.benjamin-docs/`
21
- - local validation before docs are shared or exported
22
- - agent skill guidance so future sessions can update docs without drifting
19
+ Projects drift.
23
20
 
24
- ## Try It From Any Chat
21
+ `benjamin-docs` gives the project a small local notebook that agents can keep up to date.
25
22
 
26
- If a conversation already contains a useful project idea, ask your agent:
23
+ ## Install
27
24
 
28
- ```text
29
- Use benjamin-docs to create a project from this chat.
25
+ ```bash
26
+ pnpm add -g benjamin-docs
27
+ benjamin-docs install-skill
28
+ benjamin-docs introduce
30
29
  ```
31
30
 
32
- The agent should suggest a local folder like:
31
+ `install-skill` installs the bundled agent skill for common local tools:
33
32
 
34
33
  ```text
35
- ~/Documents/Benjamin Docs/Atelier Edits
34
+ ~/.agents/skills/benjamin-docs/
35
+ ~/.codex/skills/benjamin-docs/
36
+ ~/.claude/skills/benjamin-docs/
37
+ ~/.cursor/skills/benjamin-docs/
36
38
  ```
37
39
 
38
- After you confirm, it creates:
40
+ Claude Desktop / Claude.ai uses uploaded skills. After install, upload:
39
41
 
40
42
  ```text
41
- README.md
42
- benjamin-docs/
43
- .benjamin-docs/
43
+ ~/.claude/skills/benjamin-docs/
44
44
  ```
45
45
 
46
- The top-level `README.md` explains the project in plain language. The `benjamin-docs/` folder captures the project brief, roadmap, open questions, and handoff notes. Nothing is uploaded by the CLI.
47
-
48
- ## For Non-Programmers
49
-
50
- You can use `benjamin-docs` even if you are planning an app, product, service, or creative project before any code exists.
51
-
52
- Think of it as a project notebook that your AI agent keeps inside your project folder. The agent does the writing; the CLI creates the folders, checks that the notes are valid, and gives the next prompt to use.
46
+ ## Use It From Any Chat
53
47
 
54
- You need:
55
-
56
- - a place on your computer where the agent can create a project folder, such as `~/Documents/Benjamin Docs/Project Name`
57
- - an AI coding agent that can run terminal commands and edit files
58
- - the `benjamin-docs` CLI installed with pnpm, or a local source checkout while developing
59
-
60
- If all you have is the current chat, start by asking your agent:
48
+ If you only have a chat and no project folder yet, ask your agent:
61
49
 
62
50
  ```text
63
- Use benjamin-docs to create a project from this chat.
64
- Suggest ~/Documents/Benjamin Docs/<Project Name> as the folder,
65
- initialize it as a planning-only project, write a simple top-level README.md,
66
- then capture the current context in plain language.
51
+ Use the benjamin-docs skill to create a project from this chat.
67
52
  ```
68
53
 
69
- After that, ask:
54
+ The agent should suggest:
70
55
 
71
56
  ```text
72
- Show me the benjamin-docs project brief, roadmap, open questions,
73
- and handoff. Explain what each file is for.
57
+ ~/Documents/Benjamin Docs/<Project Name>
74
58
  ```
75
59
 
76
- Nothing is uploaded or published by the CLI. The docs stay in your project folder unless you choose to share them.
77
-
78
- ## Create A Project From A Chat
79
-
80
- This is the simplest first use case: you do not have a repo, codebase, or project folder yet. You only have a useful conversation.
81
-
82
- Ask your agent:
60
+ After you confirm, it creates a local project with:
83
61
 
84
62
  ```text
85
- Use benjamin-docs to create a project from this chat.
86
- Suggest ~/Documents/Benjamin Docs/<Project Name> unless I choose a different place.
87
- Create the folder, initialize benjamin-docs there, add a simple README.md,
88
- and turn this conversation into a project brief, roadmap, open questions,
89
- and handoff.
63
+ README.md
64
+ benjamin-docs/
65
+ .benjamin-docs/
90
66
  ```
91
67
 
92
- The agent should:
93
-
94
- - infer a human-readable project name when the chat makes one obvious
95
- - suggest `~/Documents/Benjamin Docs/<Project Name>` as the default location
96
- - ask for confirmation before creating files
97
- - summarize what it will capture in short bullets
98
- - create the project folder
99
- - run `benjamin-docs init --mode planning` inside that folder
100
- - write a top-level `README.md` that explains what the project is and where to start
101
- - update the Benjamin docs under `benjamin-docs/` from the chat context
102
- - run `benjamin-docs validate`
103
- - show you what was created and what is still uncertain
104
-
105
- The CLI creates and validates the docs workspace. The agent turns the chat into useful project memory.
68
+ ## Use It In An Existing Project
106
69
 
107
- ## Install The CLI
108
-
109
- Install globally with pnpm:
110
-
111
- ```bash
112
- pnpm add -g benjamin-docs
113
- benjamin-docs introduce
114
- ```
115
-
116
- Initialize docs in the current project folder:
70
+ From the project folder:
117
71
 
118
72
  ```bash
119
73
  benjamin-docs init
120
- benjamin-docs status
121
74
  benjamin-docs validate
122
75
  ```
123
76
 
124
- `init` prints the recommended agent prompt. Run `next` later if you want to see that prompt again.
77
+ Then ask your agent:
125
78
 
126
- ```bash
127
- benjamin-docs next
79
+ ```text
80
+ Capture the current project baseline with benjamin-docs.
128
81
  ```
129
82
 
130
- In an interactive terminal, `init` asks what you are setting up. In scripts or agent workflows, pass a mode explicitly.
131
-
132
83
  For an existing codebase:
133
84
 
134
85
  ```bash
135
86
  benjamin-docs init --mode codebase
136
- benjamin-docs validate
137
87
  ```
138
88
 
139
- For a single feature:
89
+ For one feature:
140
90
 
141
91
  ```bash
142
92
  benjamin-docs init --mode feature --feature billing-reminders
143
- benjamin-docs validate
144
- ```
145
-
146
- If you prefer a project-local dev dependency:
147
-
148
- ```bash
149
- cd /path/to/your-project
150
- pnpm add -D benjamin-docs
151
- pnpm exec benjamin-docs init
152
- pnpm exec benjamin-docs validate
153
- ```
154
-
155
- ## Install The Agent Skill Locally
156
-
157
- The skill teaches an agent how to capture planning/build conversations into the docs created by the CLI.
158
-
159
- For Codex local skills:
160
-
161
- ```bash
162
- mkdir -p ~/.codex/skills/benjamin-docs
163
- cp skills/benjamin-docs/SKILL.md ~/.codex/skills/benjamin-docs/SKILL.md
164
- ```
165
-
166
- Then ask your agent:
167
-
168
- ```text
169
- Capture this conversation with benjamin-docs.
170
- ```
171
-
172
- For a first planning session, a clearer prompt is:
173
-
174
- ```text
175
- Use the benjamin-docs skill.
176
- If there is no project folder yet, ask me where to create one.
177
- Suggest ~/Documents/Benjamin Docs/<Project Name> by default.
178
- Initialize it as a planning-only project, add a simple README.md,
179
- and capture what we know, what we decided, what is still unclear,
180
- and what I should do next. Keep it understandable for a non-technical reader.
181
93
  ```
182
94
 
183
- ## Local Development
184
-
185
- ```bash
186
- git clone https://github.com/msiksnis/benjamin-docs.git
187
- cd benjamin-docs
188
- pnpm install
189
- pnpm build
190
- node dist/src/cli.js introduce
191
- ```
192
-
193
- To test the source CLI inside another local project without installing the package:
194
-
195
- ```bash
196
- cd /path/to/your-project
197
- node /path/to/benjamin-docs/dist/src/cli.js init
198
- ```
199
-
200
- ## Checks
201
-
202
- ```bash
203
- pnpm check
204
- node dist/src/cli.js validate
205
- npm pack --dry-run
206
- ```
207
-
208
- Before publishing:
209
-
210
- ```bash
211
- pnpm run release:check
212
- pnpm publish
213
- ```
214
-
215
- ## Common Commands
216
-
217
- ```bash
218
- benjamin-docs introduce
219
- benjamin-docs help
220
- benjamin-docs --version
221
- benjamin-docs init
222
- benjamin-docs init --mode codebase
223
- benjamin-docs init --mode feature --feature booking-capacity
224
- benjamin-docs next
225
- benjamin-docs status
226
- benjamin-docs validate
227
- benjamin-docs scope create feature booking-capacity
228
- benjamin-docs anchor add booking-capacity-rules src/features/booking/capacity.ts
229
- benjamin-docs export --audience developer
230
- benjamin-docs promote --to codebase
231
- ```
232
-
233
- In a source checkout, use `node dist/src/cli.js ...` after `pnpm build`.
234
-
235
95
  ## What It Creates
236
96
 
237
- ```text
238
- benjamin-docs/
239
- .benjamin-docs/
240
- ```
241
-
242
- `benjamin-docs/` contains human-readable Markdown. `.benjamin-docs/` contains machine metadata for validation, exports, anchors, and future publishing.
243
-
244
- The default workspace is:
245
-
246
97
  ```text
247
98
  benjamin-docs/
248
99
  project/
@@ -250,103 +101,51 @@ benjamin-docs/
250
101
  engineering/
251
102
  features/
252
103
  releases/
253
- ```
254
-
255
- Existing project docs in `docs/` are left alone. They may be useful context, but they are not the Benjamin-managed workspace unless `.benjamin-docs/config.json` explicitly says so.
256
-
257
- ## Agent Workflow
258
-
259
- The CLI owns structure and validation. Codex or Claude skills own synthesis from the current conversation.
260
-
261
- Ask your agent:
262
-
263
- ```text
264
- Capture this conversation with benjamin-docs.
265
- ```
266
-
267
- The agent should update the relevant docs, run validation, and report what changed.
268
104
 
269
- Good capture prompts:
270
-
271
- ```text
272
- Use benjamin-docs to create a project from this chat.
273
- Suggest ~/Documents/Benjamin Docs/<Project Name>, then initialize it and capture the project.
274
- ```
275
-
276
- ```text
277
- Capture this planning conversation with benjamin-docs.
278
- ```
279
-
280
- ```text
281
- Capture the current project baseline with benjamin-docs.
282
- Read the existing docs and codebase, then update the Benjamin docs
283
- under benjamin-docs/. Mark uncertain items.
105
+ .benjamin-docs/
284
106
  ```
285
107
 
286
- ```text
287
- Create a benjamin-docs feature scope for billing-reminders
288
- and capture the plan, decisions, risks, and handoff.
289
- ```
108
+ `benjamin-docs/` is for people and agents.
290
109
 
291
- ## Capture A Baseline
110
+ `.benjamin-docs/` is metadata for validation, scopes, anchors, and exports.
292
111
 
293
- A baseline capture turns the current state of a project into durable docs. It is the first useful pass after `init`, and it should capture decisions, rejected options, risks, open questions, and next actions instead of saving a raw transcript.
112
+ Existing `docs/` folders are left alone unless you explicitly configure otherwise.
294
113
 
295
- For a new idea or planning-only project:
114
+ ## Useful Commands
296
115
 
297
116
  ```bash
298
- benjamin-docs init --mode planning
299
- ```
300
-
301
- ```text
302
- Capture the baseline for this new idea with benjamin-docs.
303
- Update the project brief, roadmap, open questions, and handoff docs.
304
- Mark assumptions clearly and challenge any overbuilt V1 scope.
305
- ```
306
-
307
- For an existing codebase:
308
-
309
- ```bash
310
- benjamin-docs init --mode codebase
311
- ```
312
-
313
- ```text
314
- Capture the current codebase baseline with benjamin-docs.
315
- Read the README, package/config files, existing docs, and major source areas.
316
- Update the project, engineering, and handoff docs under benjamin-docs/.
317
- Include important code references, risks, and uncertain findings.
117
+ benjamin-docs introduce
118
+ benjamin-docs install-skill
119
+ benjamin-docs init
120
+ benjamin-docs next
121
+ benjamin-docs status
122
+ benjamin-docs validate
123
+ benjamin-docs scope create feature <slug>
124
+ benjamin-docs export --audience developer
318
125
  ```
319
126
 
320
- For one feature:
127
+ ## Local Development
321
128
 
322
129
  ```bash
323
- benjamin-docs init --mode feature --feature billing-reminders
324
- ```
325
-
326
- ```text
327
- Capture the billing-reminders feature with benjamin-docs.
328
- Update the feature brief, plan, decisions, and handoff.
329
- Include user goals, constraints, rejected options, test ideas, and next actions.
130
+ git clone https://github.com/msiksnis/benjamin-docs.git
131
+ cd benjamin-docs
132
+ pnpm install
133
+ pnpm check
330
134
  ```
331
135
 
332
- After any baseline capture:
136
+ Before publishing:
333
137
 
334
138
  ```bash
335
- benjamin-docs validate
139
+ pnpm run release:check
140
+ pnpm publish
336
141
  ```
337
142
 
338
- ## Design Boundaries
339
-
340
- - The repo-local docs are the source of truth.
341
- - The CLI should stay deterministic and dependency-light.
342
- - Ordinary local commands should not make network calls.
343
- - Existing docs in a repo should not be overwritten.
344
- - Hosted publishing, auth, comments, and web editing are future layers.
345
-
346
143
  ## Contributing
347
144
 
348
- See [CONTRIBUTING.md](CONTRIBUTING.md).
145
+ Keep it local-first.
146
+
147
+ Keep docs readable by non-programmers.
349
148
 
350
- ## Security
149
+ Keep agent workflows explicit.
351
150
 
352
- See [SECURITY.md](SECURITY.md).
151
+ Avoid magic that writes outside the project unless the user runs a clear command.
package/dist/src/cli.js CHANGED
@@ -5,6 +5,7 @@ import { addAnchor } from "./anchors.js";
5
5
  import { exportAudience } from "./export.js";
6
6
  import { initProject, promoteToCodebase } from "./init.js";
7
7
  import { getHelpText, getIntroductionText, getPackageVersion } from "./info.js";
8
+ import { formatInstallSkillResult, installSkill, knownSkillTargets } from "./install-skill.js";
8
9
  import { formatNextMessage, getNextPrompt } from "./next.js";
9
10
  import { createScope } from "./scopes.js";
10
11
  import { getStatus } from "./status.js";
@@ -23,6 +24,12 @@ export async function main(argv = process.argv.slice(2), cwd = process.cwd()) {
23
24
  console.log(getIntroductionText());
24
25
  return 0;
25
26
  }
27
+ if (command === "install-skill") {
28
+ const options = parseInstallSkillArgs(argv.slice(1));
29
+ const result = installSkill(options);
30
+ console.log(formatInstallSkillResult(result));
31
+ return 0;
32
+ }
26
33
  if (command === "init") {
27
34
  const options = await resolveInitOptions(argv.slice(1));
28
35
  const result = initProject(cwd, options);
@@ -150,6 +157,38 @@ function parseSetup(value) {
150
157
  return "feature";
151
158
  throw new Error("Usage: benjamin-docs init --mode <planning|codebase|feature>");
152
159
  }
160
+ function parseInstallSkillArgs(args) {
161
+ const options = {};
162
+ for (let index = 0; index < args.length; index += 1) {
163
+ const arg = args[index];
164
+ if (arg === "--dry-run") {
165
+ options.dryRun = true;
166
+ continue;
167
+ }
168
+ if (arg === "--target") {
169
+ const value = args[index + 1];
170
+ if (!value)
171
+ throw new Error(`Usage: benjamin-docs install-skill --target <all|${knownSkillTargets().map((target) => target.id).join("|")}>`);
172
+ options.target = parseSkillTarget(value);
173
+ index += 1;
174
+ continue;
175
+ }
176
+ throw new Error(`Unknown install-skill option: ${arg}`);
177
+ }
178
+ return options;
179
+ }
180
+ function parseSkillTarget(value) {
181
+ if (value === "all")
182
+ return "all";
183
+ if (value === "shared")
184
+ return "agents";
185
+ if (value === "claude")
186
+ return "claude-code";
187
+ const ids = knownSkillTargets().map((target) => target.id);
188
+ if (ids.includes(value))
189
+ return value;
190
+ throw new Error(`Usage: benjamin-docs install-skill --target <all|${ids.join("|")}>`);
191
+ }
153
192
  async function promptForInitOptions() {
154
193
  const choices = [
155
194
  { label: "Planning a new project", setup: "project" },
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/src/info.js CHANGED
@@ -20,7 +20,7 @@ export function getHelpText() {
20
20
  "",
21
21
  "If you are here with an AI agent:",
22
22
  " 1. Run: benjamin-docs introduce",
23
- " 2. If you only have a chat, ask the agent to create a project folder from this chat.",
23
+ " 2. If you only have a chat, ask: Use the benjamin-docs skill to create a project from this chat.",
24
24
  " A good default is ~/Documents/Benjamin Docs/<Project Name>.",
25
25
  " 3. Otherwise run: benjamin-docs init",
26
26
  " 4. Ask: Capture the current project baseline with benjamin-docs in plain language.",
@@ -28,6 +28,7 @@ export function getHelpText() {
28
28
  "Common commands:",
29
29
  " benjamin-docs --version",
30
30
  " benjamin-docs introduce",
31
+ " benjamin-docs install-skill",
31
32
  " benjamin-docs init",
32
33
  " benjamin-docs init --mode codebase",
33
34
  " benjamin-docs init --mode feature --feature booking-capacity",
@@ -41,6 +42,7 @@ export function getHelpText() {
41
42
  "",
42
43
  "Start here:",
43
44
  " benjamin-docs introduce",
45
+ " benjamin-docs install-skill",
44
46
  " benjamin-docs init",
45
47
  " benjamin-docs next",
46
48
  ].join("\n");
@@ -57,7 +59,18 @@ export function getIntroductionText() {
57
59
  "",
58
60
  "Your docs are not uploaded or published by the CLI. The repo-local docs are the source of truth.",
59
61
  "",
60
- "If you only have a chat, ask your AI agent to create a new project from the chat with benjamin-docs. A good default location is ~/Documents/Benjamin Docs/<Project Name>.",
62
+ "The CLI creates and validates the local docs workspace. The benjamin-docs skill teaches your agent how to turn chat context into useful docs.",
63
+ "",
64
+ "Install or update the skill for Codex, Cursor, and Claude Code with:",
65
+ "",
66
+ "benjamin-docs install-skill",
67
+ "",
68
+ "If you only have a chat, paste this into your AI chat:",
69
+ "",
70
+ "Use the benjamin-docs skill to create a project from this chat.",
71
+ "Suggest ~/Documents/Benjamin Docs/<Project Name> unless I choose a different place.",
72
+ "",
73
+ "A good default location is ~/Documents/Benjamin Docs/<Project Name>.",
61
74
  "",
62
75
  "If you already have a project folder, ask your AI agent to run `benjamin-docs init`, then capture the current project baseline in plain language.",
63
76
  ].join("\n");
@@ -1 +1 @@
1
- {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,iBAAiB;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAwB,CAAC;IACjF,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,eAAe;QACf,EAAE;QACF,qDAAqD;QACrD,EAAE;QACF,eAAe;QACf,mDAAmD;QACnD,gGAAgG;QAChG,2DAA2D;QAC3D,EAAE;QACF,mCAAmC;QACnC,mCAAmC;QACnC,wFAAwF;QACxF,kEAAkE;QAClE,wCAAwC;QACxC,sFAAsF;QACtF,EAAE;QACF,kBAAkB;QAClB,2BAA2B;QAC3B,2BAA2B;QAC3B,sBAAsB;QACtB,sCAAsC;QACtC,gEAAgE;QAChE,sBAAsB;QACtB,wBAAwB;QACxB,0BAA0B;QAC1B,uDAAuD;QACvD,oFAAoF;QACpF,6CAA6C;QAC7C,uCAAuC;QACvC,EAAE;QACF,aAAa;QACb,2BAA2B;QAC3B,sBAAsB;QACtB,sBAAsB;KACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,mFAAmF;QACnF,EAAE;QACF,0GAA0G;QAC1G,EAAE;QACF,2JAA2J;QAC3J,EAAE;QACF,0HAA0H;QAC1H,EAAE;QACF,kGAAkG;QAClG,EAAE;QACF,2KAA2K;QAC3K,EAAE;QACF,mJAAmJ;KACpJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,iBAAiB;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAwB,CAAC;IACjF,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,eAAe;QACf,EAAE;QACF,qDAAqD;QACrD,EAAE;QACF,eAAe;QACf,mDAAmD;QACnD,gGAAgG;QAChG,2DAA2D;QAC3D,EAAE;QACF,mCAAmC;QACnC,mCAAmC;QACnC,oGAAoG;QACpG,kEAAkE;QAClE,wCAAwC;QACxC,sFAAsF;QACtF,EAAE;QACF,kBAAkB;QAClB,2BAA2B;QAC3B,2BAA2B;QAC3B,+BAA+B;QAC/B,sBAAsB;QACtB,sCAAsC;QACtC,gEAAgE;QAChE,sBAAsB;QACtB,wBAAwB;QACxB,0BAA0B;QAC1B,uDAAuD;QACvD,oFAAoF;QACpF,6CAA6C;QAC7C,uCAAuC;QACvC,EAAE;QACF,aAAa;QACb,2BAA2B;QAC3B,+BAA+B;QAC/B,sBAAsB;QACtB,sBAAsB;KACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,mFAAmF;QACnF,EAAE;QACF,0GAA0G;QAC1G,EAAE;QACF,2JAA2J;QAC3J,EAAE;QACF,0HAA0H;QAC1H,EAAE;QACF,kGAAkG;QAClG,EAAE;QACF,+IAA+I;QAC/I,EAAE;QACF,sEAAsE;QACtE,EAAE;QACF,6BAA6B;QAC7B,EAAE;QACF,wDAAwD;QACxD,EAAE;QACF,iEAAiE;QACjE,qFAAqF;QACrF,EAAE;QACF,sEAAsE;QACtE,EAAE;QACF,mJAAmJ;KACpJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,44 @@
1
+ export declare const SKILL_NAME = "benjamin-docs";
2
+ declare const TARGETS: readonly [{
3
+ readonly id: "agents";
4
+ readonly label: "Shared Agent Skills";
5
+ readonly relativePath: ".agents/skills/benjamin-docs/SKILL.md";
6
+ }, {
7
+ readonly id: "codex";
8
+ readonly label: "Codex";
9
+ readonly relativePath: ".codex/skills/benjamin-docs/SKILL.md";
10
+ }, {
11
+ readonly id: "claude-code";
12
+ readonly label: "Claude Code";
13
+ readonly relativePath: ".claude/skills/benjamin-docs/SKILL.md";
14
+ }, {
15
+ readonly id: "cursor";
16
+ readonly label: "Cursor";
17
+ readonly relativePath: ".cursor/skills/benjamin-docs/SKILL.md";
18
+ }];
19
+ export type SkillTargetId = (typeof TARGETS)[number]["id"] | "all";
20
+ export type InstallSkillStatus = "installed" | "updated" | "unchanged" | "would-install" | "would-update" | "would-keep";
21
+ export interface InstallSkillOptions {
22
+ homeDir?: string;
23
+ target?: SkillTargetId;
24
+ dryRun?: boolean;
25
+ }
26
+ export interface InstallSkillResult {
27
+ skillSourcePath: string;
28
+ homeDir: string;
29
+ dryRun: boolean;
30
+ targets: Array<{
31
+ id: Exclude<SkillTargetId, "all">;
32
+ label: string;
33
+ path: string;
34
+ status: InstallSkillStatus;
35
+ }>;
36
+ }
37
+ export declare function installSkill(options?: InstallSkillOptions): InstallSkillResult;
38
+ export declare function formatInstallSkillResult(result: InstallSkillResult): string;
39
+ export declare function knownSkillTargets(): Array<{
40
+ id: Exclude<SkillTargetId, "all">;
41
+ label: string;
42
+ relativePath: string;
43
+ }>;
44
+ export {};
@@ -0,0 +1,112 @@
1
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { dirname, join, relative, resolve, sep } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { homedir } from "node:os";
5
+ export const SKILL_NAME = "benjamin-docs";
6
+ const TARGETS = [
7
+ {
8
+ id: "agents",
9
+ label: "Shared Agent Skills",
10
+ relativePath: `.agents/skills/${SKILL_NAME}/SKILL.md`,
11
+ },
12
+ {
13
+ id: "codex",
14
+ label: "Codex",
15
+ relativePath: `.codex/skills/${SKILL_NAME}/SKILL.md`,
16
+ },
17
+ {
18
+ id: "claude-code",
19
+ label: "Claude Code",
20
+ relativePath: `.claude/skills/${SKILL_NAME}/SKILL.md`,
21
+ },
22
+ {
23
+ id: "cursor",
24
+ label: "Cursor",
25
+ relativePath: `.cursor/skills/${SKILL_NAME}/SKILL.md`,
26
+ },
27
+ ];
28
+ export function installSkill(options = {}) {
29
+ const homeDir = resolve(options.homeDir ?? process.env.BENJAMIN_DOCS_HOME ?? homedir());
30
+ const target = options.target ?? "all";
31
+ const skillSourcePath = getBundledSkillPath();
32
+ const skill = readFileSync(skillSourcePath, "utf8");
33
+ const targets = resolveTargets(target).map((entry) => {
34
+ const destination = resolveSkillPath(homeDir, entry.relativePath);
35
+ const existing = readExistingSkill(destination);
36
+ const status = statusFor(existing, skill, options.dryRun === true);
37
+ if (!options.dryRun && existing !== skill) {
38
+ mkdirSync(dirname(destination), { recursive: true });
39
+ writeFileSync(destination, skill, "utf8");
40
+ }
41
+ return {
42
+ id: entry.id,
43
+ label: entry.label,
44
+ path: destination,
45
+ status,
46
+ };
47
+ });
48
+ return { skillSourcePath, homeDir, dryRun: options.dryRun === true, targets };
49
+ }
50
+ export function formatInstallSkillResult(result) {
51
+ const verb = result.dryRun ? "Skill install plan" : "Installed benjamin-docs skill";
52
+ const lines = [verb, ""];
53
+ for (const target of result.targets) {
54
+ lines.push(`${target.status.padEnd(13)} ${target.label.padEnd(19)} ${formatHomePath(result.homeDir, target.path)}`);
55
+ }
56
+ lines.push("");
57
+ lines.push("Claude Desktop / Claude.ai:");
58
+ lines.push(` Upload the ${SKILL_NAME} skill folder through Claude's Skills UI.`);
59
+ lines.push(` After this command, use: ${formatHomePath(result.homeDir, resolve(dirname(result.targets.find((target) => target.id === "claude-code")?.path ?? join(result.homeDir, ".claude/skills", SKILL_NAME, "SKILL.md"))))}`);
60
+ lines.push("");
61
+ lines.push("Then ask your agent:");
62
+ lines.push(` Use the ${SKILL_NAME} skill to create a project from this chat.`);
63
+ return lines.join("\n");
64
+ }
65
+ export function knownSkillTargets() {
66
+ return TARGETS.map((target) => ({ ...target }));
67
+ }
68
+ function getBundledSkillPath() {
69
+ const currentDir = dirname(fileURLToPath(import.meta.url));
70
+ return join(currentDir, "..", "..", "skills", SKILL_NAME, "SKILL.md");
71
+ }
72
+ function resolveTargets(target) {
73
+ if (target === "all")
74
+ return [...TARGETS];
75
+ const resolved = TARGETS.find((entry) => entry.id === target);
76
+ if (!resolved)
77
+ throw new Error(`Unknown skill target: ${target}`);
78
+ return [resolved];
79
+ }
80
+ function resolveSkillPath(homeDir, relativePath) {
81
+ const destination = resolve(homeDir, relativePath);
82
+ const relativePathFromHome = relative(homeDir, destination);
83
+ if (relativePathFromHome === ".." || relativePathFromHome.startsWith(`..${sep}`) || relativePathFromHome === "" || relativePathFromHome.startsWith("/")) {
84
+ throw new Error(`Refusing to install skill outside home directory: ${relativePath}`);
85
+ }
86
+ return destination;
87
+ }
88
+ function readExistingSkill(path) {
89
+ try {
90
+ return readFileSync(path, "utf8");
91
+ }
92
+ catch (error) {
93
+ if (error && typeof error === "object" && "code" in error && error.code === "ENOENT")
94
+ return undefined;
95
+ throw error;
96
+ }
97
+ }
98
+ function statusFor(existing, next, dryRun) {
99
+ if (existing === undefined)
100
+ return dryRun ? "would-install" : "installed";
101
+ if (existing === next)
102
+ return dryRun ? "would-keep" : "unchanged";
103
+ return dryRun ? "would-update" : "updated";
104
+ }
105
+ function formatHomePath(homeDir, path) {
106
+ const relativePathFromHome = relative(homeDir, path);
107
+ if (relativePathFromHome && !relativePathFromHome.startsWith(`..${sep}`) && relativePathFromHome !== "..") {
108
+ return `~/${relativePathFromHome}`;
109
+ }
110
+ return path;
111
+ }
112
+ //# sourceMappingURL=install-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/install-skill.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "benjamin-docs",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Repo-local project memory for humans and AI agents.",
5
5
  "keywords": [
6
6
  "ai",
@@ -7,6 +7,8 @@ description: Capture planning and build conversations into repo-local project me
7
7
 
8
8
  Use this skill when the user asks to capture, document, summarize, hand off, export, preserve a planning or development conversation, or create a project from a chat with `benjamin-docs`.
9
9
 
10
+ If the user says "Use the benjamin-docs skill to create a project from this chat" or similar, start the Chat-To-Project Workflow directly.
11
+
10
12
  ## Purpose
11
13
 
12
14
  `benjamin-docs` turns long-running project conversations into durable Markdown docs inside a project folder. It is useful when the user only has a chat, before code exists, inside existing codebases, and for individual feature scopes.