@yarkingulacti/agentic-scaffold 0.7.0 → 0.7.1

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
@@ -64,34 +64,44 @@ npx @yarkingulacti/agentic-scaffold --skip-skills --skip-scripts --skip-hooks
64
64
 
65
65
  # Pre-configure values
66
66
  npx @yarkingulacti/agentic-scaffold --project-name "my-app" --issue-tracker github
67
+
68
+ # Remove all scaffolded files (asks for confirmation)
69
+ npx @yarkingulacti/agentic-scaffold un
70
+
71
+ # Remove without confirmation
72
+ npx @yarkingulacti/agentic-scaffold un --force
67
73
  ```
68
74
 
69
75
  ## What you get
70
76
 
71
77
  ```
72
78
  project/
73
- ├── AGENTS.md # Agent config (entry point for AI agents)
74
- ├── CLAUDE.md # Mirror of AGENTS.md
75
- ├── BUSINESS_LOGIC.md # Shell fill with your domain
76
- ├── .gitignore
77
- ├── docs/
78
- ├── CODING_PRINCIPLES.md # Operating rules for code
79
- ├── adr/TEMPLATE.md # Architecture Decision Record template
80
- ├── agents/
81
- ├── domain.md # How to consume domain docs
82
- ├── session-close.md # Post-coding session workflow
83
- ├── issue-tracker.md # Issue tracker conventions
84
- │ │ └── triage-labels.md # Triage status vocabulary
85
- │ ├── context/
86
- │ │ ├── INDEX.md # Section index for CONTEXT.md
87
- │ │ └── glossary.md # Ubiquitous language glossary
88
- │ ├── engineering/README.md
89
- └── product/README.md
90
- ├── .agents/skills/ # Agent skill definitions (21 skills)
91
- ├── .agents/hooks/ # Pre/post lifecycle hooks for agent workflows
92
- ├── scripts/ # Markdown memory indexing pipeline
93
- ├── .scratchpad/ # Local detailed planning
94
- └── .history/ # Shipped work summaries
79
+ ├── AGENTS.md -> .agentic-scaffold/AGENTS.md # Symlink entry point
80
+ ├── CLAUDE.md -> .agentic-scaffold/CLAUDE.md # Symlink entry point
81
+ └── .agentic-scaffold/ # Single wrapper directory
82
+ ├── AGENTS.md # Agent config (entry point for AI agents)
83
+ ├── CLAUDE.md # Mirror of AGENTS.md
84
+ ├── BUSINESS_LOGIC.md # Shell fill with your domain
85
+ ├── .gitignore
86
+ ├── docs/
87
+ │ ├── CODING_PRINCIPLES.md # Operating rules for code
88
+ │ ├── adr/TEMPLATE.md # Architecture Decision Record template
89
+ │ ├── agents/
90
+ │ │ ├── domain.md # How to consume domain docs
91
+ ├── session-close.md # Post-coding session workflow
92
+ │ │ ├── issue-tracker.md # Issue tracker conventions
93
+ │ │ └── triage-labels.md # Triage status vocabulary
94
+ │ ├── context/
95
+ │ ├── INDEX.md # Section index for CONTEXT.md
96
+ │ │ └── glossary.md # Ubiquitous language glossary
97
+ ├── engineering/README.md
98
+ │ └── product/README.md
99
+ ├── .agents/
100
+ │ ├── skills/ # Agent skill definitions (22 skills)
101
+ │ └── hooks/ # Pre/post lifecycle hooks
102
+ ├── scripts/ # Markdown memory indexing pipeline
103
+ ├── .scratchpad/ # Local detailed planning
104
+ └── .history/ # Shipped work summaries
95
105
  ```
96
106
 
97
107
  ## Auto-detection
@@ -126,6 +136,12 @@ CLI flags.
126
136
  - **`--skip-hooks` flag** — skip the hooks component group.
127
137
  - **98 tests** — detection, scaffolding, CLI, and hooks tested end-to-end.
128
138
 
139
+ ## New in v0.6
140
+
141
+ - **Interactive mode redesign** — shows detected project profile before prompts, pre-fills prompts with detected values, and per-file conflict resolver that asks before overwriting existing files.
142
+ - **MEMORY.md golden rules** — feature branches mandatory for new features, every release gets a version tag.
143
+ - **Per-file conflict resolution** — `askOverwrite()` prompt lets you decide for each existing file during scaffolding.
144
+
129
145
  ## New in v0.5
130
146
 
131
147
  - **`fill-docs` skill** — new agent skill that interviews you to complete placeholder content in BUSINESS_LOGIC.md, glossary, and other scaffolded docs.
@@ -154,12 +170,26 @@ CLI flags.
154
170
 
155
171
  ## After scaffolding
156
172
 
157
- 1. Fill in `BUSINESS_LOGIC.md` with your product domain.
173
+ 1. Fill in `.agentic-scaffold/BUSINESS_LOGIC.md` with your product domain.
158
174
  2. Run `npm install` / `pnpm install` for your project's actual dependencies.
159
175
  3. `python3 -m venv .venv && pip install sqlite-vec` if you want vector memory.
160
- 4. Install the skills in your AI tool (e.g. opencode) — each `.agents/skills/*/SKILL.md` is self-contained.
161
- 5. Customize `docs/agents/triage-labels.md` to match your tracker's vocabulary.
162
- 6. Use the `fill-docs` skill (`.agents/skills/fill-docs/SKILL.md`) to complete scaffolded documentation.
176
+ 4. Install the skills in your AI tool (e.g. opencode) — each `.agentic-scaffold/.agents/skills/*/SKILL.md` is self-contained.
177
+ 5. Customize `.agentic-scaffold/docs/agents/triage-labels.md` to match your tracker's vocabulary.
178
+ 6. Use the `fill-docs` skill (`.agentic-scaffold/.agents/skills/fill-docs/SKILL.md`) to complete scaffolded documentation.
179
+
180
+ ## Unscaffold
181
+
182
+ Remove all scaffolded files in one command:
183
+
184
+ ```bash
185
+ # Interactive (asks for confirmation)
186
+ npx @yarkingulacti/agentic-scaffold un
187
+
188
+ # Non-interactive
189
+ npx @yarkingulacti/agentic-scaffold un --force
190
+ ```
191
+
192
+ This removes the entire `.agentic-scaffold/` directory and the root-level symlinks (AGENTS.md, CLAUDE.md). Your project files are left untouched.
163
193
 
164
194
  ## Open source
165
195
 
package/bin/index.js CHANGED
@@ -2,92 +2,113 @@
2
2
  import yargs from "yargs";
3
3
  import { hideBin } from "yargs/helpers";
4
4
  import { scaffold } from "../src/scaffold.js";
5
+ import { unscaffold } from "../src/unscaffold.js";
5
6
 
6
- const argv = yargs(hideBin(process.argv))
7
- .usage("$0 [options]")
8
- .epilogue(
9
- "Tiers:\n" +
10
- " Zero-config Run with no flags \u2014 auto-detect project, scaffold only\n" +
11
- " what\u2019s missing. Never overwrites existing files.\n" +
12
- " Flag mode Override auto-detection with --package-manager,\n" +
13
- " --ci-provider, --ai-tools, etc. Add --force to overwrite.\n" +
14
- " Interactive Run with -i / --interactive for step-by-step prompts."
15
- )
16
- .example("$0", "Zero-config: auto-detect and scaffold missing files")
17
- .example("$0 --force", "Force overwrite existing files")
18
- .example("$0 --ci-provider github", "Override auto-detected CI provider")
19
- .example("$0 --ai-tools opencode,cursor", "Generate configs for specific AI tools")
20
- .example("$0 -i", "Interactive mode with prompts")
21
- .option("interactive", {
22
- alias: "i",
23
- type: "boolean",
24
- description: "Run in interactive mode with prompts",
25
- default: false,
26
- })
27
- .option("target", {
28
- alias: "t",
29
- type: "string",
30
- description: "Target directory (default: current working directory)",
31
- default: process.cwd(),
32
- })
33
- .option("only", {
34
- type: "string",
35
- description: "Comma-separated component groups to include: docs,scripts,skills,all",
36
- default: "all",
37
- })
38
- .option("skip-skills", {
39
- type: "boolean",
40
- description: "Skip agent skill definitions",
41
- })
42
- .option("skip-hooks", {
43
- type: "boolean",
44
- description: "Skip agent lifecycle hook templates",
45
- })
46
- .option("skip-scripts", {
47
- type: "boolean",
48
- description: "Skip memory scripts",
49
- default: false,
50
- })
51
- .option("skip-docs", {
52
- type: "boolean",
53
- description: "Skip docs folder",
54
- default: false,
55
- })
56
- .option("project-name", {
57
- type: "string",
58
- description: "Project name (used in generated files)",
59
- })
60
- .option("issue-tracker", {
61
- type: "string",
62
- choices: ["linear", "github", "both"],
63
- description: "Issue tracker type",
64
- })
65
- .option("force", {
66
- alias: "f",
67
- type: "boolean",
68
- description: "Overwrite existing files",
69
- default: false,
70
- })
71
- .option("package-manager", {
72
- type: "string",
73
- choices: ["npm", "yarn", "pnpm", "pip", "poetry", "go-mod", "cargo"],
74
- description: "Package manager (overrides auto-detection)",
75
- })
76
- .option("ci-provider", {
77
- type: "string",
78
- choices: ["github", "gitlab", "circleci"],
79
- description: "CI provider (overrides auto-detection)",
80
- })
81
- .option("ai-tools", {
82
- type: "string",
83
- description: "Comma-separated AI tools to configure: opencode,cursor,copilot",
84
- })
85
- .option("script-language", {
86
- type: "string",
87
- choices: ["python", "node", "docker"],
88
- description: "Memory script language (overrides auto-detection)",
89
- })
7
+ function scaffoldBuilder(y) {
8
+ return y
9
+ .epilogue(
10
+ "Tiers:\n" +
11
+ " Zero-config Run with no flags \u2014 auto-detect project, scaffold only\n" +
12
+ " what\u2019s missing. Never overwrites existing files.\n" +
13
+ " Flag mode Override auto-detection with --package-manager,\n" +
14
+ " --ci-provider, --ai-tools, etc. Add --force to overwrite.\n" +
15
+ " Interactive Run with -i / --interactive for step-by-step prompts."
16
+ )
17
+ .example("$0", "Zero-config: auto-detect and scaffold missing files")
18
+ .example("$0 --force", "Force overwrite existing files")
19
+ .example("$0 --ci-provider github", "Override auto-detected CI provider")
20
+ .example("$0 --ai-tools opencode,cursor", "Generate configs for specific AI tools")
21
+ .example("$0 -i", "Interactive mode with prompts")
22
+ .option("interactive", {
23
+ alias: "i",
24
+ type: "boolean",
25
+ description: "Run in interactive mode with prompts",
26
+ default: false,
27
+ })
28
+ .option("target", {
29
+ alias: "t",
30
+ type: "string",
31
+ description: "Target directory (default: current working directory)",
32
+ default: process.cwd(),
33
+ })
34
+ .option("only", {
35
+ type: "string",
36
+ description: "Comma-separated component groups to include: docs,scripts,skills,all",
37
+ default: "all",
38
+ })
39
+ .option("skip-skills", {
40
+ type: "boolean",
41
+ description: "Skip agent skill definitions",
42
+ })
43
+ .option("skip-hooks", {
44
+ type: "boolean",
45
+ description: "Skip agent lifecycle hook templates",
46
+ })
47
+ .option("skip-scripts", {
48
+ type: "boolean",
49
+ description: "Skip memory scripts",
50
+ default: false,
51
+ })
52
+ .option("skip-docs", {
53
+ type: "boolean",
54
+ description: "Skip docs folder",
55
+ default: false,
56
+ })
57
+ .option("project-name", {
58
+ type: "string",
59
+ description: "Project name (used in generated files)",
60
+ })
61
+ .option("issue-tracker", {
62
+ type: "string",
63
+ choices: ["linear", "github", "both"],
64
+ description: "Issue tracker type",
65
+ })
66
+ .option("force", {
67
+ alias: "f",
68
+ type: "boolean",
69
+ description: "Overwrite existing files",
70
+ default: false,
71
+ })
72
+ .option("package-manager", {
73
+ type: "string",
74
+ choices: ["npm", "yarn", "pnpm", "pip", "poetry", "go-mod", "cargo"],
75
+ description: "Package manager (overrides auto-detection)",
76
+ })
77
+ .option("ci-provider", {
78
+ type: "string",
79
+ choices: ["github", "gitlab", "circleci"],
80
+ description: "CI provider (overrides auto-detection)",
81
+ })
82
+ .option("ai-tools", {
83
+ type: "string",
84
+ description: "Comma-separated AI tools to configure: opencode,cursor,copilot",
85
+ })
86
+ .option("script-language", {
87
+ type: "string",
88
+ choices: ["python", "node", "docker"],
89
+ description: "Memory script language (overrides auto-detection)",
90
+ });
91
+ }
92
+
93
+ function unBuilder(y) {
94
+ return y
95
+ .option("target", {
96
+ alias: "t",
97
+ type: "string",
98
+ description: "Target directory (default: current working directory)",
99
+ default: process.cwd(),
100
+ })
101
+ .option("force", {
102
+ alias: "f",
103
+ type: "boolean",
104
+ description: "Remove without confirmation",
105
+ default: false,
106
+ });
107
+ }
108
+
109
+ yargs(hideBin(process.argv))
110
+ .command(["$0", "scaffold"], "Scaffold agentic configuration into a project", scaffoldBuilder, (argv) => scaffold(argv))
111
+ .command("un", "Remove scaffolded files from a project", unBuilder, (argv) => unscaffold(argv))
112
+ .demandCommand(1, "Use --help to see available commands")
90
113
  .help()
91
114
  .parse();
92
-
93
- await scaffold(argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yarkingulacti/agentic-scaffold",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
4
4
  "description": "Scaffold agentic development documentation & configuration into any project",
5
5
  "type": "module",
6
6
  "bin": {
package/src/scaffold.js CHANGED
@@ -1,4 +1,4 @@
1
- import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
1
+ import { readFileSync, writeFileSync, mkdirSync, existsSync, symlinkSync } from "node:fs";
2
2
  import { readdirSync, statSync, copyFileSync } from "node:fs";
3
3
  import { join, dirname } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
@@ -23,6 +23,7 @@ function resolveConfig(argv) {
23
23
 
24
24
  const config = {
25
25
  target,
26
+ scaffoldDir: join(target, ".agentic-scaffold"),
26
27
  projectName: argv.projectName ?? profile.projectName ?? (target.split("/").filter(Boolean).pop() ?? "project"),
27
28
  projectDescription: argv.projectDescription ?? profile.projectDescription ?? DEFAULTS.projectDescription,
28
29
  languages: profile.languages,
@@ -54,9 +55,9 @@ function resolveIncludes(argv) {
54
55
  const ISSUE_TRACKER_DOCS = {
55
56
  linear: {
56
57
  name: "Linear",
57
- description: "Short implementation records live in Linear. Local, detailed planning lives in `.scratchpad/<feature>/`. See `docs/agents/issue-tracker.md`.",
58
+ description: "Short implementation records live in Linear. Local, detailed planning lives in `.agentic-scaffold/.scratchpad/<feature>/`. See `.agentic-scaffold/docs/agents/issue-tracker.md`.",
58
59
  trackerDoc: "Linear",
59
- short: "Short issue records live in Linear. Local detailed planning lives in `.scratchpad/`.",
60
+ short: "Short issue records live in Linear. Local detailed planning lives in `.agentic-scaffold/.scratchpad/`.",
60
61
  statusTable: `| Label | Status string | Meaning |
