projectstore-codex 0.0.1 → 0.28.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.
Files changed (185) hide show
  1. package/.codex-plugin/plugin.json +48 -0
  2. package/README.md +15 -7
  3. package/bin/projectstore-codex.mjs +88 -0
  4. package/hooks/hooks.json +59 -0
  5. package/node_modules/projectstore/.claude-plugin/marketplace.json +40 -0
  6. package/node_modules/projectstore/.claude-plugin/plugin.json +23 -0
  7. package/node_modules/projectstore/.mcp.json +14 -0
  8. package/node_modules/projectstore/AGENTS.md +26 -0
  9. package/node_modules/projectstore/LICENSE +21 -0
  10. package/node_modules/projectstore/README.md +284 -0
  11. package/node_modules/projectstore/agents/archaeologist.md +76 -0
  12. package/node_modules/projectstore/agents/clerk.md +93 -0
  13. package/node_modules/projectstore/agents/critic.md +94 -0
  14. package/node_modules/projectstore/agents/librarian.md +81 -0
  15. package/node_modules/projectstore/agents/planner.md +80 -0
  16. package/node_modules/projectstore/agents/reviewer.md +98 -0
  17. package/node_modules/projectstore/bin/projectstore.mjs +7 -0
  18. package/node_modules/projectstore/commands/adr.md +57 -0
  19. package/node_modules/projectstore/commands/agents.md +180 -0
  20. package/node_modules/projectstore/commands/bind.md +128 -0
  21. package/node_modules/projectstore/commands/codemap.md +50 -0
  22. package/node_modules/projectstore/commands/concept.md +17 -0
  23. package/node_modules/projectstore/commands/doctor.md +166 -0
  24. package/node_modules/projectstore/commands/epic.md +40 -0
  25. package/node_modules/projectstore/commands/graph.md +56 -0
  26. package/node_modules/projectstore/commands/kanban.md +40 -0
  27. package/node_modules/projectstore/commands/meeting.md +17 -0
  28. package/node_modules/projectstore/commands/reconcile.md +73 -0
  29. package/node_modules/projectstore/commands/research.md +17 -0
  30. package/node_modules/projectstore/commands/review.md +89 -0
  31. package/node_modules/projectstore/commands/runbook.md +17 -0
  32. package/node_modules/projectstore/commands/scaffold.md +23 -0
  33. package/node_modules/projectstore/commands/search.md +22 -0
  34. package/node_modules/projectstore/commands/spec.md +91 -0
  35. package/node_modules/projectstore/commands/status.md +27 -0
  36. package/node_modules/projectstore/commands/statusline.md +46 -0
  37. package/node_modules/projectstore/commands/story.md +113 -0
  38. package/node_modules/projectstore/docs/extending.md +172 -0
  39. package/node_modules/projectstore/docs/getting-started.md +133 -0
  40. package/node_modules/projectstore/docs/harnesses.md +163 -0
  41. package/node_modules/projectstore/docs/how-it-works.md +263 -0
  42. package/node_modules/projectstore/docs/images/loop-light.svg +94 -0
  43. package/node_modules/projectstore/docs/images/loop.svg +93 -0
  44. package/node_modules/projectstore/docs/images/statusline-hud.png +0 -0
  45. package/node_modules/projectstore/docs/images/team-light.svg +79 -0
  46. package/node_modules/projectstore/docs/images/team.svg +79 -0
  47. package/node_modules/projectstore/harnesses/claude-code.json +483 -0
  48. package/node_modules/projectstore/harnesses/codex.json +332 -0
  49. package/node_modules/projectstore/hooks/hooks.json +59 -0
  50. package/node_modules/projectstore/hooks/pre-compact.mjs +121 -0
  51. package/node_modules/projectstore/hooks/session-rules.mjs +63 -0
  52. package/node_modules/projectstore/hooks/session-start.mjs +301 -0
  53. package/node_modules/projectstore/hooks/session-stop.mjs +84 -0
  54. package/node_modules/projectstore/package.json +70 -0
  55. package/node_modules/projectstore/scaffold/checklists.json +88 -0
  56. package/node_modules/projectstore/scaffold/headings.json +171 -0
  57. package/node_modules/projectstore/scaffold/layouts/engineering.json +85 -0
  58. package/node_modules/projectstore/scripts/binding.mjs +165 -0
  59. package/node_modules/projectstore/scripts/build-adapters.mjs +264 -0
  60. package/node_modules/projectstore/scripts/cli.mjs +595 -0
  61. package/node_modules/projectstore/scripts/codemap.mjs +99 -0
  62. package/node_modules/projectstore/scripts/diff-refs.mjs +127 -0
  63. package/node_modules/projectstore/scripts/doctor.mjs +2127 -0
  64. package/node_modules/projectstore/scripts/draft.mjs +261 -0
  65. package/node_modules/projectstore/scripts/graph.mjs +219 -0
  66. package/node_modules/projectstore/scripts/harness.mjs +608 -0
  67. package/node_modules/projectstore/scripts/install-harness.mjs +1387 -0
  68. package/node_modules/projectstore/scripts/kanban.mjs +174 -0
  69. package/node_modules/projectstore/scripts/lib.mjs +3085 -0
  70. package/node_modules/projectstore/scripts/mcp.mjs +391 -0
  71. package/node_modules/projectstore/scripts/portable-registration.mjs +198 -0
  72. package/node_modules/projectstore/scripts/provenance.mjs +375 -0
  73. package/node_modules/projectstore/scripts/query.mjs +490 -0
  74. package/node_modules/projectstore/scripts/reconcile.mjs +422 -0
  75. package/node_modules/projectstore/scripts/statusline-launcher.mjs +141 -0
  76. package/node_modules/projectstore/scripts/statusline.mjs +253 -0
  77. package/node_modules/projectstore/scripts/story-section.mjs +209 -0
  78. package/node_modules/projectstore/scripts/surfaces.mjs +421 -0
  79. package/node_modules/projectstore/scripts/tokens.mjs +449 -0
  80. package/node_modules/projectstore/scripts/touch-session.mjs +336 -0
  81. package/node_modules/projectstore/scripts/version-guard.mjs +255 -0
  82. package/node_modules/projectstore/scripts/worktree.mjs +109 -0
  83. package/node_modules/projectstore/skills/projectstore-decision-detector/SKILL.md +40 -0
  84. package/node_modules/projectstore/skills/projectstore-peer-reviewer/SKILL.md +38 -0
  85. package/node_modules/projectstore/skills/projectstore-story-completion/SKILL.md +50 -0
  86. package/node_modules/projectstore/skills/projectstore-vault-communication/SKILL.md +96 -0
  87. package/node_modules/projectstore/templates/claude-md-block.md.tmpl +26 -0
  88. package/node_modules/projectstore/templates/de/adr.md.tmpl +67 -0
  89. package/node_modules/projectstore/templates/de/concept.md.tmpl +43 -0
  90. package/node_modules/projectstore/templates/de/epic.md.tmpl +59 -0
  91. package/node_modules/projectstore/templates/de/folder-readme.md.tmpl +14 -0
  92. package/node_modules/projectstore/templates/de/kanban.md.tmpl +36 -0
  93. package/node_modules/projectstore/templates/de/meeting.md.tmpl +38 -0
  94. package/node_modules/projectstore/templates/de/research.md.tmpl +47 -0
  95. package/node_modules/projectstore/templates/de/runbook.md.tmpl +53 -0
  96. package/node_modules/projectstore/templates/de/spec.md.tmpl +64 -0
  97. package/node_modules/projectstore/templates/de/story.md.tmpl +76 -0
  98. package/node_modules/projectstore/templates/de/strings.json +6 -0
  99. package/node_modules/projectstore/templates/en/adr.md.tmpl +67 -0
  100. package/node_modules/projectstore/templates/en/concept.md.tmpl +43 -0
  101. package/node_modules/projectstore/templates/en/epic.md.tmpl +59 -0
  102. package/node_modules/projectstore/templates/en/folder-readme.md.tmpl +14 -0
  103. package/node_modules/projectstore/templates/en/kanban.md.tmpl +36 -0
  104. package/node_modules/projectstore/templates/en/meeting.md.tmpl +38 -0
  105. package/node_modules/projectstore/templates/en/research.md.tmpl +47 -0
  106. package/node_modules/projectstore/templates/en/runbook.md.tmpl +53 -0
  107. package/node_modules/projectstore/templates/en/spec.md.tmpl +64 -0
  108. package/node_modules/projectstore/templates/en/story.md.tmpl +76 -0
  109. package/node_modules/projectstore/templates/en/strings.json +6 -0
  110. package/node_modules/projectstore/templates/es/adr.md.tmpl +67 -0
  111. package/node_modules/projectstore/templates/es/concept.md.tmpl +43 -0
  112. package/node_modules/projectstore/templates/es/epic.md.tmpl +59 -0
  113. package/node_modules/projectstore/templates/es/folder-readme.md.tmpl +14 -0
  114. package/node_modules/projectstore/templates/es/kanban.md.tmpl +36 -0
  115. package/node_modules/projectstore/templates/es/meeting.md.tmpl +38 -0
  116. package/node_modules/projectstore/templates/es/research.md.tmpl +47 -0
  117. package/node_modules/projectstore/templates/es/runbook.md.tmpl +53 -0
  118. package/node_modules/projectstore/templates/es/spec.md.tmpl +64 -0
  119. package/node_modules/projectstore/templates/es/story.md.tmpl +76 -0
  120. package/node_modules/projectstore/templates/es/strings.json +6 -0
  121. package/node_modules/projectstore/templates/fr/adr.md.tmpl +67 -0
  122. package/node_modules/projectstore/templates/fr/concept.md.tmpl +43 -0
  123. package/node_modules/projectstore/templates/fr/epic.md.tmpl +59 -0
  124. package/node_modules/projectstore/templates/fr/folder-readme.md.tmpl +14 -0
  125. package/node_modules/projectstore/templates/fr/kanban.md.tmpl +36 -0
  126. package/node_modules/projectstore/templates/fr/meeting.md.tmpl +38 -0
  127. package/node_modules/projectstore/templates/fr/research.md.tmpl +47 -0
  128. package/node_modules/projectstore/templates/fr/runbook.md.tmpl +53 -0
  129. package/node_modules/projectstore/templates/fr/spec.md.tmpl +64 -0
  130. package/node_modules/projectstore/templates/fr/story.md.tmpl +76 -0
  131. package/node_modules/projectstore/templates/fr/strings.json +6 -0
  132. package/node_modules/projectstore/templates/ru/adr.md.tmpl +67 -0
  133. package/node_modules/projectstore/templates/ru/concept.md.tmpl +43 -0
  134. package/node_modules/projectstore/templates/ru/epic.md.tmpl +59 -0
  135. package/node_modules/projectstore/templates/ru/folder-readme.md.tmpl +14 -0
  136. package/node_modules/projectstore/templates/ru/kanban.md.tmpl +36 -0
  137. package/node_modules/projectstore/templates/ru/meeting.md.tmpl +38 -0
  138. package/node_modules/projectstore/templates/ru/research.md.tmpl +47 -0
  139. package/node_modules/projectstore/templates/ru/runbook.md.tmpl +53 -0
  140. package/node_modules/projectstore/templates/ru/spec.md.tmpl +64 -0
  141. package/node_modules/projectstore/templates/ru/story.md.tmpl +76 -0
  142. package/node_modules/projectstore/templates/ru/strings.json +6 -0
  143. package/node_modules/projectstore/templates/zh/adr.md.tmpl +67 -0
  144. package/node_modules/projectstore/templates/zh/concept.md.tmpl +43 -0
  145. package/node_modules/projectstore/templates/zh/epic.md.tmpl +59 -0
  146. package/node_modules/projectstore/templates/zh/folder-readme.md.tmpl +14 -0
  147. package/node_modules/projectstore/templates/zh/kanban.md.tmpl +36 -0
  148. package/node_modules/projectstore/templates/zh/meeting.md.tmpl +38 -0
  149. package/node_modules/projectstore/templates/zh/research.md.tmpl +47 -0
  150. package/node_modules/projectstore/templates/zh/runbook.md.tmpl +53 -0
  151. package/node_modules/projectstore/templates/zh/spec.md.tmpl +64 -0
  152. package/node_modules/projectstore/templates/zh/story.md.tmpl +76 -0
  153. package/node_modules/projectstore/templates/zh/strings.json +6 -0
  154. package/package.json +36 -14
  155. package/plugin.json +53 -0
  156. package/skills/projectstore-adr/SKILL.md +76 -0
  157. package/skills/projectstore-agents/SKILL.md +50 -0
  158. package/skills/projectstore-archaeologist/SKILL.md +109 -0
  159. package/skills/projectstore-bind/SKILL.md +44 -0
  160. package/skills/projectstore-clerk/SKILL.md +126 -0
  161. package/skills/projectstore-codemap/SKILL.md +69 -0
  162. package/skills/projectstore-concept/SKILL.md +36 -0
  163. package/skills/projectstore-critic/SKILL.md +127 -0
  164. package/skills/projectstore-decision-detector/SKILL.md +59 -0
  165. package/skills/projectstore-doctor/SKILL.md +33 -0
  166. package/skills/projectstore-epic/SKILL.md +59 -0
  167. package/skills/projectstore-graph/SKILL.md +75 -0
  168. package/skills/projectstore-kanban/SKILL.md +60 -0
  169. package/skills/projectstore-librarian/SKILL.md +114 -0
  170. package/skills/projectstore-meeting/SKILL.md +36 -0
  171. package/skills/projectstore-peer-reviewer/SKILL.md +57 -0
  172. package/skills/projectstore-planner/SKILL.md +113 -0
  173. package/skills/projectstore-reconcile/SKILL.md +92 -0
  174. package/skills/projectstore-research/SKILL.md +36 -0
  175. package/skills/projectstore-review/SKILL.md +108 -0
  176. package/skills/projectstore-reviewer/SKILL.md +131 -0
  177. package/skills/projectstore-runbook/SKILL.md +36 -0
  178. package/skills/projectstore-scaffold/SKILL.md +42 -0
  179. package/skills/projectstore-search/SKILL.md +41 -0
  180. package/skills/projectstore-spec/SKILL.md +110 -0
  181. package/skills/projectstore-status/SKILL.md +47 -0
  182. package/skills/projectstore-statusline/SKILL.md +29 -0
  183. package/skills/projectstore-story/SKILL.md +132 -0
  184. package/skills/projectstore-story-completion/SKILL.md +69 -0
  185. package/skills/projectstore-vault-communication/SKILL.md +115 -0
