mishkan-harness 0.1.0

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 (186) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +205 -0
  3. package/bin/mishkan.js +221 -0
  4. package/docs/design/MISHKAN_agent_aliases.md +140 -0
  5. package/docs/design/MISHKAN_decisions.md +172 -0
  6. package/docs/design/MISHKAN_harness_design.md +820 -0
  7. package/docs/design/MISHKAN_ontology.md +87 -0
  8. package/docs/design/MISHKAN_token_optimisation.md +181 -0
  9. package/docs/engineer/README.md +37 -0
  10. package/docs/engineer/profile.example.md +79 -0
  11. package/docs/usage/01-installation.md +178 -0
  12. package/docs/usage/02-project-init.md +151 -0
  13. package/docs/usage/03-orchestration.md +218 -0
  14. package/docs/usage/04-memory-layer.md +201 -0
  15. package/docs/usage/05-selective-ingest.md +177 -0
  16. package/docs/usage/06-llm-providers.md +195 -0
  17. package/docs/usage/07-troubleshooting.md +316 -0
  18. package/docs/usage/08-glossary.md +154 -0
  19. package/docs/usage/09-workflows.md +123 -0
  20. package/docs/usage/README.md +77 -0
  21. package/package.json +43 -0
  22. package/payload/install/settings.hooks.json +47 -0
  23. package/payload/mishkan/AGENT_SPEC.md +154 -0
  24. package/payload/mishkan/agents/ahikam.md +58 -0
  25. package/payload/mishkan/agents/aholiab.md +68 -0
  26. package/payload/mishkan/agents/asaph.md +73 -0
  27. package/payload/mishkan/agents/baruch.md +88 -0
  28. package/payload/mishkan/agents/benaiah.md +76 -0
  29. package/payload/mishkan/agents/bezalel.md +83 -0
  30. package/payload/mishkan/agents/caleb.md +74 -0
  31. package/payload/mishkan/agents/deborah.md +63 -0
  32. package/payload/mishkan/agents/elasah.md +58 -0
  33. package/payload/mishkan/agents/eliashib.md +68 -0
  34. package/payload/mishkan/agents/ezra.md +69 -0
  35. package/payload/mishkan/agents/hanun.md +64 -0
  36. package/payload/mishkan/agents/hiram.md +68 -0
  37. package/payload/mishkan/agents/hizkiah.md +76 -0
  38. package/payload/mishkan/agents/huldah.md +59 -0
  39. package/payload/mishkan/agents/huram.md +66 -0
  40. package/payload/mishkan/agents/hushai.md +59 -0
  41. package/payload/mishkan/agents/igal.md +58 -0
  42. package/payload/mishkan/agents/ira.md +86 -0
  43. package/payload/mishkan/agents/jahaziel.md +71 -0
  44. package/payload/mishkan/agents/jakin.md +66 -0
  45. package/payload/mishkan/agents/jehonathan.md +62 -0
  46. package/payload/mishkan/agents/jehoshaphat.md +68 -0
  47. package/payload/mishkan/agents/joab.md +71 -0
  48. package/payload/mishkan/agents/joah.md +62 -0
  49. package/payload/mishkan/agents/maaseiah.md +61 -0
  50. package/payload/mishkan/agents/meremoth.md +65 -0
  51. package/payload/mishkan/agents/meshullam.md +67 -0
  52. package/payload/mishkan/agents/nathan.md +70 -0
  53. package/payload/mishkan/agents/nehemiah.md +93 -0
  54. package/payload/mishkan/agents/obed.md +60 -0
  55. package/payload/mishkan/agents/oholiab.md +67 -0
  56. package/payload/mishkan/agents/palal.md +63 -0
  57. package/payload/mishkan/agents/phinehas.md +73 -0
  58. package/payload/mishkan/agents/rehum.md +60 -0
  59. package/payload/mishkan/agents/salma.md +69 -0
  60. package/payload/mishkan/agents/seraiah.md +73 -0
  61. package/payload/mishkan/agents/shallum.md +66 -0
  62. package/payload/mishkan/agents/shaphan.md +64 -0
  63. package/payload/mishkan/agents/shemaiah.md +67 -0
  64. package/payload/mishkan/agents/shevna.md +58 -0
  65. package/payload/mishkan/agents/uriah.md +70 -0
  66. package/payload/mishkan/agents/zaccur.md +58 -0
  67. package/payload/mishkan/agents/zadok.md +67 -0
  68. package/payload/mishkan/agents/zerubbabel.md +69 -0
  69. package/payload/mishkan/cognee/.env.curated.example +61 -0
  70. package/payload/mishkan/cognee/.env.example +165 -0
  71. package/payload/mishkan/cognee/Dockerfile +50 -0
  72. package/payload/mishkan/cognee/README.md +129 -0
  73. package/payload/mishkan/cognee/docker-compose.curated-ui.yml +61 -0
  74. package/payload/mishkan/cognee/docker-compose.curated.yml +85 -0
  75. package/payload/mishkan/cognee/docker-compose.hardening.yml +16 -0
  76. package/payload/mishkan/cognee/docker-compose.selfhosted.yml +114 -0
  77. package/payload/mishkan/cognee/docker-compose.ui.yml +70 -0
  78. package/payload/mishkan/cognee/docker-compose.yml +71 -0
  79. package/payload/mishkan/cognee/ingest-curated.py +92 -0
  80. package/payload/mishkan/commands/dep-audit.md +24 -0
  81. package/payload/mishkan/commands/mishkan-init.md +25 -0
  82. package/payload/mishkan/commands/mishkan-resume.md +21 -0
  83. package/payload/mishkan/commands/promote.md +19 -0
  84. package/payload/mishkan/commands/sefer-pull.md +19 -0
  85. package/payload/mishkan/commands/sprint-close.md +21 -0
  86. package/payload/mishkan/config/curated-library.yaml +113 -0
  87. package/payload/mishkan/config/improvement-queries.md +29 -0
  88. package/payload/mishkan/config/model-routing.yaml +87 -0
  89. package/payload/mishkan/config/projects.yaml +38 -0
  90. package/payload/mishkan/evals/baruch/README.md +93 -0
  91. package/payload/mishkan/evals/baruch/fixtures/invalid/bad-outcome-enum.json +15 -0
  92. package/payload/mishkan/evals/baruch/fixtures/invalid/bad-sprint-pattern.json +15 -0
  93. package/payload/mishkan/evals/baruch/fixtures/invalid/bad-trigger-enum.json +15 -0
  94. package/payload/mishkan/evals/baruch/fixtures/invalid/malformed-json.json +7 -0
  95. package/payload/mishkan/evals/baruch/fixtures/invalid/missing-required-field.json +14 -0
  96. package/payload/mishkan/evals/baruch/fixtures/valid/blocked-vendor.json +15 -0
  97. package/payload/mishkan/evals/baruch/fixtures/valid/curated-shortcircuit.json +15 -0
  98. package/payload/mishkan/evals/baruch/fixtures/valid/partial-no-write.json +14 -0
  99. package/payload/mishkan/evals/baruch/fixtures/valid/resolved-cross-harness.json +15 -0
  100. package/payload/mishkan/evals/baruch/golden_case/expected.yaml +35 -0
  101. package/payload/mishkan/evals/baruch/golden_case/input.yaml +47 -0
  102. package/payload/mishkan/evals/baruch/golden_case/produced.json +15 -0
  103. package/payload/mishkan/evals/baruch/run.sh +129 -0
  104. package/payload/mishkan/hooks/model-route.py +96 -0
  105. package/payload/mishkan/hooks/post-tool-observe.sh +45 -0
  106. package/payload/mishkan/hooks/pre-tool-security.sh +150 -0
  107. package/payload/mishkan/hooks/session-start.sh +20 -0
  108. package/payload/mishkan/hooks/stop-reporter.sh +29 -0
  109. package/payload/mishkan/ontology.md +87 -0
  110. package/payload/mishkan/rules/backend/yasad.md +23 -0
  111. package/payload/mishkan/rules/common/dependencies.md +53 -0
  112. package/payload/mishkan/rules/common/quality.md +16 -0
  113. package/payload/mishkan/rules/common/security.md +20 -0
  114. package/payload/mishkan/rules/documentation/sefer.md +19 -0
  115. package/payload/mishkan/rules/frontend/panim.md +21 -0
  116. package/payload/mishkan/rules/infrastructure/migdal.md +22 -0
  117. package/payload/mishkan/scripts/dependency-audit.sh +171 -0
  118. package/payload/mishkan/scripts/ensure-curated-box.sh +66 -0
  119. package/payload/mishkan/scripts/mishkan-ingest.sh +92 -0
  120. package/payload/mishkan/scripts/observability-aggregate.sh +57 -0
  121. package/payload/mishkan/scripts/seed-curated-library.sh +62 -0
  122. package/payload/mishkan/scripts/sync-profile.sh +65 -0
  123. package/payload/mishkan/scripts/validate-research-log.sh +108 -0
  124. package/payload/mishkan/skills/asaph-a11y-seo-craft/SKILL.md +289 -0
  125. package/payload/mishkan/skills/baruch-research-reporting-craft/SKILL.md +460 -0
  126. package/payload/mishkan/skills/benaiah-devsecops-craft/SKILL.md +329 -0
  127. package/payload/mishkan/skills/bezalel-cto-craft/SKILL.md +391 -0
  128. package/payload/mishkan/skills/caleb-web-research-craft/SKILL.md +306 -0
  129. package/payload/mishkan/skills/cognee-promote/SKILL.md +40 -0
  130. package/payload/mishkan/skills/cognee-quickstart/SKILL.md +66 -0
  131. package/payload/mishkan/skills/context-compress/SKILL.md +36 -0
  132. package/payload/mishkan/skills/deborah-ux-craft/SKILL.md +295 -0
  133. package/payload/mishkan/skills/dependency-audit/SKILL.md +59 -0
  134. package/payload/mishkan/skills/dependency-vetting/SKILL.md +59 -0
  135. package/payload/mishkan/skills/documentation-craft/SKILL.md +468 -0
  136. package/payload/mishkan/skills/ezra-research-formulation-craft/SKILL.md +319 -0
  137. package/payload/mishkan/skills/hanun-observability-craft/SKILL.md +312 -0
  138. package/payload/mishkan/skills/hiram-ui-craft/SKILL.md +334 -0
  139. package/payload/mishkan/skills/hizkiah-implementation-craft/SKILL.md +701 -0
  140. package/payload/mishkan/skills/hushai-security-advisor-craft/SKILL.md +282 -0
  141. package/payload/mishkan/skills/ira-code-security-craft/SKILL.md +553 -0
  142. package/payload/mishkan/skills/jakin-intent-clarification-craft/SKILL.md +299 -0
  143. package/payload/mishkan/skills/jehonathan-publication-craft/SKILL.md +262 -0
  144. package/payload/mishkan/skills/joab-app-security-craft/SKILL.md +266 -0
  145. package/payload/mishkan/skills/meremoth-devops-craft/SKILL.md +298 -0
  146. package/payload/mishkan/skills/meshullam-infra-design-craft/SKILL.md +302 -0
  147. package/payload/mishkan/skills/mishkan-ingest/SKILL.md +65 -0
  148. package/payload/mishkan/skills/mishkan-init/SKILL.md +65 -0
  149. package/payload/mishkan/skills/nathan-architecture-craft/SKILL.md +547 -0
  150. package/payload/mishkan/skills/nehemiah-pm-craft/SKILL.md +484 -0
  151. package/payload/mishkan/skills/obed-asset-pipeline-craft/SKILL.md +286 -0
  152. package/payload/mishkan/skills/oholiab-design-system-craft/SKILL.md +334 -0
  153. package/payload/mishkan/skills/palal-systems-craft/SKILL.md +281 -0
  154. package/payload/mishkan/skills/qa-evaluation-craft/SKILL.md +406 -0
  155. package/payload/mishkan/skills/rehum-sre-advisor-craft/SKILL.md +228 -0
  156. package/payload/mishkan/skills/reporter-discipline-craft/SKILL.md +351 -0
  157. package/payload/mishkan/skills/research-pipeline/SKILL.md +55 -0
  158. package/payload/mishkan/skills/salma-frontend-implementation-craft/SKILL.md +369 -0
  159. package/payload/mishkan/skills/sefer-pull/SKILL.md +37 -0
  160. package/payload/mishkan/skills/shallum-database-craft/SKILL.md +347 -0
  161. package/payload/mishkan/skills/shaphan-summarisation-craft/SKILL.md +271 -0
  162. package/payload/mishkan/skills/shemaiah-evaluation-craft/SKILL.md +342 -0
  163. package/payload/mishkan/skills/sprint-report/SKILL.md +28 -0
  164. package/payload/mishkan/skills/team-lead-craft/SKILL.md +457 -0
  165. package/payload/mishkan/skills/zadok-contract-craft/SKILL.md +520 -0
  166. package/payload/mishkan/templates/case-node.schema.json +22 -0
  167. package/payload/mishkan/templates/mcp.json +22 -0
  168. package/payload/mishkan/templates/observability-log.schema.json +24 -0
  169. package/payload/mishkan/templates/project-CLAUDE.md +47 -0
  170. package/payload/mishkan/templates/research-log.schema.json +40 -0
  171. package/payload/mishkan/templates/settings.json +12 -0
  172. package/payload/mishkan/templates/settings.local.json +6 -0
  173. package/payload/mishkan/templates/sprint-state.schema.json +47 -0
  174. package/payload/mishkan/templates/team-report.schema.json +50 -0
  175. package/payload/mishkan/templates/user-CLAUDE.md +62 -0
  176. package/payload/mishkan/workflows/README.md +88 -0
  177. package/payload/mishkan/workflows/mishkan-architecture-panel.js +156 -0
  178. package/payload/mishkan/workflows/mishkan-codebase-audit.js +188 -0
  179. package/payload/mishkan/workflows/mishkan-deep-research.js +251 -0
  180. package/payload/mishkan/workflows/mishkan-init.js +156 -0
  181. package/payload/mishkan/workflows/mishkan-migration-wave.js +180 -0
  182. package/payload/mishkan/workflows/mishkan-release-readiness.js +163 -0
  183. package/payload/mishkan/workflows/mishkan-sprint-close.js +112 -0
  184. package/payload/user/CLAUDE.md +62 -0
  185. package/payload/user/rules/engineer-standards.md +66 -0
  186. package/payload/user/rules/y4nn-standards.md +167 -0