61
62
  |-------|--------------|---------|
62
63
  | needs-triage | \`needs-triage\` | Maintainer needs to evaluate this issue |
@@ -70,7 +71,7 @@ LINEAR_PROJECT_ID=`,
70
71
  },
71
72
  github: {
72
73
  name: "GitHub Issues",
73
- description: "Short implementation records live in GitHub Issues. Local, detailed planning lives in `.scratchpad/<feature>/`. See `docs/agents/issue-tracker.md`.",
74
+ description: "Short implementation records live in GitHub Issues. Local, detailed planning lives in `.agentic-scaffold/.scratchpad/<feature>/`. See `.agentic-scaffold/docs/agents/issue-tracker.md`.",
74
75
  trackerDoc: "GitHub Issues",
75
76
  short: "Short issue records live in GitHub Issues. Local detailed planning lives in `.scratchpad/`.",
76
77
  statusTable: `| Label | Meaning |
@@ -87,13 +88,13 @@ LINEAR_PROJECT_ID=`,
87
88
 
88
89
  function buildIncompleteFiles(config) {
89
90
  const files = [
90
- { file: "BUSINESS_LOGIC.md", sections: "Core Domain Concepts, Non-Negotiable Rules, Architecture Decisions" },
91
+ { file: ".agentic-scaffold/BUSINESS_LOGIC.md", sections: "Core Domain Concepts, Non-Negotiable Rules, Architecture Decisions" },
91
92
  ];
92
93
  if (config.include.has("docs")) {
93
94
  files.push(
94
- { file: "docs/context/glossary.md", sections: "domain term definitions" },
95
- { file: "docs/product/README.md", sections: "product spec descriptions" },
96
- { file: "docs/engineering/README.md", sections: "implementation conventions" },
95
+ { file: ".agentic-scaffold/docs/context/glossary.md", sections: "domain term definitions" },
96
+ { file: ".agentic-scaffold/docs/product/README.md", sections: "product spec descriptions" },
97
+ { file: ".agentic-scaffold/docs/engineering/README.md", sections: "implementation conventions" },
97
98
  );
98
99
  }
99
100
  return files;
@@ -117,7 +118,7 @@ function buildHandlebars(config) {
117
118
  return {
118
119
  projectName: config.projectName,
119
120
  projectDescription: config.projectDescription,
120
- scriptsDir: "scripts",
121
+ scriptsDir: ".agentic-scaffold/scripts",
121
122
  issueTrackerName: tracker.name,
122
123
  issueTrackerDescription: tracker.description,
123
124
  issueTrackerShort: tracker.short,
@@ -216,48 +217,76 @@ async function renderDir(srcDir, destDir, data, options = {}) {
216
217
  return results;
217
218
  }
218
219
 
220
+ const SCAFFOLD_DIR_NAME = ".agentic-scaffold";
221
+
222
+ function scaffoldDir(config) {
223
+ return config.scaffoldDir;
224
+ }
225
+
219
226
  async function scaffoldRoot(config, hbData, extraOpts = {}) {
220
227
  const rootSrc = join(TEMPLATES_DIR, "root");
221
- const rootDest = config.target;
228
+ const rootDest = scaffoldDir(config);
222
229
  return renderDir(rootSrc, rootDest, hbData, { force: config.force, interactive: config.interactive, ...extraOpts });
223
230
  }
224
231
 
225
232
  async function scaffoldDocs(config, hbData, extraOpts = {}) {
226
233
  const docsSrc = join(TEMPLATES_DIR, "docs");
227
- const docsDest = join(config.target, "docs");
234
+ const docsDest = join(scaffoldDir(config), "docs");
228
235
  return renderDir(docsSrc, docsDest, hbData, { force: config.force, interactive: config.interactive, ...extraOpts });
229
236
  }
230
237
 
231
238
  async function scaffoldScripts(config, hbData, extraOpts = {}) {
232
239
  const scriptsSrc = join(TEMPLATES_DIR, "scripts");
233
- const scriptsDest = join(config.target, "scripts");
240
+ const scriptsDest = join(scaffoldDir(config), "scripts");
234
241
  return renderDir(scriptsSrc, scriptsDest, hbData, { force: config.force, interactive: config.interactive, ...extraOpts });
235
242
  }
236
243
 
237
244
  async function scaffoldSkills(config, extraOpts = {}) {
238
245
  const skillsSrc = join(TEMPLATES_DIR, "skills");
239
- const skillsDest = join(config.target, ".agents", "skills");
246
+ const skillsDest = join(scaffoldDir(config), ".agents", "skills");
240
247
  return copyStaticDir(skillsSrc, skillsDest, { force: config.force, interactive: config.interactive, ...extraOpts });
241
248
  }
242
249
 
243
250
  async function scaffoldHooks(config, hbData, extraOpts = {}) {
244
251
  const hooksSrc = join(TEMPLATES_DIR, "hooks");
245
- const hooksDest = join(config.target, ".agents", "hooks");
252
+ const hooksDest = join(scaffoldDir(config), ".agents", "hooks");
246
253
  return renderDir(hooksSrc, hooksDest, hbData, { force: config.force, interactive: config.interactive, ...extraOpts });
247
254
  }
248
255
 
249
256
  async function scaffoldScratchpad(config, extraOpts = {}) {
250
257
  const src = join(TEMPLATES_DIR, "scratchpad");
251
- const dest = join(config.target, ".scratchpad");
258
+ const dest = join(scaffoldDir(config), ".scratchpad");
252
259
  return copyStaticDir(src, dest, { force: config.force, interactive: config.interactive, ...extraOpts });
253
260
  }
254
261
 
255
262
  async function scaffoldHistory(config, extraOpts = {}) {
256
263
  const src = join(TEMPLATES_DIR, "history");
257
- const dest = join(config.target, ".history");
264
+ const dest = join(scaffoldDir(config), ".history");
258
265
  return copyStaticDir(src, dest, { force: config.force, interactive: config.interactive, ...extraOpts });
259
266
  }
260
267
 
268
+ function createSymlinks(config) {
269
+ const links = [
270
+ ["AGENTS.md", ".agentic-scaffold/AGENTS.md"],
271
+ ["CLAUDE.md", ".agentic-scaffold/CLAUDE.md"],
272
+ ];
273
+ const created = [];
274
+ for (const [name, target] of links) {
275
+ const linkPath = join(config.target, name);
276
+ if (existsSync(linkPath)) {
277
+ created.push("skipped-existing");
278
+ continue;
279
+ }
280
+ try {
281
+ symlinkSync(target, linkPath);
282
+ created.push("written");
283
+ } catch {
284
+ created.push("skipped-existing");
285
+ }
286
+ }
287
+ return created;
288
+ }
289
+
261
290
  function countTemplateFiles(config) {
262
291
  const dirs = [
263
292
  join(TEMPLATES_DIR, "root"),
@@ -324,6 +353,8 @@ export async function scaffold(argv) {
324
353
  results.push(...(await scaffoldScratchpad(config, tickOpts)));
325
354
  results.push(...(await scaffoldHistory(config, tickOpts)));
326
355
 
356
+ results.push(...(await createSymlinks(config)));
357
+
327
358
  process.stdout.write("\r".padEnd(60) + "\r");
328
359
 
329
360
  const written = results.filter((r) => r === "written").length;
@@ -345,7 +376,7 @@ export async function scaffold(argv) {
345
376
  }
346
377
  if (config.include.has("skills")) {
347
378
  console.log(`\n ${style.dim("Agent skill available to help:")}`);
348
- console.log(` .agents/skills/fill-docs/SKILL.md`);
379
+ console.log(` .agentic-scaffold/.agents/skills/fill-docs/SKILL.md`);
349
380
  console.log(` ${style.dim("Invoke it with your AI agent to fill in these files conversationally.")}`);
350
381
  }
351
382
  }
@@ -0,0 +1,84 @@
1
+ import { existsSync, readdirSync, lstatSync, readlinkSync, rmSync } from "node:fs";
2
+ import { join, relative } from "node:path";
3
+ import readline from "node:readline/promises";
4
+ import { stdin as input, stdout as output } from "node:process";
5
+ import { infoBox, summaryLine, style } from "./ui.js";
6
+
7
+ const SCAFFOLD_DIR = ".agentic-scaffold";
8
+
9
+ function findScaffoldFiles(target) {
10
+ const scaffoldPath = join(target, SCAFFOLD_DIR);
11
+ if (!existsSync(scaffoldPath)) return null;
12
+
13
+ const files = [];
14
+ collectFiles(scaffoldPath, files);
15
+ return { scaffoldPath, files };
16
+ }
17
+
18
+ function collectFiles(dir, files) {
19
+ for (const name of readdirSync(dir)) {
20
+ const full = join(dir, name);
21
+ const stat = lstatSync(full);
22
+ if (stat.isDirectory()) {
23
+ files.push({ path: full, type: "dir" });
24
+ collectFiles(full, files);
25
+ } else {
26
+ files.push({ path: full, type: "file" });
27
+ }
28
+ }
29
+ }
30
+
31
+ function findSymlinks(target) {
32
+ const links = [];
33
+ for (const name of ["AGENTS.md", "CLAUDE.md"]) {
34
+ const full = join(target, name);
35
+ if (!existsSync(full)) continue;
36
+ const stat = lstatSync(full);
37
+ if (stat.isSymbolicLink()) {
38
+ const linkTarget = readlinkSync(full);
39
+ if (linkTarget.startsWith(SCAFFOLD_DIR)) {
40
+ links.push(full);
41
+ }
42
+ }
43
+ }
44
+ return links;
45
+ }
46
+
47
+ export async function unscaffold(argv) {
48
+ const target = argv.target || process.cwd();
49
+ const force = argv.force ?? false;
50
+
51
+ const scaffoldData = findScaffoldFiles(target);
52
+ if (!scaffoldData) {
53
+ console.log(` ${summaryLine("Nothing to unscaffold — .agentic-scaffold/ not found.", "done")}`);
54
+ return;
55
+ }
56
+
57
+ const symlinks = findSymlinks(target);
58
+ const { scaffoldPath, files } = scaffoldData;
59
+
60
+ const rows = [
61
+ ["Target", style.cyan(target)],
62
+ ["Files to remove", style.cyan(String(files.length))],
63
+ ["Symlinks to remove", style.cyan(String(symlinks.length))],
64
+ ];
65
+ console.log(`\n${infoBox(rows)}`);
66
+
67
+ if (!force) {
68
+ const rl = readline.createInterface({ input, output });
69
+ const answer = await rl.question(` Remove .agentic-scaffold/ (${files.length} files, ${symlinks.length} symlinks)? [y/N]: `);
70
+ rl.close();
71
+ if (answer.trim().toLowerCase() !== "y") {
72
+ console.log(` ${summaryLine("Unscaffold cancelled.", "warn")}`);
73
+ return;
74
+ }
75
+ }
76
+
77
+ rmSync(scaffoldPath, { recursive: true, force: true });
78
+
79
+ for (const link of symlinks) {
80
+ rmSync(link, { force: true });
81
+ }
82
+
83
+ console.log(` ${summaryLine(`Removed ${files.length} files and ${symlinks.length} symlinks.`, "done")}`);
84
+ }
@@ -34,7 +34,7 @@ This is the short repo version for day-to-day implementation by human and AI age
34
34
 
35
35
  - Is every new file needed for the current task?
36
36
  - Is each new abstraction used by real code today?
37
- - Does the code use project vocabulary from `BUSINESS_LOGIC.md` and `docs/context/glossary.md`?
37
+ - Does the code use project vocabulary from `.agentic-scaffold/BUSINESS_LOGIC.md` and `.agentic-scaffold/docs/context/glossary.md`?
38
38
  - Are failures handled near the boundary where they become knowable?
39
39
  - Do tests cover the behavior that could regress?
40
40
  - Could a simpler function or module solve the same current requirement?
@@ -3,28 +3,28 @@
3
3
  How the engineering skills should consume this repo's domain documentation when
4
4
  exploring the codebase.
5
5
 
6
- This repo uses `BUSINESS_LOGIC.md` as the primary project brain, with `docs/`
7
- and `docs/adr/` as supporting tracked documentation.
6
+ This repo uses `.agentic-scaffold/BUSINESS_LOGIC.md` as the primary project brain, with `.agentic-scaffold/docs/`
7
+ and `.agentic-scaffold/docs/adr/` as supporting tracked documentation.
8
8
 
9
- Agents must read `BUSINESS_LOGIC.md` first before planning, coding, or creating
10
- issues. Future task plans must cite the relevant `BUSINESS_LOGIC.md` section.
9
+ Agents must read `.agentic-scaffold/BUSINESS_LOGIC.md` first before planning, coding, or creating
10
+ issues. Future task plans must cite the relevant `.agentic-scaffold/BUSINESS_LOGIC.md` section.
11
11
 
12
12
  `CONTEXT.md` remains a **verbatim mirror** of the Obsidian vault, regenerated by
13
- `scripts/sync-context.sh`. Never hand-edit it. Do not read it whole. Use
14
- `docs/context/INDEX.md` to map your work area to relevant sections.
13
+ `.agentic-scaffold/scripts/sync-context.sh`. Never hand-edit it. Do not read it whole. Use
14
+ `.agentic-scaffold/docs/context/INDEX.md` to map your work area to relevant sections.
15
15
 
16
- When `CONTEXT.md` conflicts with `BUSINESS_LOGIC.md` or an accepted ADR, follow
17
- `BUSINESS_LOGIC.md` and the accepted ADR. Treat `CONTEXT.md` as historical input
16
+ When `CONTEXT.md` conflicts with `.agentic-scaffold/BUSINESS_LOGIC.md` or an accepted ADR, follow
17
+ `.agentic-scaffold/BUSINESS_LOGIC.md` and the accepted ADR. Treat `CONTEXT.md` as historical input
18
18
  until the vault mirror is regenerated.
19
19
 
20
- Glossary terms live in `docs/context/glossary.md`.
20
+ Glossary terms live in `.agentic-scaffold/docs/context/glossary.md`.
21
21
 
22
22
  ## Before exploring, read these
23
23
 
24
- - **`BUSINESS_LOGIC.md`** — product fundamentals and non-negotiable rules.
25
- - **`docs/context/INDEX.md`** — pick relevant historical `CONTEXT.md` sections.
24
+ - **`.agentic-scaffold/BUSINESS_LOGIC.md`** — product fundamentals and non-negotiable rules.
25
+ - **`.agentic-scaffold/docs/context/INDEX.md`** — pick relevant historical `CONTEXT.md` sections.
26
26
  - **`CONTEXT.md`** — only the sections the index points you to.
27
- - **`docs/adr/`** — read ADRs that touch the area you're about to work in.
27
+ - **`.agentic-scaffold/docs/adr/`** — read ADRs that touch the area you're about to work in.
28
28
 
29
29
  If any of these files don't exist, **proceed silently**. Don't flag their
30
30
  absence; don't suggest creating them upfront.
@@ -34,17 +34,20 @@ absence; don't suggest creating them upfront.
34
34
  ```
35
35
  /
36
36
  ├── CONTEXT.md
37
- ├── BUSINESS_LOGIC.md
38
- ├── docs/adr/
39
- │ ├── 0001-example-decision.md
40
- │ └── 0002-another-decision.md
41
- └── ...
37
+ ├── AGENTS.md -> .agentic-scaffold/AGENTS.md
38
+ ├── CLAUDE.md -> .agentic-scaffold/CLAUDE.md
39
+ └── .agentic-scaffold/
40
+ ├── BUSINESS_LOGIC.md
41
+ ├── docs/adr/
42
+ │ ├── 0001-example-decision.md
43
+ │ └── 0002-another-decision.md
44
+ └── ...
42
45
  ```
43
46
 
44
47
  ## Use the glossary's vocabulary
45
48
 
46
49
  When your output names a domain concept, use the term as defined in
47
- `docs/context/glossary.md`. Don't drift to synonyms the glossary explicitly
50
+ `.agentic-scaffold/docs/context/glossary.md`. Don't drift to synonyms the glossary explicitly
48
51
  avoids.
49
52
 
50
53
  If the concept you need isn't in the glossary yet, that's a signal — either
@@ -5,17 +5,17 @@
5
5
  ## Conventions
6
6
 
7
7
  - Keep {{issueTrackerName}} titles and descriptions short.
8
- - Put detailed implementation plans in `.scratchpad/<feature-slug>/`.
8
+ - Put detailed implementation plans in `.agentic-scaffold/.scratchpad/<feature-slug>/`.
9
9
  - Link the {{issueTrackerName}} issue from the matching scratchpad file.
10
10
  - Do not use issue comments as project memory.
11
- - Shipped work summaries live in `.history/DD.MM.YYYY/README.md`.
11
+ - Shipped work summaries live in `.agentic-scaffold/.history/DD.MM.YYYY/README.md`.
12
12
 
13
13
  ## When a skill says "publish to the issue tracker"
14
14
 
15
15
  Create or update the {{issueTrackerName}} issue, then create the matching local
16
- detail file under `.scratchpad/<feature-slug>/`.
16
+ detail file under `.agentic-scaffold/.scratchpad/<feature-slug>/`.
17
17
 
18
18
  ## When a skill says "fetch the relevant ticket"
19
19
 
20
- Read the {{issueTrackerName}} issue summary and the matching `.scratchpad/`
20
+ Read the {{issueTrackerName}} issue summary and the matching `.agentic-scaffold/.scratchpad/`
21
21
  detail file when one exists.
@@ -5,18 +5,18 @@ handing off.
5
5
 
6
6
  ## Required Steps
7
7
 
8
- If `.agents/hooks/post-session.md` exists, read and follow it instead of this
8
+ If `.agentic-scaffold/.agents/hooks/post-session.md` exists, read and follow it instead of this
9
9
  file — it contains the canonical post-session workflow.
10
10
 
11
11
  Otherwise, follow the steps below:
12
12
 
13
13
  1. Run the relevant tests.
14
14
  2. Build every touched project when a build command exists.
15
- 3. Create or update `.history/DD.MM.YYYY/README.md` with the master work title,
15
+ 3. Create or update `.agentic-scaffold/.history/DD.MM.YYYY/README.md` with the master work title,
16
16
  summary, changed files, verification, and remaining risk.
17
- 4. Re-index Markdown memory with `scripts/memory_index.py` so `.history/` is in
17
+ 4. Re-index Markdown memory with `.agentic-scaffold/scripts/memory_index.py` so `.agentic-scaffold/.history/` is in
18
18
  the SQLite vector database.
19
- 5. Update the related `.scratchpad/` status lines.
19
+ 5. Update the related `.agentic-scaffold/.scratchpad/` status lines.
20
20
  6. Create a Conventional Commit under the master work title.
21
21
  7. Push a `feature/...`, `bugfix/...`, `docs/...`, or similar branch to the
22
22
  remote.
@@ -46,5 +46,5 @@ Allowed common types: `feat`, `fix`, `docs`, `refactor`, `test`, `build`,
46
46
  ## Blockers
47
47
 
48
48
  If a step cannot run because the repo has no command, no remote, invalid auth,
49
- or missing external service, record that in `.history/` and the final response.
49
+ or missing external service, record that in `.agentic-scaffold/.history/` and the final response.
50
50
  Do not pretend the step succeeded.
@@ -17,7 +17,7 @@ existing ones.
17
17
 
18
18
  ## Full section map
19
19
 
20
- <!-- Generated by scripts/sync-context.sh -->
20
+ <!-- Generated by .agentic-scaffold/scripts/sync-context.sh -->
21
21
 
22
22
  ```text
23
23
  (populated by sync-context.sh)
@@ -6,9 +6,9 @@ Fires after a bugfix is delivered.
6
6
 
7
7
  1. Run the project's test suite to confirm the fix does not regress:
8
8
  {{#if packageManager}} `{{packageManager}} test`{{else}} `npm test`{{/if}}
9
- 2. Run `.agents/hooks/scripts/post-bugfix.sh` if it exists.
10
- 3. Update `.history/DD.MM.YYYY/README.md` with a summary of the fix.
11
- 4. Update the related `.scratchpad/` status to mark completion.
9
+ 2. Run `.agentic-scaffold/.agents/hooks/scripts/post-bugfix.sh` if it exists.
10
+ 3. Update `.agentic-scaffold/.history/DD.MM.YYYY/README.md` with a summary of the fix.
11
+ 4. Update the related `.agentic-scaffold/.scratchpad/` status to mark completion.
12
12
  5. Create a Conventional Commit under the master work title.
13
13
 
14
14
  ## When to skip
@@ -6,10 +6,10 @@ Fires after a feature is delivered by any implementation skill.
6
6
 
7
7
  1. Run the project's test suite:
8
8
  {{#if packageManager}} `{{packageManager}} test`{{else}} `npm test`{{/if}}
9
- 2. Run `.agents/hooks/scripts/post-feature.sh` if it exists.
10
- 3. Update `.history/DD.MM.YYYY/README.md` with a summary of shipped work.
11
- 4. Run `scripts/memory_index.py` to keep the vector index current.
12
- 5. Update the related `.scratchpad/` status to mark completion.
9
+ 2. Run `.agentic-scaffold/.agents/hooks/scripts/post-feature.sh` if it exists.
10
+ 3. Update `.agentic-scaffold/.history/DD.MM.YYYY/README.md` with a summary of shipped work.
11
+ 4. Run `.agentic-scaffold/scripts/memory_index.py` to keep the vector index current.
12
+ 5. Update the related `.agentic-scaffold/.scratchpad/` status to mark completion.
13
13
  6. Create a Conventional Commit under the master work title.
14
14
 
15
15
  ## When to skip
@@ -5,13 +5,13 @@ Replaces the legacy session-close workflow.
5
5
 
6
6
  ## Steps
7
7
 
8
- 1. Run `.agents/hooks/scripts/post-session.sh` if it exists.
8
+ 1. Run `.agentic-scaffold/.agents/hooks/scripts/post-session.sh` if it exists.
9
9
  2. Run all applicable post-* hooks that match the work done:
10
- - After feature work: `.agents/hooks/post-feature.md`
11
- - After bugfix work: `.agents/hooks/post-bugfix.md`
10
+ - After feature work: `.agentic-scaffold/.agents/hooks/post-feature.md`
11
+ - After bugfix work: `.agentic-scaffold/.agents/hooks/post-bugfix.md`
12
12
  3. Build every touched project when a build command exists.
13
- 4. Run `scripts/memory_index.py` so `.history/` is in the vector database.
14
- 5. Update all affected `.scratchpad/` status lines.
13
+ 4. Run `.agentic-scaffold/scripts/memory_index.py` so `.agentic-scaffold/.history/` is in the vector database.
14
+ 5. Update all affected `.agentic-scaffold/.scratchpad/` status lines.
15
15
  6. Push the feature/bugfix branch to the remote.
16
16
  7. Create a PR, review it, merge it, then delete the PR branch.
17
17
 
@@ -30,5 +30,5 @@ Allowed types: `feat`, `fix`, `docs`, `refactor`, `test`, `build`, `ci`, `chore`
30
30
  ## Blockers
31
31
 
32
32
  If a step cannot run because the repo has no command, no remote, invalid
33
- auth, or missing external service, record that in `.history/` and the final
33
+ auth, or missing external service, record that in `.agentic-scaffold/.history/` and the final
34
34
  response. Do not pretend the step succeeded.
@@ -6,10 +6,10 @@ initiates the work.
6
6
  ## Steps
7
7
 
8
8
  1. Read `BUSINESS_LOGIC.md` and any relevant ADR.
9
- 2. Read the issue ticket and matching `.scratchpad/` detail file.
9
+ 2. Read the issue ticket and matching `.agentic-scaffold/.scratchpad/` detail file.
10
10
  3. If no scratchpad detail exists and the task is complex, create one.
11
- 4. Read `docs/CODING_PRINCIPLES.md` to confirm approach.
12
- 5. Run `.agents/hooks/scripts/pre-feature.sh` if it exists.
11
+ 4. Read `.agentic-scaffold/docs/CODING_PRINCIPLES.md` to confirm approach.
12
+ 5. Run `.agentic-scaffold/.agents/hooks/scripts/pre-feature.sh` if it exists.
13
13
 
14
14
  ## When to skip
15
15
 
@@ -4,12 +4,12 @@
4
4
 
5
5
  ### Project brain
6
6
 
7
- Read `BUSINESS_LOGIC.md` first for product fundamentals, core domain concepts,
7
+ Read `.agentic-scaffold/BUSINESS_LOGIC.md` first for product fundamentals, core domain concepts,
8
8
  non-negotiable rules, and decision references. Future task plans must cite the
9
- relevant `BUSINESS_LOGIC.md` section before implementation.
9
+ relevant `.agentic-scaffold/BUSINESS_LOGIC.md` section before implementation.
10
10
 
11
11
  `CONTEXT.md` remains a generated historical mirror from the Obsidian vault. Use
12
- `docs/context/INDEX.md` to locate narrow sections when old context is needed;
12
+ `.agentic-scaffold/docs/context/INDEX.md` to locate narrow sections when old context is needed;
13
13
  do not read the whole file by default.
14
14
 
15
15
  ### Issue tracker
@@ -18,30 +18,30 @@ do not read the whole file by default.
18
18
 
19
19
  ### Work history
20
20
 
21
- Shipped work is summarized in `.history/DD.MM.YYYY/README.md`. Use separated
21
+ Shipped work is summarized in `.agentic-scaffold/.history/DD.MM.YYYY/README.md`. Use separated
22
22
  dated worklog files only; do not use issue comments as the project memory.
23
- After every successful coding session, follow `docs/agents/session-close.md`.
23
+ After every successful coding session, follow `.agentic-scaffold/docs/agents/session-close.md`.
24
24
 
25
25
  ### Agent lifecycle hooks
26
26
 
27
- Pre/post lifecycle hooks live in `.agents/hooks/`. Implementation skills
27
+ Pre/post lifecycle hooks live in `.agentic-scaffold/.agents/hooks/`. Implementation skills
28
28
  reference them automatically. Available hooks:
29
29
 
30
- - `.agents/hooks/pre-feature.md` — before implementing a feature
31
- - `.agents/hooks/post-feature.md` — after implementing a feature
32
- - `.agents/hooks/post-bugfix.md` — after fixing a bug
33
- - `.agents/hooks/post-session.md` — after a coding session (canonical
34
- post-session workflow, replaces `docs/agents/session-close.md`)
35
- - `.agents/hooks/scripts/` — executable helpers for the hooks above
30
+ - `.agentic-scaffold/.agents/hooks/pre-feature.md` — before implementing a feature
31
+ - `.agentic-scaffold/.agents/hooks/post-feature.md` — after implementing a feature
32
+ - `.agentic-scaffold/.agents/hooks/post-bugfix.md` — after fixing a bug
33
+ - `.agentic-scaffold/.agents/hooks/post-session.md` — after a coding session (canonical
34
+ post-session workflow, replaces `.agentic-scaffold/docs/agents/session-close.md`)
35
+ - `.agentic-scaffold/.agents/hooks/scripts/` — executable helpers for the hooks above
36
36
 
37
37
  ### Domain docs
38
38
 
39
- Use `BUSINESS_LOGIC.md`, `docs/`, and `docs/adr/` as tracked source material.
40
- See `docs/agents/domain.md`.
39
+ Use `.agentic-scaffold/BUSINESS_LOGIC.md`, `.agentic-scaffold/docs/`, and `.agentic-scaffold/docs/adr/` as tracked source material.
40
+ See `.agentic-scaffold/docs/agents/domain.md`.
41
41
 
42
42
  ### Coding principles
43
43
 
44
- Follow `docs/CODING_PRINCIPLES.md`: simple direct code, YAGNI, KISS, pragmatic
44
+ Follow `.agentic-scaffold/docs/CODING_PRINCIPLES.md`: simple direct code, YAGNI, KISS, pragmatic
45
45
  DRY, existing conventions, explicit boundaries, fail-fast validation, and
46
46
  focused tests.
47
47
 
@@ -63,12 +63,12 @@ Memory and utility scripts use **{{scriptLanguage}}**.
63
63
 
64
64
  ### Agent memory
65
65
 
66
- Use repo automation from `scripts/`:
66
+ Use repo automation from `.agentic-scaffold/scripts/`:
67
67
 
68
- - `scripts/memory_index.py` indexes project Markdown.
69
- - `scripts/memory_search.py` searches indexed Markdown.
70
- - `scripts/memory_bundle.py` writes a focused Markdown bundle for a task.
71
- - `scripts/sync-context.sh` syncs the generated historical `CONTEXT.md`.
68
+ - `.agentic-scaffold/scripts/memory_index.py` indexes project Markdown.
69
+ - `.agentic-scaffold/scripts/memory_search.py` searches indexed Markdown.
70
+ - `.agentic-scaffold/scripts/memory_bundle.py` writes a focused Markdown bundle for a task.
71
+ - `.agentic-scaffold/scripts/sync-context.sh` syncs the generated historical `CONTEXT.md`.
72
72
 
73
73
  Generated memory files live under `.memory/` and are gitignored.
74
74
 
@@ -83,5 +83,5 @@ Some files contain placeholder content that must be completed:
83
83
  {{/each}}
84
84
 
85
85
  To complete these, invoke the `fill-docs` skill:
86
- `.agents/skills/fill-docs/SKILL.md`
86
+ `.agentic-scaffold/.agents/skills/fill-docs/SKILL.md`
87
87
  {{/if}}
@@ -30,6 +30,6 @@ Every future implementation plan must cite:
30
30
 
31
31
  - the relevant `BUSINESS_LOGIC.md` section;
32
32
  - any relevant ADR;
33
- - any relevant `docs/` file;
34
- - the issue and matching `.scratchpad/` detail file when the work is
33
+ - any relevant `.agentic-scaffold/docs/` file;
34
+ - the issue and matching `.agentic-scaffold/.scratchpad/` detail file when the work is
35
35
  issue-backed.
@@ -4,12 +4,12 @@
4
4
 
5
5
  ### Project brain
6
6
 
7
- Read `BUSINESS_LOGIC.md` first for product fundamentals, core domain concepts,
7
+ Read `.agentic-scaffold/BUSINESS_LOGIC.md` first for product fundamentals, core domain concepts,
8
8
  non-negotiable rules, and decision references. Future task plans must cite the
9
- relevant `BUSINESS_LOGIC.md` section before implementation.
9
+ relevant `.agentic-scaffold/BUSINESS_LOGIC.md` section before implementation.
10
10
 
11
11
  `CONTEXT.md` remains a generated historical mirror from the Obsidian vault. Use
12
- `docs/context/INDEX.md` to locate narrow sections when old context is needed;
12
+ `.agentic-scaffold/docs/context/INDEX.md` to locate narrow sections when old context is needed;
13
13
  do not read the whole file by default.
14
14
 
15
15
  ### Issue tracker
@@ -18,41 +18,41 @@ do not read the whole file by default.
18
18
 
19
19
  ### Work history
20
20
 
21
- Shipped work is summarized in `.history/DD.MM.YYYY/README.md`. Use separated
21
+ Shipped work is summarized in `.agentic-scaffold/.history/DD.MM.YYYY/README.md`. Use separated
22
22
  dated worklog files only; do not use issue comments as the project memory.
23
- After every successful coding session, follow `docs/agents/session-close.md`.
23
+ After every successful coding session, follow `.agentic-scaffold/docs/agents/session-close.md`.
24
24
 
25
25
  ### Agent lifecycle hooks
26
26
 
27
- Pre/post lifecycle hooks live in `.agents/hooks/`. Implementation skills
27
+ Pre/post lifecycle hooks live in `.agentic-scaffold/.agents/hooks/`. Implementation skills
28
28
  reference them automatically. Available hooks:
29
29
 
30
- - `.agents/hooks/pre-feature.md` — before implementing a feature
31
- - `.agents/hooks/post-feature.md` — after implementing a feature
32
- - `.agents/hooks/post-bugfix.md` — after fixing a bug
33
- - `.agents/hooks/post-session.md` — after a coding session (canonical
34
- post-session workflow, replaces `docs/agents/session-close.md`)
35
- - `.agents/hooks/scripts/` — executable helpers for the hooks above
30
+ - `.agentic-scaffold/.agents/hooks/pre-feature.md` — before implementing a feature
31
+ - `.agentic-scaffold/.agents/hooks/post-feature.md` — after implementing a feature
32
+ - `.agentic-scaffold/.agents/hooks/post-bugfix.md` — after fixing a bug
33
+ - `.agentic-scaffold/.agents/hooks/post-session.md` — after a coding session (canonical
34
+ post-session workflow, replaces `.agentic-scaffold/docs/agents/session-close.md`)
35
+ - `.agentic-scaffold/.agents/hooks/scripts/` — executable helpers for the hooks above
36
36
 
37
37
  ### Domain docs
38
38
 
39
- Use `BUSINESS_LOGIC.md`, `docs/`, and `docs/adr/` as tracked source material.
40
- See `docs/agents/domain.md`.
39
+ Use `.agentic-scaffold/BUSINESS_LOGIC.md`, `.agentic-scaffold/docs/`, and `.agentic-scaffold/docs/adr/` as tracked source material.
40
+ See `.agentic-scaffold/docs/agents/domain.md`.
41
41
 
42
42
  ### Coding principles
43
43
 
44
- Follow `docs/CODING_PRINCIPLES.md`: simple direct code, YAGNI, KISS, pragmatic
44
+ Follow `.agentic-scaffold/docs/CODING_PRINCIPLES.md`: simple direct code, YAGNI, KISS, pragmatic
45
45
  DRY, existing conventions, explicit boundaries, fail-fast validation, and
46
46
  focused tests.
47
47
 
48
48
  ### Agent memory
49
49
 
50
- Use repo automation from `scripts/`:
50
+ Use repo automation from `.agentic-scaffold/scripts/`:
51
51
 
52
- - `scripts/memory_index.py` indexes project Markdown.
53
- - `scripts/memory_search.py` searches indexed Markdown.
54
- - `scripts/memory_bundle.py` writes a focused Markdown bundle for a task.
55
- - `scripts/sync-context.sh` syncs the generated historical `CONTEXT.md`.
52
+ - `.agentic-scaffold/scripts/memory_index.py` indexes project Markdown.
53
+ - `.agentic-scaffold/scripts/memory_search.py` searches indexed Markdown.
54
+ - `.agentic-scaffold/scripts/memory_bundle.py` writes a focused Markdown bundle for a task.
55
+ - `.agentic-scaffold/scripts/sync-context.sh` syncs the generated historical `CONTEXT.md`.
56
56
 
57
57
  Generated memory files live under `.memory/` and are gitignored.
58
58
 
@@ -67,5 +67,5 @@ Some files contain placeholder content that must be completed:
67
67
  {{/each}}
68
68
 
69
69
  To complete these, invoke the `fill-docs` skill:
70
- `.agents/skills/fill-docs/SKILL.md`
70
+ `.agentic-scaffold/.agents/skills/fill-docs/SKILL.md`
71
71
  {{/if}}
@@ -11,17 +11,17 @@ import sqlite3
11
11
  from pathlib import Path
12
12
 
13
13
 
14
- ROOT = Path(__file__).resolve().parents[1]
14
+ ROOT = Path(__file__).resolve().parents[2]
15
15
  DB_PATH = ROOT / ".memory" / "agent-memory.sqlite3"
16
16
  VECTOR_DIMS = 64
17
17
 
18
18
  INCLUDE_PATTERNS = (
19
- "BUSINESS_LOGIC.md",
19
+ ".agentic-scaffold/BUSINESS_LOGIC.md",
20
20
  "AGENTS.md",
21
21
  "CLAUDE.md",
22
- "docs/**/*.md",
23
- ".scratchpad/**/*.md",
24
- ".history/**/*.md",
22
+ ".agentic-scaffold/docs/**/*.md",
23
+ ".agentic-scaffold/.scratchpad/**/*.md",
24
+ ".agentic-scaffold/.history/**/*.md",
25
25
  )
26
26
 
27
27
 
@@ -9,5 +9,5 @@ Diagnose and fix a described bug.
9
9
  3. Identify the smallest root-cause fix.
10
10
  4. Add or update a regression test when practical.
11
11
  5. Run focused verification.
12
- 6. If `.agents/hooks/post-bugfix.md` exists, read and follow it.
13
- Otherwise record shipped work in `.history/DD.MM.YYYY/README.md`.
12
+ 6. If `.agentic-scaffold/.agents/hooks/post-bugfix.md` exists, read and follow it.
13
+ Otherwise record shipped work in `.agentic-scaffold/.history/DD.MM.YYYY/README.md`.
@@ -8,7 +8,7 @@ description: >
8
8
 
9
9
  # Create Hook
10
10
 
11
- Add a new agent lifecycle hook to `.agents/hooks/`. Hooks are markdown files
11
+ Add a new agent lifecycle hook to `.agentic-scaffold/.agents/hooks/`. Hooks are markdown files
12
12
  that describe what an AI agent should do at a specific point in the workflow
13
13
  (pre-feature, post-bugfix, etc.).
14
14
 
@@ -28,7 +28,7 @@ already chains to `post-feature.md` and `post-bugfix.md`.
28
28
 
29
29
  ### 2. Name and create the hook file
30
30
 
31
- Name the file `<prefix>-<name>.md` and create it at `.agents/hooks/`. Use
31
+ Name the file `<prefix>-<name>.md` and create it at `.agentic-scaffold/.agents/hooks/`. Use
32
32
  this anatomy:
33
33
 
34
34
  ```markdown
@@ -40,7 +40,7 @@ Fires <when this hook runs, e.g. "after every database migration">.
40
40
 
41
41
  1. First step the agent should take.
42
42
  2. Second step.
43
- 3. Run `.agents/hooks/scripts/<name>.sh` if it exists.
43
+ 3. Run `.agentic-scaffold/.agents/hooks/scripts/<name>.sh` if it exists.
44
44
 
45
45
  ## When to skip
46
46
 
@@ -49,7 +49,7 @@ Conditions under which the agent should silently skip this hook.
49
49
 
50
50
  ### 3. Create the optional executable script
51
51
 
52
- If the hook needs automation, create `.agents/hooks/scripts/<name>.sh`:
52
+ If the hook needs automation, create `.agentic-scaffold/.agents/hooks/scripts/<name>.sh`:
53
53
 
54
54
  ```bash
55
55
  #!/usr/bin/env bash
@@ -66,16 +66,16 @@ Add a conditional reference in every skill where the hook should fire.
66
66
  Use the existing pattern:
67
67
 
68
68
  ```markdown
69
- 4. If `.agents/hooks/<hook-name>.md` exists, read and follow it.
69
+ 4. If `.agentic-scaffold/.agents/hooks/<hook-name>.md` exists, read and follow it.
70
70
  ```
71
71
 
72
72
  Skills commonly wired to hooks:
73
73
 
74
74
  | Skill | Hook point | File |
75
75
  |-------|-----------|------|
76
- | `implement` | pre + post | `.agents/skills/implement/SKILL.md` |
77
- | `bugfix` | post | `.agents/skills/bugfix/SKILL.md` |
78
- | `tdd` | pre + post | `.agents/skills/tdd/SKILL.md` |
76
+ | `implement` | pre + post | `.agentic-scaffold/.agents/skills/implement/SKILL.md` |
77
+ | `bugfix` | post | `.agentic-scaffold/.agents/skills/bugfix/SKILL.md` |
78
+ | `tdd` | pre + post | `.agentic-scaffold/.agents/skills/tdd/SKILL.md` |
79
79
 
80
80
  ### 5. Wire into the session close chain
81
81
 
@@ -26,7 +26,7 @@ Spend disproportionate effort here. **Be aggressive. Be creative. Refuse to give
26
26
  7. **Property / fuzz loop.** If the bug is "sometimes wrong output", run 1000 random inputs and look for the failure mode.
27
27
  8. **Bisection harness.** If the bug appeared between two known states (commit, dataset, version), automate "boot at state X, check, repeat" so you can `git bisect run` it.
28
28
  9. **Differential loop.** Run the same input through old-version vs new-version (or two configs) and diff outputs.
29
- 10. **HITL bash script.** Last resort. If a human must click, drive _them_ with `scripts/hitl-loop.template.sh` so the loop is still structured. Captured output feeds back to you.
29
+ 10. **HITL bash script.** Last resort. If a human must click, drive _them_ with `.agentic-scaffold/scripts/hitl-loop.template.sh` so the loop is still structured. Captured output feeds back to you.
30
30
 
31
31
  Build the right feedback loop, and the bug is 90% fixed.
32
32
 
@@ -13,17 +13,17 @@ Search for these markers across the project:
13
13
  | Marker | File |
14
14
  |--------|------|
15
15
  | `<!-- Replace with... -->` | BUSINESS_LOGIC.md |
16
- | `<!-- Define your domain terms... -->` | docs/context/glossary.md |
17
- | `(populate as you...)` | docs/context/INDEX.md |
18
- | `Placeholder for...` | docs/product/README.md, docs/engineering/README.md |
16
+ | `<!-- Define your domain terms... -->` | .agentic-scaffold/docs/context/glossary.md |
17
+ | `(populate as you...)` | .agentic-scaffold/docs/context/INDEX.md |
18
+ | `Placeholder for...` | .agentic-scaffold/docs/product/README.md, .agentic-scaffold/docs/engineering/README.md |
19
19
 
20
20
  ### 2. Prioritize
21
21
 
22
- 1. **BUSINESS_LOGIC.md** — the project brain, read first by all agents
23
- 2. **docs/context/glossary.md** — ubiquitous language that agents use
24
- 3. **docs/product/README.md** — product spec extensions
25
- 4. **docs/engineering/README.md** — implementation conventions
26
- 5. **docs/context/INDEX.md** — navigation for historical context
22
+ 1. **.agentic-scaffold/BUSINESS_LOGIC.md** — the project brain, read first by all agents
23
+ 2. **.agentic-scaffold/docs/context/glossary.md** — ubiquitous language that agents use
24
+ 3. **.agentic-scaffold/docs/product/README.md** — product spec extensions
25
+ 4. **.agentic-scaffold/docs/engineering/README.md** — implementation conventions
26
+ 5. **.agentic-scaffold/docs/context/INDEX.md** — navigation for historical context
27
27
 
28
28
  ### 3. Interview and fill
29
29
 
@@ -1,17 +1,17 @@
1
1
  # Implement
2
2
 
3
- Use a short Linear issue plus a `.scratchpad/` detailed plan, then implement
3
+ Use a short Linear issue plus a `.agentic-scaffold/.scratchpad/` detailed plan, then implement
4
4
  when not in Plan Mode.
5
5
 
6
6
  ## Steps
7
7
 
8
8
  1. Read `BUSINESS_LOGIC.md` and relevant ADRs.
9
- 2. If `.agents/hooks/pre-feature.md` exists, read and follow it.
10
- 3. Read the Linear issue and matching `.scratchpad/` detail file.
9
+ 2. If `.agentic-scaffold/.agents/hooks/pre-feature.md` exists, read and follow it.
10
+ 3. Read the Linear issue and matching `.agentic-scaffold/.scratchpad/` detail file.
11
11
  4. If no scratchpad detail exists, create one before coding.
12
12
  5. Implement the smallest complete slice that satisfies the plan.
13
13
  6. Run focused verification.
14
- 7. If `.agents/hooks/post-feature.md` exists, read and follow it.
15
- Otherwise record shipped work in `.history/DD.MM.YYYY/README.md`.
14
+ 7. If `.agentic-scaffold/.agents/hooks/post-feature.md` exists, read and follow it.
15
+ Otherwise record shipped work in `.agentic-scaffold/.history/DD.MM.YYYY/README.md`.
16
16
 
17
- Keep Linear descriptions short. Keep detailed reasoning in `.scratchpad/`.
17
+ Keep Linear descriptions short. Keep detailed reasoning in `.agentic-scaffold/.scratchpad/`.
@@ -1,12 +1,12 @@
1
1
  # Issue
2
2
 
3
- Create a Linear issue and matching `.scratchpad/` detail file.
3
+ Create a Linear issue and matching `.agentic-scaffold/.scratchpad/` detail file.
4
4
 
5
5
  ## Steps
6
6
 
7
7
  1. Read `BUSINESS_LOGIC.md`.
8
8
  2. Create a short Linear issue title and description.
9
- 3. Create `.scratchpad/<feature-slug>/<issue-slug>.md` with context, scope,
9
+ 3. Create `.agentic-scaffold/.scratchpad/<feature-slug>/<issue-slug>.md` with context, scope,
10
10
  acceptance criteria, source references, and open questions.
11
11
  4. Link the Linear issue in the scratchpad file.
12
12
  5. Keep implementation details out of Linear unless they are essential.
@@ -5,7 +5,7 @@ Create a monthly project summary.
5
5
  ## Steps
6
6
 
7
7
  1. Read `BUSINESS_LOGIC.md`.
8
- 2. Read `.history/DD.MM.YYYY/README.md` files from the target month.
8
+ 2. Read `.agentic-scaffold/.history/DD.MM.YYYY/README.md` files from the target month.
9
9
  3. Review ADR changes from the month.
10
10
  4. Compare shipped work against roadmap and scratchpad plans.
11
11
  5. Summarize outcomes, decisions, risks, and next-month focus.
@@ -0,0 +1,28 @@
1
+ # Next
2
+
3
+ Scan work history to determine the next development task. If no clear next step emerges, enter planning mode and interview the user.
4
+
5
+ ## Steps
6
+
7
+ 1. **Scan work history**
8
+ - Read `BUSINESS_LOGIC.md` for project goals and roadmap.
9
+ - Read `CONTEXT.md` (via `.agentic-scaffold/docs/context/INDEX.md`) for active context.
10
+ - Check `.agentic-scaffold/.scratchpad/` for active or ready work items.
11
+ - Read the latest entries in `.agentic-scaffold/.history/` (most recent day directories).
12
+ - Run `git log --oneline -20` to review recent commits.
13
+ - Check open issues or PRs if an issue tracker is configured.
14
+
15
+ 2. **Identify next work**
16
+ - Look for items marked as "next", "ready", or "todo" in scratchpad files.
17
+ - Check for blocked items whose blocker may have been resolved.
18
+ - Review recent git history for incomplete or interrupted work.
19
+ - Cross-reference against the roadmap for unstarted priorities.
20
+
21
+ 3. **Decide action**
22
+ - If a clear next task is found: present it to the user with a summary of why.
23
+ - If multiple candidates: rank them by priority and ask the user to pick.
24
+ - If nothing found: enter **planning mode** — ask the user what they want to work on next, then use `/to-issues` or `/to-prd` to formalize.
25
+
26
+ 4. **Execute or plan**
27
+ - If user confirms the next task, proceed with implementation.
28
+ - If user chooses planning, guide discovery of what to build next.
@@ -6,6 +6,6 @@ Compare current work against the roadmap.
6
6
 
7
7
  1. Read `BUSINESS_LOGIC.md`.
8
8
  2. Read roadmap/backlog references in `CONTEXT.md` only through
9
- `docs/context/INDEX.md`.
10
- 3. Read `.scratchpad/` active plans and recent `.history/` entries.
9
+ `.agentic-scaffold/docs/context/INDEX.md`.
10
+ 3. Read `.agentic-scaffold/.scratchpad/` active plans and recent `.agentic-scaffold/.history/` entries.
11
11
  4. Report what is done, in progress, blocked, and next.
@@ -6,7 +6,7 @@ Create an all-time project summary.
6
6
 
7
7
  1. Read `BUSINESS_LOGIC.md`.
8
8
  2. Read `docs/adr/README.md` and accepted ADRs relevant to the summary.
9
- 3. Read `.history/**/*.md`.
10
- 4. Use `scripts/memory_search.py` for gaps.
9
+ 3. Read `.agentic-scaffold/.history/**/*.md`.
10
+ 4. Use `.agentic-scaffold/scripts/memory_search.py` for gaps.
11
11
  5. Summarize product direction, architecture, shipped work, open risks, and next
12
12
  likely work.
@@ -1,14 +1,14 @@
1
1
  # Today
2
2
 
3
- Create today's plan from the roadmap, `.scratchpad/`, `.history/`, and vector
3
+ Create today's plan from the roadmap, `.agentic-scaffold/.scratchpad/`, `.agentic-scaffold/.history/`, and vector
4
4
  memory.
5
5
 
6
6
  ## Steps
7
7
 
8
8
  1. Read `BUSINESS_LOGIC.md` first.
9
- 2. Search `.scratchpad/` for active or ready work.
10
- 3. Read the latest `.history/DD.MM.YYYY/README.md` files.
11
- 4. Run `scripts/memory_search.py` for the user's stated focus if needed.
9
+ 2. Search `.agentic-scaffold/.scratchpad/` for active or ready work.
10
+ 3. Read the latest `.agentic-scaffold/.history/DD.MM.YYYY/README.md` files.
11
+ 4. Run `.agentic-scaffold/scripts/memory_search.py` for the user's stated focus if needed.
12
12
  5. Produce a short plan for today with references to source files.
13
13
 
14
14
  Do not create issues unless the user asks.
@@ -5,6 +5,6 @@ Create a weekly project summary.
5
5
  ## Steps
6
6
 
7
7
  1. Read `BUSINESS_LOGIC.md`.
8
- 2. Read `.history/DD.MM.YYYY/README.md` files from the target week.
9
- 3. Check `.scratchpad/` for work that moved or remains blocked.
8
+ 2. Read `.agentic-scaffold/.history/DD.MM.YYYY/README.md` files from the target week.
9
+ 3. Check `.agentic-scaffold/.scratchpad/` for work that moved or remains blocked.
10
10
  4. Summarize shipped work, decisions, risks, and suggested next week focus.