package/package.json CHANGED
@@ -1,13 +1,16 @@
1
1
  {
2
2
  "name": "projectstore-codex",
3
- "description": "Reserved name. The package you want is `projectstore`.",
4
- "version": "0.0.1",
5
- "license": "MIT",
6
- "author": {
7
- "name": "Evgenii Konev",
8
- "email": "ekonev@smartandpoint.com",
9
- "url": "https://github.com/SmartAndPoint"
10
- },
3
+ "version": "0.28.1",
4
+ "description": "ProjectStore for Codex: portable project memory, rendered workflow skills and lifecycle hooks, with the core pinned and bundled.",
5
+ "keywords": [
6
+ "projectstore",
7
+ "installer",
8
+ "codex",
9
+ "project-management",
10
+ "adr",
11
+ "markdown",
12
+ "agentic"
13
+ ],
11
14
  "homepage": "https://github.com/SmartAndPoint/ProjectStore#readme",
12
15
  "bugs": {
13
16
  "url": "https://github.com/SmartAndPoint/ProjectStore/issues"
@@ -16,13 +19,32 @@
16
19
  "type": "git",
17
20
  "url": "git+https://github.com/SmartAndPoint/ProjectStore.git"
18
21
  },
19
- "keywords": [
20
- "projectstore",
21
- "placeholder",
22
- "reserved"
23
- ],
22
+ "license": "MIT",
23
+ "author": {
24
+ "name": "Evgenii Konev",
25
+ "email": "ekonev@smartandpoint.com",
26
+ "url": "https://github.com/SmartAndPoint"
27
+ },
28
+ "type": "module",
29
+ "engines": {
30
+ "node": ">=20.0.0"
31
+ },
32
+ "bin": {
33
+ "projectstore-codex": "bin/projectstore-codex.mjs"
34
+ },
24
35
  "files": [
25
- "README.md"
36
+ "bin/",
37
+ "README.md",
38
+ "plugin.json",
39
+ ".codex-plugin/",
40
+ "skills/",
41
+ "hooks/"
42
+ ],
43
+ "dependencies": {
44
+ "projectstore": "=0.28.1"
45
+ },
46
+ "bundleDependencies": [
47
+ "projectstore"
26
48
  ],
27
49
  "publishConfig": {
28
50
  "access": "public"
package/plugin.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
+ "name": "projectstore",
4
+ "version": "0.28.1",
5
+ "description": "Your agent runs the project through a verified loop: task → artifact (ADR / spec / epic / story) → adversarial critic → backlog → planner → reviewer → done. Plain markdown in git — any model can pick the project up tomorrow.",
6
+ "author": {
7
+ "name": "Evgenii Konev",
8
+ "email": "ekonev@smartandpoint.com",
9
+ "url": "https://github.com/SmartAndPoint"
10
+ },
11
+ "homepage": "https://github.com/SmartAndPoint/ProjectStore#readme",
12
+ "repository": "git+https://github.com/SmartAndPoint/ProjectStore.git",
13
+ "license": "MIT",
14
+ "keywords": [
15
+ "project-management",
16
+ "adr",
17
+ "epics",
18
+ "stories",
19
+ "kanban",
20
+ "obsidian",
21
+ "markdown",
22
+ "knowledge-base",
23
+ "engineering-process",
24
+ "claude-code",
25
+ "codex",
26
+ "agentic",
27
+ "ai-agents"
28
+ ],
29
+ "extensions": {
30
+ "com.openai": {
31
+ "hooks": "./hooks/hooks.json",
32
+ "interface": {
33
+ "displayName": "ProjectStore",
34
+ "shortDescription": "Versioned project memory for developer teams and agents.",
35
+ "longDescription": "Your agent runs the project through a verified loop: task → artifact (ADR / spec / epic / story) → adversarial critic → backlog → planner → reviewer → done. Plain markdown in git — any model can pick the project up tomorrow.",
36
+ "developerName": "SmartAndPoint",
37
+ "category": "Developer Tools",
38
+ "capabilities": [
39
+ "Project memory",
40
+ "Architecture decisions",
41
+ "Planning",
42
+ "Peer review"
43
+ ],
44
+ "websiteURL": "https://github.com/SmartAndPoint/ProjectStore#readme",
45
+ "defaultPrompt": [
46
+ "Show the current ProjectStore status and work in progress.",
47
+ "Capture this technical decision as a ProjectStore ADR.",
48
+ "Plan the next ProjectStore story, then review the implementation."
49
+ ]
50
+ }
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: projectstore-adr
3
+ description: "Create a new Architecture Decision Record (ADR) in the bound vault. Arguments: <title>."
4
+ ---
5
+
6
+ ## Runtime path
7
+
8
+ Resolve paths from this skill's own directory, never from the checkout or a
9
+ remembered cache path. The plugin root is two directories above this SKILL.md;
10
+ the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
11
+ any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
12
+ path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
13
+ Do not prefix the command with the assignment: a shell expands the quoted path
14
+ before that inline assignment takes effect. If the bundled core is missing, stop
15
+ and report a broken plugin install; do not fetch a different version from npm.
16
+
17
+ ## User arguments
18
+
19
+ The source command's host-substituted argument token is rendered here as
20
+ `<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
21
+ shown command, replace that token with the actual arguments from the user's
22
+ request and shell-quote values safely. Never pass the angle-bracket token
23
+ literally and never treat it as a shell variable.
24
+
25
+ You are creating a new ADR.
26
+
27
+ Steps:
28
+
29
+ 1. **Check config**: `test -f .projectstore/projectstore.json` — if missing, tell user to run `$projectstore-bind <path>` and stop.
30
+
31
+ 2. **Render draft** by running:
32
+
33
+ ```bash
34
+ node "${PROJECTSTORE_CORE_ROOT}/scripts/draft.mjs" adr "<user-arguments>"
35
+ ```
36
+
37
+ The script outputs JSON with shape `{ kind, path, content, index, collision, warnings, vars }`. Capture stdout.
38
+
39
+ 3. **Show user a preview**: print the target `path`, then the first ~30 lines of `content` in a code block. State the slug (it IS the identity — ADR-010). If `index` is non-null, print `index.line` — the exact row that will appear in the folder index (rendered by the regeneration's own rules, so it is what lands, not an approximation), unless the index step reports a failure and no row lands at all. Render every entry in `warnings` as a `⚠️` line. If `collision` is non-null, surface it as a **topic collision**: `⚠️ "<identity>" already exists as <with> — same topic, two artifacts.` Ask whether to open/extend the existing artifact, pick a genuinely different slug (a deliberate `-2` suffix is a distinct identity and stays legal), or cancel. Do not write over a collision without an explicit user decision.
40
+
41
+ 4. **Approval**: use the harness's user-input mechanism with options:
42
+ - **Yes** — write the file as-is
43
+ - **Edit before saving** — let the user describe a change; you regenerate accordingly (e.g., adjust title, status, add tags) and re-preview
44
+ - **No** — abort
45
+
46
+ This is the only gate: **Yes** covers both the artifact and its index row.
47
+ Disclose in the question that the folder's whole managed index table is
48
+ regenerated from vault state at write time, so the update may also repair
49
+ a stale row for another artifact.
50
+
51
+ 5. **Post-approval race re-check** (Layer 1 — multi-session safety): re-run `draft.mjs adr "<user-arguments>"` and re-read `collision` — a plain `test -e` cannot see normalized cross-era collisions, and another session may have created the same topic while you waited on approval. If `collision` is now non-null (or changed), show it as in step 3 and re-ask. The slug is derived from the title, so the re-render is byte-identical otherwise — never expect a "fresh number".
52
+
53
+ 6. **On Yes** (path free): use the file-writing tool to write `content` to `path`.
54
+
55
+ 7. **Index update** (only if `index` field is non-null — skip silently otherwise):
56
+ apply through the core — never the Write/file-editing tools, and do not ask again:
57
+
58
+ ```bash
59
+ node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" reconcile --write --only indexes=<index.folder>
60
+ ```
61
+
62
+ The index row is derived state: the regeneration renders it in canonical
63
+ order (date, then number/slug), replaces the file atomically, and preserves
64
+ manual prose outside the managed table. Never substitute the class-wide
65
+ `indexes` selector — that would regenerate every folder index.
66
+
67
+ The artifact is already on disk, so a failure here is a warning, never a
68
+ failed creation. Two shapes, both reported naming the folder:
69
+ - **stderr, no stdout JSON** — the named target was rejected before any
70
+ write (README absent, or its index header matches no registered form).
71
+ Suggest fixing the header (`$projectstore-doctor`) or restoring the
72
+ README; the row lands on the next reconcile.
73
+ - **JSON with a per-target `error`, nonzero exit** — an I/O failure during
74
+ the write. Suggest `$projectstore-reconcile`.
75
+
76
+ 8. **Final message**: print the file path, a reminder to fill `Context`, `Decision`, `Rationale`, and a hint to commit the new ADR if the vault is git-tracked.
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: projectstore-agents
3
+ description: "Register or remove ProjectStore's shared agents block, inspect its Codex model overlay, or configure per-role models. Arguments: <register | unregister | status | configure>."
4
+ ---
5
+
6
+ ## Runtime path
7
+
8
+ Resolve paths from this skill's own directory, never from the checkout or a
9
+ remembered cache path. The plugin root is two directories above this SKILL.md;
10
+ the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
11
+ any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
12
+ path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
13
+ Do not prefix the command with the assignment: a shell expands the quoted path
14
+ before that inline assignment takes effect. If the bundled core is missing, stop
15
+ and report a broken plugin install; do not fetch a different version from npm.
16
+
17
+ ## User arguments
18
+
19
+ The source command's host-substituted argument token is rendered here as
20
+ `<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
21
+ shown command, replace that token with the actual arguments from the user's
22
+ request and shell-quote values safely. Never pass the angle-bracket token
23
+ literally and never treat it as a shell variable.
24
+
25
+ You are managing ProjectStore's Codex agent integration. Require a bound project.
26
+
27
+ ## register / unregister
28
+
29
+ Preview the requested change and ask for explicit approval. On approval, run the
30
+ core's `install` or `uninstall` verb with `--harness codex --surface
31
+ agents_block --project "$PWD"`. Print its output verbatim. Never edit the
32
+ managed block by hand.
33
+
34
+ ## status
35
+
36
+ Run `plan --json --harness codex --surface agents_block --project "$PWD"`,
37
+ then `agents show --json --project "$PWD"`. Report the block state and each
38
+ role's resolved model and source. The active overlay path returned by the core
39
+ is authoritative.
40
+
41
+ ## configure
42
+
43
+ Ask for a default model and optional per-role model ids. Use actual Codex model
44
+ ids supplied by the user or visible in the current host; do not translate model
45
+ names from another harness. Preview the exact argv, ask for approval, then run
46
+ `agents configure --harness codex [--default <model>] [--agent
47
+ <role>=<model> ...] --project "$PWD"`. The core is the only writer. Do not pass
48
+ an effort override: per-role effort is outside this integration's current
49
+ contract. A configured model is consumed by the role-orchestration skills on
50
+ their next spawn; no restart is needed.
@@ -0,0 +1,109 @@
1
+ ---
2
+ name: projectstore-archaeologist
3
+ description: "decision archaeologist for brownfield onboarding. Invoke after binding projectstore to an EXISTING project whose vault is empty or thin. Scans the codebase + git history for decisions that were made but never written down — stack choices, architectural shapes, conventions, migration inflection points — and PROPOSES backfill ADRs/concepts with evidence (file:line, commits). Suggest-only: every proposal names the $projectstore-adr or $projectstore-concept command to run; it never writes vault files itself. Read-only, deduplicates against existing artifacts first."
4
+ ---
5
+
6
+ ## Runtime path
7
+
8
+ Resolve paths from this skill's own directory, never from the checkout or a
9
+ remembered cache path. The plugin root is two directories above this SKILL.md;
10
+ the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
11
+ any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
12
+ path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
13
+ Do not prefix the command with the assignment: a shell expands the quoted path
14
+ before that inline assignment takes effect. If the bundled core is missing, stop
15
+ and report a broken plugin install; do not fetch a different version from npm.
16
+
17
+ ## User arguments
18
+
19
+ The source command's host-substituted argument token is rendered here as
20
+ `<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
21
+ shown command, replace that token with the actual arguments from the user's
22
+ request and shell-quote values safely. Never pass the angle-bracket token
23
+ literally and never treat it as a shell variable.
24
+
25
+ ## Codex orchestration
26
+
27
+ This is a role-orchestration skill, not a native agent registration. Resolve the
28
+ role model by running:
29
+
30
+ ```bash
31
+ node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" agents model archaeologist --json --project "$PWD"
32
+ ```
33
+
34
+ Spawn a collaboration agent for the bounded task. If the result names a model,
35
+ pass that model and use an empty or bounded context fork; otherwise inherit the
36
+ current model. Do not pass a reasoning-effort override: per-role effort belongs
37
+ to a separate accepted story. Give the spawned agent the role contract below
38
+ and the exact artifact/diff it must inspect. Wait for its final result.
39
+
40
+ ## Role contract
41
+
42
+ You are a decision archaeologist running as an independent, fresh-context pass
43
+ over an existing codebase. The project just bound a projectstore vault (or its
44
+ vault is thin), and the decisions that shaped this code were made long ago —
45
+ in someone's head, a chat, a commit message — but never written down. Your job:
46
+ dig them up and propose the backfill, so the vault starts seeded instead of
47
+ empty. You PROPOSE; the human approves; the commands write.
48
+
49
+ **Batch independent evidence calls into one turn.** Every turn re-reads your
50
+ whole accumulated context, so N single-call turns cost ~N× more input than one
51
+ turn with N parallel calls — with identical evidence collected. Manifest files,
52
+ git history slices, and unrelated modules don't depend on each other — read
53
+ them together; go sequential only when a result genuinely decides what to look
54
+ at next. Quote paths with spaces (vaults often live under iCloud paths).
55
+
56
+ ## Phase 0 — Dedup against what exists
57
+
58
+ Locate the vault (`.projectstore/projectstore.json` → `vault_path`). Read `adr/` and
59
+ `concepts/` titles + frontmatter first. Never propose an artifact that already
60
+ exists — extend or supersede it instead, and say so.
61
+
62
+ **Evidence through the MCP tools when they are available.** When the projectstore MCP read tools are exposed to you (`status`, `orientation`, `search`, `get_artifact`, `neighbors`, `lineage`, `code_refs`, `doctor`), gather evidence through them: they answer from the live vault, so no freshness question arises, and an artifact's neighbourhood costs one call instead of a grep plus a read; every result is the CLI's `--json` envelope. When they are not — a host without MCP, or an install older than 0.28 — the derived views below are the fallback, under the rule that follows. `code_refs` says which artifacts already map to a path before you propose a backfill for it; `search` deduplicates a proposed decision against what the vault already records.
63
+
64
+ Derived views (kanban.md, code-map.md, graph.md) are precomputed vault indexes —
65
+ prefer them for orientation, but fall back to a frontmatter sweep when a view is
66
+ missing or its `generated_at` predates recent artifact changes (compare file mtimes; a false-stale just costs a sweep).
67
+
68
+ ## Phase 1 — Dig
69
+
70
+ Sweep these strata, citing evidence for everything (file:line, commit hashes,
71
+ `git log` output):
72
+
73
+ 1. **Stack & dependency choices** — manifests/lockfiles (package.json,
74
+ pyproject, go.mod, …): the load-bearing framework/library/storage choices and
75
+ any visible rejected alternatives (removed deps in history, migration
76
+ commits).
77
+ 2. **Architectural shapes** — how the code is actually organized (modules,
78
+ adapters, layers, services); the implicit rules ("all IO behind adapters/",
79
+ "handlers never import storage directly") that everyone obeys but nobody wrote.
80
+ 3. **Conventions with teeth** — error handling, config, naming, testing patterns
81
+ that are clearly deliberate and would confuse a newcomer if unstated.
82
+ 4. **Inflection points** — `git log` for large refactors, migrations, renames,
83
+ reverts: each usually marks a decision worth an ADR ("moved from X to Y").
84
+ 5. **Existing docs** — README/docs claims that qualify as decisions but have no
85
+ rationale recorded anywhere.
86
+
87
+ ## Phase 2 — Rank and self-audit
88
+
89
+ Keep proposals that pass: "would a newcomer make a costly mistake without this
90
+ written down?" Drop trivia (formatting, obvious defaults). For each survivor:
91
+ confidence HIGH/MED/LOW that your reconstructed rationale is the real one — at
92
+ LOW, phrase the rationale as an open question for the human to fill, don't
93
+ invent history.
94
+
95
+ ## Output — your LAST message IS the deliverable
96
+
97
+ A ranked list (highest value first, aim for 5–10, fewer if the code is simple):
98
+
99
+ - **Kind + draft title** — e.g. `ADR: "Use Postgres for primary storage"` or
100
+ `concept: "Adapter layer"`.
101
+ - **One-paragraph rationale** as best the evidence supports (marked LOW-confidence
102
+ where you are reconstructing).
103
+ - **Evidence** — file:line and/or commits.
104
+ - **The command to run** — `$projectstore-adr "<title>"` /
105
+ `$projectstore-concept "<title>"` (creation stays approval-gated there).
106
+
107
+ Close with a two-line summary: what the vault will cover after backfill, and the
108
+ biggest remaining blind spot. Read-only, suggest-only: never write vault files,
109
+ never run the creation commands yourself.
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: projectstore-bind
3
+ description: "Bind this project to an existing ProjectStore vault, or initialize and bind a new vault, using the harness-neutral core. Arguments: [vault-path]."
4
+ ---
5
+
6
+ ## Runtime path
7
+
8
+ Resolve paths from this skill's own directory, never from the checkout or a
9
+ remembered cache path. The plugin root is two directories above this SKILL.md;
10
+ the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
11
+ any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
12
+ path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
13
+ Do not prefix the command with the assignment: a shell expands the quoted path
14
+ before that inline assignment takes effect. If the bundled core is missing, stop
15
+ and report a broken plugin install; do not fetch a different version from npm.
16
+
17
+ ## User arguments
18
+
19
+ The source command's host-substituted argument token is rendered here as
20
+ `<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
21
+ shown command, replace that token with the actual arguments from the user's
22
+ request and shell-quote values safely. Never pass the angle-bracket token
23
+ literally and never treat it as a shell variable.
24
+
25
+ Bind the current project through the core; never write the binding by
26
+ hand.
27
+
28
+ 1. Resolve the requested vault path. If it exists, use `bind`; if the user
29
+ explicitly asks to create it, use `init`. Ask for layout and language only
30
+ when the user has not supplied them.
31
+ 2. Show the resolved project, vault, verb, layout and language. Ask for explicit
32
+ approval. Naming the vault is the core's non-interactive confirmation.
33
+ 3. Run `node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" <bind|init>
34
+ "<vault-path>" --layout <layout> --language <language> --project "$PWD"
35
+ --json` and report the result. Use `--rebind` only when the user explicitly
36
+ approved replacing an existing binding.
37
+ 4. Run `status --json` to verify the stored path and policies. Offer
38
+ `$projectstore-scaffold` only for a newly initialized empty vault.
39
+
40
+ Codex plugin updates are performed with the `projectstore-codex upgrade`
41
+ installer command; this skill never sends the user to another harness's plugin
42
+ UI. Codex has no ProjectStore status-line surface, so binding does not offer or
43
+ write one. Model choices, when requested, go through `$projectstore-agents
44
+ configure` and the Codex overlay.
@@ -0,0 +1,126 @@
1
+ ---
2
+ name: projectstore-clerk
3
+ description: "write ceremony executor for projectstore vaults — the roster's sole write-capable agent, and its least autonomous. NEVER auto-delegate to it; it is invoked only by projectstore command flows, only AFTER an approval gate has passed, with content already approved verbatim. It copies an approved scratch file to its target and runs the pinned ceremony (race re-check, reconcile, doctor, byte-fidelity proof). It never composes artifact content, never decides whether or where to write, and never interacts with the user."
4
+ ---
5
+
6
+ ## Runtime path
7
+
8
+ Resolve paths from this skill's own directory, never from the checkout or a
9
+ remembered cache path. The plugin root is two directories above this SKILL.md;
10
+ the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
11
+ any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
12
+ path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
13
+ Do not prefix the command with the assignment: a shell expands the quoted path
14
+ before that inline assignment takes effect. If the bundled core is missing, stop
15
+ and report a broken plugin install; do not fetch a different version from npm.
16
+
17
+ ## User arguments
18
+
19
+ The source command's host-substituted argument token is rendered here as
20
+ `<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
21
+ shown command, replace that token with the actual arguments from the user's
22
+ request and shell-quote values safely. Never pass the angle-bracket token
23
+ literally and never treat it as a shell variable.
24
+
25
+ ## Codex orchestration
26
+
27
+ This is a role-orchestration skill, not a native agent registration. Resolve the
28
+ role model by running:
29
+
30
+ ```bash
31
+ node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" agents model clerk --json --project "$PWD"
32
+ ```
33
+
34
+ Spawn a collaboration agent for the bounded task. If the result names a model,
35
+ pass that model and use an empty or bounded context fork; otherwise inherit the
36
+ current model. Do not pass a reasoning-effort override: per-role effort belongs
37
+ to a separate accepted story. Give the spawned agent the role contract below
38
+ and the exact artifact/diff it must inspect. Wait for its final result.
39
+
40
+ ## Role contract
41
+
42
+ You are the projectstore clerk: the executor of an already-approved vault
43
+ write. The thinking happened before you — the session's main agent composed the
44
+ content, a person approved it at the gate. Your job is a pinned procedure whose
45
+ value is that it is the same every time. You add nothing, fix nothing, improve
46
+ nothing.
47
+
48
+ ## The three refusals (they define this role)
49
+
50
+ 1. **You never compose artifact content.** The content you handle was approved
51
+ byte-for-byte. If it looks wrong to you — a typo, odd whitespace, a claim you
52
+ doubt — it ships as is; note the observation in the report's `notes` field,
53
+ never in the file.
54
+ 2. **You never decide whether or where to write.** Target path, scratch path,
55
+ re-check invocation and derived targets all arrive in your instructions. If
56
+ an input your entry shape requires is missing or ambiguous, stop and report;
57
+ do not infer it.
58
+ 3. **You never interact with the user.** No questions, no confirmations. Your
59
+ entire output is the report JSON.
60
+
61
+ ## Scope
62
+
63
+ The bound vault, the vault's git metadata (its common git directory, lock, and
64
+ worktrees), and the plugin's compute scripts. Nothing else. You do not read the
65
+ session registry, tokens, or environment credentials; you do not touch the
66
+ project's source tree.
67
+
68
+ ## Entry shapes — your instructions name exactly one
69
+
70
+ **Shape A — apply an approved artifact.** Inputs: scratch path, target path,
71
+ the exact re-check invocation with its baseline, derived targets. Steps 1-5.
72
+
73
+ **Shape B — apply derived views.** Inputs: the selector list, and the doctor
74
+ pre-state (see step 4). Steps 3-4 only; `path`, `written` and `verbatim` are
75
+ `null` in the report — there is no artifact and no scratch in this shape.
76
+
77
+ ## The procedure
78
+
79
+ Execute in order for your shape. On ANY divergence — a failed re-check, a
80
+ byte mismatch, a new doctor finding, a script error — STOP at that step and
81
+ report what you saw. Never resolve a surprise on your own; a stopped ceremony
82
+ is a correct outcome.
83
+
84
+ 1. **Race re-check** (shape A). Run the exact invocation you were given —
85
+ typically `story-section.mjs <gate> "<target>" --check <baseline>` — and
86
+ require `check.match: true` in its JSON. Anything else → stop, report the
87
+ JSON verbatim. **Resume rule**: this gate is valid only BEFORE the copy;
88
+ once step 2 has run, the target legitimately differs from the baseline, so a
89
+ resume after step 2 starts at step 3, and step 5's diff becomes the gate.
90
+ 2. **Copy, never re-emit** (shape A). `cp <scratch> <target>` via Bash. The
91
+ file-writing tool is NEVER used on the target path — content that passes through
92
+ you can be altered by you, and this procedure exists to make that
93
+ impossible. (Write is in your tool list because the covering ADR mandates
94
+ it for the roster's writer; this procedure has no use for it on artifacts.)
95
+ 3. **Reconcile.** `node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" reconcile --write
96
+ --only <targets>` with exactly the targets you were given. In shape B this
97
+ is the whole job: report reconcile's own per-target
98
+ `{path, changed, written, error?}` objects, not just names.
99
+ 4. **Verify.** `node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" doctor --vault` (exit 1 means findings, not a failed check — read them). Your
100
+ instructions include the **pre-state** — doctor's summary line captured just
101
+ before you were spawned. Stop only on a finding that names your target path
102
+ or one of your reconciled targets and was not in that pre-state; everything
103
+ else is not yours to judge — put the fresh summary line in the report
104
+ verbatim and continue.
105
+ 5. **Prove fidelity** (shape A). `diff <target> <scratch>` via Bash. Empty
106
+ diff → `verbatim: true`. Any output → stop, report it; do not re-copy on
107
+ your own.
108
+
109
+ ## The report (your entire final message)
110
+
111
+ ```json
112
+ {
113
+ "shape": "A" | "B",
114
+ "path": "<target>" | null,
115
+ "written": true | false | null,
116
+ "verbatim": true | false | null,
117
+ "reconciled": [{"path": "...", "changed": true, "written": true}, ...] | null,
118
+ "doctor": "<doctor's summary line, verbatim>",
119
+ "stopped_at": null | "<step name>: <what diverged>",
120
+ "notes": null | "<observations — never acted on>"
121
+ }
122
+ ```
123
+
124
+ Completed steps stay listed even when a later step stops — the resume contract
125
+ depends on knowing exactly how far you got. The copy is idempotent; reconcile
126
+ and doctor are re-runnable.
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: projectstore-codemap
3
+ description: "Regenerate code-map.md (epic ↔ code overview) from frontmatter code_refs, or set an artifact's code_refs. The command is the write path — planner/reviewer only propose refs. Arguments: [set <epic-id | story-path> <ref> [ref…]]."
4
+ ---
5
+
6
+ ## Runtime path
7
+
8
+ Resolve paths from this skill's own directory, never from the checkout or a
9
+ remembered cache path. The plugin root is two directories above this SKILL.md;
10
+ the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
11
+ any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
12
+ path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
13
+ Do not prefix the command with the assignment: a shell expands the quoted path
14
+ before that inline assignment takes effect. If the bundled core is missing, stop
15
+ and report a broken plugin install; do not fetch a different version from npm.
16
+
17
+ ## User arguments
18
+
19
+ The source command's host-substituted argument token is rendered here as
20
+ `<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
21
+ shown command, replace that token with the actual arguments from the user's
22
+ request and shell-quote values safely. Never pass the angle-bracket token
23
+ literally and never treat it as a shell variable.
24
+
25
+ You are managing the epic↔code mapping (ADR-004).
26
+
27
+ ## Bare `codemap` — regenerate the view
28
+
29
+ 1. **Check config**; stop if missing.
30
+ 2. Compute (read-only, the unified reconcile path):
31
+
32
+ ```bash
33
+ node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" reconcile --only codemap
34
+ ```
35
+
36
+ The `codemap` entry carries `{ path, changed, content?, stats }`.
37
+ 3. Show `stats` (epics, epics_with_refs, story_rows) + first ~15 lines of
38
+ `content` when changed.
39
+ 4. **Approval** via the harness's user-input mechanism: Yes / No (disclose: content is recomputed
40
+ from frontmatter at write time; the preview is advisory). On Yes → apply
41
+ through the core, never the file-writing tool:
42
+
43
+ ```bash
44
+ node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" reconcile --write --only codemap
45
+ ```
46
+
47
+ Explicit selection writes the map even on a vault with no `code_refs` yet.
48
+ Render the report's `codemap` entry; nonzero exit — surface the `error`.
49
+ 5. Suggest: "Refs are set via `codemap set`; reviewer proposes updates at story completion."
50
+
51
+ ## `codemap set <target> <ref…>` — update frontmatter (the write path)
52
+
53
+ 1. **Resolve target**: an epic id (`PS-AGENTS` → `epics/PS-AGENTS/epic.md`) or a
54
+ story path relative to the vault. Stop with a clear error if not found.
55
+ 2. **Read the file**, show current `code_refs` vs proposed (`["src/auth/", …]`).
56
+ Validate: repo-relative paths/globs; warn (don't block) on paths that don't
57
+ exist yet — planning-time refs are legitimate (doctor is status-aware).
58
+ 3. **Approval** via the harness's user-input mechanism (diff preview). On Yes → Edit the frontmatter
59
+ `code_refs` line only; also bump `updated:` if the artifact has it.
60
+ 4. **Offer regen**: "Refresh the view? (runs bare `codemap`)" — on Yes, run the
61
+ bare flow above.
62
+
63
+ ## Notes
64
+
65
+ - Story `code_refs` = files that story touched; epic `code_refs` = the epic's
66
+ overall footprint. Doctor checks story ⊆ epic and path existence
67
+ (status-aware). `reconcile` also regenerates the view.
68
+ - Never write refs without approval; never let an agent edit them directly —
69
+ planner/reviewer *propose*, this command *writes*.
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: projectstore-concept
3
+ description: "Create a new concept note (definition, mental model, glossary entry). Arguments: <title>."
4
+ ---
5
+
6
+ ## Runtime path
7
+
8
+ Resolve paths from this skill's own directory, never from the checkout or a
9
+ remembered cache path. The plugin root is two directories above this SKILL.md;
10
+ the bundled core is `<plugin-root>/node_modules/projectstore`. Before running
11
+ any ProjectStore command, export `PROJECTSTORE_CORE_ROOT` to that bundled-core
12
+ path in its own shell statement, then use `node "${PROJECTSTORE_CORE_ROOT}/…"`.
13
+ Do not prefix the command with the assignment: a shell expands the quoted path
14
+ before that inline assignment takes effect. If the bundled core is missing, stop
15
+ and report a broken plugin install; do not fetch a different version from npm.
16
+
17
+ ## User arguments
18
+
19
+ The source command's host-substituted argument token is rendered here as
20
+ `<user-arguments>` (or `<user-arguments-without-fix>`). Before executing a
21
+ shown command, replace that token with the actual arguments from the user's
22
+ request and shell-quote values safely. Never pass the angle-bracket token
23
+ literally and never treat it as a shell variable.
24
+
25
+ You are creating a concept note.
26
+
27
+ Steps:
28
+
29
+ 1. Check config; stop if missing.
30
+ 2. Run `node "${PROJECTSTORE_CORE_ROOT}/scripts/draft.mjs" concept "<user-arguments>"`.
31
+ 3. Preview path + first ~15 lines. When `index` is non-null, print `index.line` too — the exact row that will appear in the folder index, unless the index step reports a failure and no row lands at all.
32
+ 4. the harness's user-input mechanism: Yes / Edit / No. This is the only gate: **Yes** covers the artifact and its index row. Disclose in the question that the folder's whole managed index table is regenerated from vault state at write time, so the update may also repair a stale row for another artifact.
33
+ 5. Pre-write race check (Layer 1): `test -e "<path>"`. If exists, ask: **Overwrite**, **Use new slug** (`-2`), or **Cancel**.
34
+ 6. On Yes (path free or overwrite confirmed): Write file.
35
+ 7. Index row, if `index` is non-null — apply through the core, never Write/Edit, no second gate (step 4 covers it): `node "${PROJECTSTORE_CORE_ROOT}/bin/projectstore.mjs" reconcile --write --only indexes=<index.folder>`. The row is derived state: canonical order, atomic write, manual prose preserved. The file is already on disk, so a nonzero exit is a warning naming the folder (stderr with no JSON = rejected before any write, fix the header or restore the README; `error` in JSON = I/O failure, suggest `$projectstore-reconcile`), never a failed creation.
36
+ 8. Suggest: "Define `What is it` first, then `How it works`. Link from ADRs/research that reference this concept."