@@ -0,0 +1,172 @@
1
+ # MISHKAN — Build Decisions
2
+
3
+ Decisions made at Phase 0 that govern the entire build. Each is locked unless
4
+ explicitly revisited with a dated entry below.
5
+
6
+ ---
7
+
8
+ ## D-001 — Cognee deployment: Local Docker
9
+
10
+ **Decision:** Cognee runs as a containerised service under
11
+ `~/.claude/mishkan/cognee/`, managed by Docker Compose.
12
+
13
+ **Rationale:** Aligns with the existing infrastructure discipline — everything
14
+ else runs through Docker Compose with multi-environment overlays, SOPS-managed
15
+ secrets, and hardening overlays. The knowledge graph stays local; no external
16
+ account or billing surface. Fastest install.
17
+
18
+ **Implications:**
19
+ - `.mcp.json` points the Cognee MCP at the local containerised endpoint.
20
+ - Secrets (DB password, API keys if any) managed via SOPS, never plaintext.
21
+ - A hardening overlay is applied on every container recreate.
22
+ - Backups are local; no cloud egress.
23
+
24
+ ---
25
+
26
+ ## D-002 — Model backend: Claude Code models only
27
+
28
+ **Decision:** Every agent runs on a Claude model tier. There is no local model
29
+ runtime and no local-model MCP wrapper.
30
+
31
+ **Rationale:** The target is Claude Code's native models. Introducing a local
32
+ runtime (Ollama / LM Studio / Docker Model Runner / llama.cpp) would add a whole
33
+ subsystem — an MCP wrapper, runtime health-checks, fallback logic, per-agent
34
+ runtime selection — for no benefit given the target. Removing it simplifies the
35
+ build materially.
36
+
37
+ **Implications:**
38
+ - Three tiers only: Opus, Sonnet, Haiku.
39
+ - **Opus (9):** Nehemiah, Bezalel, all Team Leads, Jehonathan.
40
+ - **Sonnet (22):** every agent that **writes code/config into the codebase**
41
+ (precision matters on Y4NN's code) + senior specialists + research
42
+ clarify/formulate/research. Includes all implementation specialists —
43
+ Hizkiah, Salma, Hiram, Obed, Asaph, Palal, Meremoth, Hanun — plus Nathan,
44
+ Zadok, Shallum, Ira, Benaiah, Joab, Hushai, Oholiab, Meshullam, Seraiah,
45
+ Joah, Jakin, Ezra, Caleb.
46
+ - **Haiku (14):** agents that do **not** write code — QA (Uriah, Jahaziel),
47
+ all Team Reporters, pure advisors (Deborah, Rehum), Sefer team-layer docs
48
+ (Shevna), research summarise/evaluate/report (Shaphan, Shemaiah, Baruch).
49
+
50
+ **Amendment 2026-05-27:** original split put implementation specialists on
51
+ Haiku for cost. Revised on Y4NN's preference — Sonnet writes his code more
52
+ precisely. Haiku retained only where no code is written (evaluate/collect/advise).
53
+ - Tier declared per-agent in frontmatter `model:` field.
54
+ - Overridable centrally via `~/.claude/mishkan/config/model-routing.yaml`.
55
+ - Cost discipline lives entirely in tier assignment + prompt caching +
56
+ Cognee offloading. The observability loop surfaces expensive agents.
57
+
58
+ **Supersedes:** the original design §16 model assignment matrix, which assumed
59
+ local models for the fast tier. Local tiers are replaced by Haiku.
60
+
61
+ ---
62
+
63
+ ## D-003 — Install scope: User + Project hierarchy
64
+
65
+ **Decision:** `~/.claude/` carries permanent standards, agents, hooks, and rules
66
+ common across all work. A per-project `.claude/` carries project-specific state,
67
+ seeded by `/mishkan-init`.
68
+
69
+ **Rationale:** Matches the design doc's CLAUDE.md hierarchy. The user-level layer
70
+ is always warm and travels every project; the project layer holds sprint state,
71
+ the project CLAUDE.md, and project-scoped settings.
72
+
73
+ **Implications:**
74
+ - All MISHKAN artifacts live under `~/.claude/mishkan/` to avoid clobbering the
75
+ existing user-level surface (5 agents, 8 commands, 152 skills, settings,
76
+ command-validator script).
77
+ - `~/.claude/CLAUDE.md` and `~/.claude/rules/y4nn-standards.md` are introduced
78
+ by MISHKAN (neither existed before).
79
+ - Commands are symlinked into `~/.claude/commands/` only after confirming no
80
+ name collision.
81
+ - `/mishkan-init` seeds the project layer: `./CLAUDE.md`, `docs/`, project
82
+ `.claude/settings.json`, Cognee project namespace.
83
+
84
+ ---
85
+
86
+ ## D-004 — Existing user-level surface is preserved, never overwritten
87
+
88
+ **Decision:** MISHKAN extends `~/.claude/`; it does not replace anything.
89
+
90
+ **Preserved as-is:** any pre-existing user-level `~/.claude/agents/*.md`,
91
+ `~/.claude/commands/*.md`, `~/.claude/skills/*`, `~/.claude/settings.local.json`,
92
+ and any existing helper scripts (e.g. a command-validator). The installer never
93
+ overwrites or removes files it did not place.
94
+
95
+ **Extended:** `~/.claude/settings.json` gains the MISHKAN hook registrations.
96
+ If a pre-existing `Bash` PreToolUse validator is present, the new security hook
97
+ chains alongside it rather than replacing it.
98
+
99
+ **Leveraged:** if the project provides its own ops specialist agent, the Migdal
100
+ and Mishmar teams reference it for environment-specific operational knowledge.
101
+
102
+ ---
103
+
104
+ ## D-005 — MISHKAN is a distributable npm package (added 2026-05-27)
105
+
106
+ **Decision:** MISHKAN ships as an npm package (`mishkan-harness`) installed via a
107
+ **dependency-free `npx` one-shot installer** (`npx mishkan-harness install`). The
108
+ installer **copies** the payload into `~/.claude/mishkan` (not symlinked to
109
+ node_modules), creates relative symlinks for agent/skill/command discovery, and
110
+ merges hooks into `~/.claude/settings.json` with paths resolved from
111
+ `os.homedir()` at install time.
112
+
113
+ **Rationale:** the harness must be portable and shareable, not bound to one
114
+ machine. The earlier hand-placed build hardcoded absolute paths (`/home/ogu/...`)
115
+ in settings.json and `projects.yaml`. The installer removes all machine-binding.
116
+
117
+ **Implications:**
118
+ - **Zero npm dependencies** in the installer — a security-first harness must not
119
+ carry supply-chain risk, and Mishmar's own rules flag postinstall scripts, so a
120
+ no-deps `npx` installer is the only consistent choice.
121
+ - Package layout: `bin/mishkan.js` (installer), `payload/mishkan/` (→ `~/.claude/mishkan`),
122
+ `payload/user/` (→ user-level `CLAUDE.md` + `rules/`, placed only if absent),
123
+ `payload/install/settings.hooks.json` (hook fragment with a `{{MISHKAN}}`
124
+ placeholder resolved at install), `docs/engineer/` (canonical profile).
125
+ - Install is **idempotent** and **non-clobbering**: never overwrites a user's
126
+ `CLAUDE.md`, `rules/y4nn-standards.md`, or any real (non-symlink) agent/command.
127
+ - `uninstall` removes the harness, its symlinks, and its hooks while preserving
128
+ user-level files (`--purge` to also remove the user rule).
129
+ - `projects.yaml` is **discovery-based** (env / workspace-root / git-repo scan),
130
+ carrying no hardcoded paths.
131
+ - Verified: full install→status→uninstall cycle in a throwaway `$HOME` with zero
132
+ source-machine path leakage.
133
+
134
+ ## D-006 — Engineer profile is canonical, replaceable, and propagated (added 2026-05-27)
135
+
136
+ **Decision:** the engineer the harness serves is described in
137
+ `docs/engineer/profile.md` — a single, replaceable source of truth. The runtime
138
+ load path is the generic `~/.claude/mishkan/profile.md` (not a person-specific
139
+ filename), so any engineer can adopt the harness by replacing one file.
140
+
141
+ **Propagation is two-layer:** `scripts/sync-profile.sh` does the mechanical
142
+ copy + reference/drift audit; **Seraiah** (Sefer org-layer agent) owns the
143
+ semantic re-derivation of digests drawn from the profile (the user-level
144
+ `CLAUDE.md` non-negotiables, engineering-identity docs) when it materially changes.
145
+
146
+ ## D-007 — Curated library is a separate cognee store from project knowledge (added 2026-05-28)
147
+
148
+ **Decision:** the cross-project **curated library** lives in its own isolated
149
+ cognee store (`mishkan-curated-*`, MCP alias `cognee-curated`, port 7730),
150
+ physically separate from the **work** store that holds per-project knowledge
151
+ (`mishkan-cognee-*`, MCP alias `cognee`, port 7777). A project's `.mcp.json`
152
+ declares both: `cognee` (read+write its own graph) and `cognee-curated`
153
+ (read-only reference). The per-client memory dataset (`<client>_memory`, e.g.
154
+ `claude_code_memory`) is a legitimate part of the work store — never pruned.
155
+
156
+ **Why physical, not logical:** project ingestion pulls in code and data that can
157
+ include PII (the aiobi-mail test ingested real Gmail addresses), and with
158
+ `ENABLE_BACKEND_ACCESS_CONTROL=false` all datasets share one Neo4j graph — so
159
+ logical dataset tags alone leave them commingled in one store and one UI. Neo4j
160
+ Community allows only one database per instance, so true graph isolation requires
161
+ a separate Neo4j container. The curated box reuses the shared Ollama and the
162
+ shared Postgres *server* (own database `curated_db`) to keep the cost to one
163
+ small extra Neo4j. The curated library is small and regenerable
164
+ (`seed-curated-library.sh` → the curated box), so the split is cheap to maintain.
165
+
166
+ **Embeddings caveat (inherited):** the curated box embeds via **local Ollama** —
167
+ bulk seeding bursts embedding calls and cloud free-tier embeddings 429
168
+ (RESOURCE_EXHAUSTED).
169
+
170
+ ---
171
+
172
+ *Decisions locked May 2026. Revisit only with a dated amendment below.*