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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Y4NN777
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,205 @@
1
+ <div align="center">
2
+
3
+ # מִשְׁכָּן · MISHKAN
4
+
5
+ **A virtual software-engineering organisation that lives inside Claude Code.**
6
+
7
+ *Run a complex SDLC with AI as a disciplined, multi-agent team — design, spec,
8
+ architecture, security, build, review, and docs — instead of a single chat.*
9
+
10
+ </div>
11
+
12
+ ---
13
+
14
+ MISHKAN (*"dwelling place"* — the place where the work resides) turns Claude Code
15
+ into a standing engineering org: **45 specialist agents** across **six teams**, led
16
+ by a PM and a CTO, sharing one research pipeline and one growing knowledge graph.
17
+ Quality and security aren't *requested* of the model — they're **enforced by the
18
+ environment**: path-scoped rules, pre-write security hooks, and generation kept
19
+ structurally separate from review.
20
+
21
+ It's personal, opinionated infrastructure built around one engineer's standards —
22
+ and shared openly for anyone who wants to try working this way. To make it yours,
23
+ replace one file (your profile) and re-sync; nothing else hardcodes the author.
24
+
25
+ > **Status:** early and evolving. Used daily, not yet battle-hardened for everyone.
26
+ > The agent fleet, rules, hooks, and installer are complete; the Cognee knowledge
27
+ > graph is opt-in (bring up a local container) and some integration points are
28
+ > marked as such below.
29
+
30
+ ---
31
+
32
+ ## Why
33
+
34
+ Most "AI coding" is one model in one chat doing everything at once — generating,
35
+ judging its own output, skipping the spec, drifting scope. MISHKAN refuses that:
36
+
37
+ - **Sequence before code.** PRD → SRS → Contract → Architecture → Threat model →
38
+ Modeling → implementation. Agents won't jump to code without the upstream artifacts.
39
+ - **Generation ≠ evaluation.** The agent that writes is never the agent that reviews.
40
+ QA and reporters are structurally separate roles.
41
+ - **Deterministic guardrails.** Secrets, injection, unsafe deserialization, disabled
42
+ TLS, `:latest` tags, weak hashing — blocked by a hook *before* the write lands,
43
+ not flagged after.
44
+ - **Security & dependencies are first-class**, not an afterthought audit.
45
+ - **It learns.** Resolved research and decisions become nodes in a knowledge graph
46
+ (Cognee) that grows through use.
47
+
48
+ ## The teams
49
+
50
+ Two orchestrators route everything: **Nehemiah** (PM — scope, delivery, sprint
51
+ state) and **Bezalel** (CTO — architecture, standards, quality bar). Beneath them,
52
+ six teams, each `Lead → Specialists → QA → Reporter`:
53
+
54
+ | Team | Hebrew | Domain |
55
+ |------|--------|--------|
56
+ | **Chosheb** | *cunning work* | Design & UX |
57
+ | **Panim** | *face* | Frontend |
58
+ | **Yasad** | *foundation* | Backend & data |
59
+ | **Mishmar** | *guard* | Security (cross-cutting) |
60
+ | **Migdal** | *tower* | Infrastructure & ops |
61
+ | **Sefer** | *scroll* | Documentation (pull-based) |
62
+
63
+ A shared **research pipeline** (Jakin → Ezra → Caleb → Shaphan → Shemaiah →
64
+ Baruch) is invokable by any agent that hits an unknown — clarify, formulate,
65
+ research, summarise, evaluate, report — and every call is logged. Names and their
66
+ biblical sources: [`docs/design/MISHKAN_agent_aliases.md`](docs/design/MISHKAN_agent_aliases.md).
67
+
68
+ ## Install
69
+
70
+ Requires Claude Code and Node ≥ 18. The installer has **zero npm dependencies**.
71
+
72
+ ```bash
73
+ npx mishkan-harness install # or: node bin/mishkan.js install (from a clone)
74
+ ```
75
+
76
+ Idempotent and non-destructive: it copies the harness into `~/.claude/mishkan`,
77
+ symlinks agents/skills/commands for discovery, places a user-level `CLAUDE.md` and
78
+ standards rule **only if absent**, and merges its hooks into `settings.json`
79
+ without touching your existing hooks. Paths resolve from your home directory at
80
+ install time — nothing machine-specific is baked in.
81
+
82
+ ```bash
83
+ npx mishkan-harness status # what's installed
84
+ npx mishkan-harness uninstall # remove harness; keep your CLAUDE.md & rules
85
+ npx mishkan-harness uninstall --purge # also remove the user-level rule
86
+ ```
87
+
88
+ ## A first session
89
+
90
+ 1. Run `claude` anywhere. You're talking to **Nehemiah** and **Bezalel** in
91
+ *exploration mode* — free conversation, no ceremony.
92
+ 2. Think out loud. When intent is clear, run **`/mishkan-init`** to scaffold the
93
+ project: the spec chain, `docs/`, a seeded knowledge graph, and Sprint S0.
94
+ 3. Work the sprint. Every write is security-scanned; QA evaluates; reporters collect.
95
+ 4. **`/sprint-close`** at a milestone. **`/mishkan-resume`** next session restores
96
+ state and open blockers.
97
+
98
+ ### Commands
99
+
100
+ | Command | Does |
101
+ |---|---|
102
+ | `/mishkan-init` | Scaffold a project; begin Sprint S0 |
103
+ | `/mishkan-resume` | Restore sprint state + blockers |
104
+ | `/sprint-close` | Reporters → aggregate → docs pull → graph promote |
105
+ | `/dep-audit` | Cross-project dependency & supply-chain audit |
106
+ | `/promote` | Promote knowledge by blast radius |
107
+ | `/sefer-pull` | Trigger a documentation pull |
108
+
109
+ ## Make it yours
110
+
111
+ The harness serves the engineer described in
112
+ [`docs/engineer/profile.md`](docs/engineer/profile.md) — the single, replaceable
113
+ source of truth. Swap in your own (keep the section structure), then:
114
+
115
+ ```bash
116
+ ~/.claude/mishkan/scripts/sync-profile.sh
117
+ ```
118
+
119
+ That refreshes the runtime copy and audits references. **Seraiah** (the docs
120
+ org-layer agent) owns re-deriving anything drawn from it. See
121
+ [`docs/engineer/README.md`](docs/engineer/README.md).
122
+
123
+ ## Dependency & supply-chain
124
+
125
+ - **Before adopting any package** — the `dependency-vetting` skill drives the
126
+ research pipeline through OSV/NVD CVEs, maintenance health, typosquatting, and
127
+ provenance, then gives a go/no-go.
128
+ - **Across every project you own** — `/dep-audit` inventories all repos under your
129
+ workspace (discovery-based, no hardcoded paths), aggregates shared CVEs and
130
+ version drift, and produces a coordinated, vetted update plan.
131
+
132
+ ## Knowledge graph (optional)
133
+
134
+ MISHKAN uses [Cognee](https://docs.cognee.ai) as the knowledge graph that grows as
135
+ you work. Cognee core is a Python library; the harness consumes it through the
136
+ **`cognee-mcp`** server. Optional at first run — agents work without it; only
137
+ persistence is deferred. Run the **cognee-quickstart** skill for guided setup, or
138
+ the hardened Docker deployment under `~/.claude/mishkan/cognee/` (HTTP transport,
139
+ port 7777):
140
+
141
+ ```bash
142
+ cd ~/.claude/mishkan/cognee
143
+ cp .env.example .env # set LLM_API_KEY + COGNEE_MCP_REF (pinned), SOPS-managed
144
+ docker compose -f docker-compose.yml -f docker-compose.hardening.yml up -d --build
145
+ nc -z localhost 7777 && echo up
146
+ ~/.claude/mishkan/scripts/seed-curated-library.sh # 96 curated references
147
+ ```
148
+
149
+ Agents reach it via each project's `.mcp.json` (seeded by `/mishkan-init`): the
150
+ default is HTTP transport to `http://localhost:7777/mcp`, with a zero-container
151
+ stdio alternative included. The deployment follows the infra rules — built from a
152
+ pinned `Dockerfile` (no `:latest`), SOPS secrets, hardening overlay on every
153
+ recreate, `127.0.0.1`-bound. Pin `COGNEE_MCP_REF` to a release and confirm details
154
+ against [Cognee's docs](https://docs.cognee.ai/cognee-mcp/mcp-local-setup).
155
+ Full guide: [`payload/mishkan/cognee/README.md`](payload/mishkan/cognee/README.md).
156
+
157
+ ## Token & context management
158
+
159
+ MISHKAN doesn't replace Claude's context handling — it **shapes the inputs** so
160
+ the model's native behaviour works in your favour. Five mechanisms, each riding a
161
+ Claude/Claude Code primitive:
162
+
163
+ - **Prompt caching** — agents are ordered *static role/standards/rules first,
164
+ dynamic task last*, so the stable prefix caches and you pay full price only for
165
+ what changes.
166
+ - **Subagent isolation** — heavy work runs in disposable child windows; only
167
+ summaries return, so the main thread stays lean (and disabling auto-compaction
168
+ stays low-risk).
169
+ - **Tight tool grants** & **path-scoped rules** — agents carry only the tool
170
+ schemas and rules relevant to the file in hand.
171
+ - **Cognee offloading** — full artifacts live in the graph; context holds
172
+ summaries.
173
+
174
+ Model tiering is the complementary cost axis (`config/model-routing.yaml`): Opus
175
+ for orchestration/leads, Sonnet for anything that writes code, Haiku for
176
+ evaluate/collect/advise.
177
+
178
+ → Full operational detail, the cost model, and honest gaps:
179
+ [`docs/design/MISHKAN_token_optimisation.md`](docs/design/MISHKAN_token_optimisation.md).
180
+
181
+ ## Repository layout
182
+
183
+ ```
184
+ bin/mishkan.js installer (dependency-free)
185
+ payload/ what gets installed into ~/.claude
186
+ mishkan/ agents, skills, rules, hooks, commands, templates, config, scripts, ontology
187
+ user/ user-level CLAUDE.md + standards rule (placed if absent)
188
+ install/ hook fragment merged into settings.json
189
+ docs/
190
+ engineer/ the canonical, replaceable engineer profile
191
+ design/
192
+ MISHKAN_harness_design.md architecture (5 layers, 6 teams, knowledge model)
193
+ MISHKAN_agent_aliases.md the 45 agents and their sources
194
+ MISHKAN_decisions.md locked build decisions
195
+ MISHKAN_ontology.md Cognee graph schema
196
+ MISHKAN_token_optimisation.md how context/token use leverages Claude primitives
197
+ ```
198
+
199
+ ## License
200
+
201
+ MIT — use it, fork it, make it serve your own engineering.
202
+
203
+ ---
204
+
205
+ Built by **`>_theY4NN`** · [github.com/Y4NN777](https://github.com/Y4NN777)
package/bin/mishkan.js ADDED
@@ -0,0 +1,221 @@
1
+ #!/usr/bin/env node
2
+ // MISHKAN installer — dependency-free (Node >=18, built-ins only).
3
+ // Commands: install | uninstall | status
4
+ //
5
+ // Portability by design: every path is resolved from os.homedir() at runtime.
6
+ // No machine-specific paths are baked in. Idempotent: re-running install updates
7
+ // in place. Never clobbers user-edited files (CLAUDE.md, rules, real agents).
8
+ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync,
9
+ copyFileSync, lstatSync, readlinkSync, symlinkSync, rmSync, statSync } from "node:fs";
10
+ import { homedir } from "node:os";
11
+ import { join, dirname, relative } from "node:path";
12
+ import { fileURLToPath } from "node:url";
13
+
14
+ const HERE = dirname(fileURLToPath(import.meta.url));
15
+ const PKG = join(HERE, "..");
16
+ const HOME = homedir();
17
+ const CLAUDE = join(HOME, ".claude");
18
+ const MISHKAN = join(CLAUDE, "mishkan");
19
+ const STAMP = join(MISHKAN, ".install-stamp");
20
+
21
+ const log = (...a) => console.log("mishkan:", ...a);
22
+ const warn = (...a) => console.warn("mishkan: WARN", ...a);
23
+
24
+ function ensureDir(d) { mkdirSync(d, { recursive: true }); }
25
+
26
+ function copyDir(src, dst, skip = new Set()) {
27
+ ensureDir(dst);
28
+ for (const entry of readdirSync(src, { withFileTypes: true })) {
29
+ if (skip.has(entry.name)) continue;
30
+ const s = join(src, entry.name), d = join(dst, entry.name);
31
+ if (entry.isDirectory()) copyDir(s, d, skip);
32
+ else if (entry.isFile()) copyFileSync(s, d);
33
+ }
34
+ }
35
+
36
+ // Symlink every entry of mishkanSub into claudeSub as a relative link.
37
+ // Skip names that already exist as a NON-symlink real file (preserve user's).
38
+ function linkInto(mishkanSub, claudeSub, dirEntries = false) {
39
+ ensureDir(claudeSub);
40
+ const srcDir = join(MISHKAN, mishkanSub);
41
+ if (!existsSync(srcDir)) return { linked: 0, skipped: 0 };
42
+ let linked = 0, skipped = 0;
43
+ for (const entry of readdirSync(srcDir, { withFileTypes: true })) {
44
+ const isDir = entry.isDirectory();
45
+ if (dirEntries !== isDir) continue; // dirs for skills, files for agents/commands
46
+ if (!dirEntries && !entry.name.endsWith(".md")) continue;
47
+ const linkPath = join(claudeSub, entry.name);
48
+ const target = relative(claudeSub, join(srcDir, entry.name));
49
+ if (existsSync(linkPath) || isSymlink(linkPath)) {
50
+ if (isSymlink(linkPath)) { rmSync(linkPath); }
51
+ else { warn(`real file exists, not overwriting: ${tilde(linkPath)}`); skipped++; continue; }
52
+ }
53
+ symlinkSync(target, linkPath);
54
+ linked++;
55
+ }
56
+ return { linked, skipped };
57
+ }
58
+
59
+ function isSymlink(p) { try { return lstatSync(p).isSymbolicLink(); } catch { return false; } }
60
+ function tilde(p) { return p.replace(HOME, "~"); }
61
+
62
+ // Merge the hook fragment into settings.json, resolving {{MISHKAN}} and
63
+ // preserving any existing hooks (dedupe by exact command string).
64
+ function mergeHooks() {
65
+ const fragPath = join(PKG, "payload", "install", "settings.hooks.json");
66
+ const frag = JSON.parse(readFileSync(fragPath, "utf8"));
67
+ const settingsPath = join(CLAUDE, "settings.json");
68
+ let settings = {};
69
+ if (existsSync(settingsPath)) {
70
+ try { settings = JSON.parse(readFileSync(settingsPath, "utf8")); }
71
+ catch { warn("settings.json is not valid JSON; writing a backup and starting fresh hooks block");
72
+ copyFileSync(settingsPath, settingsPath + ".mishkan-bak"); }
73
+ }
74
+ settings.hooks ||= {};
75
+ const resolve = (s) => s.replaceAll("{{MISHKAN}}", MISHKAN);
76
+ const has = (arr, cmd) => arr.some(e => (e.hooks || []).some(h => h.command === cmd));
77
+ for (const [event, entries] of Object.entries(frag.hooks)) {
78
+ settings.hooks[event] ||= [];
79
+ for (const entry of entries) {
80
+ const resolvedHooks = entry.hooks.map(h => ({ ...h, command: resolve(h.command) }));
81
+ // append into an existing matcher block if same matcher, else push new
82
+ const existing = settings.hooks[event].find(e => (e.matcher || "") === (entry.matcher || ""));
83
+ const targetArr = existing ? existing.hooks : null;
84
+ if (existing) {
85
+ for (const h of resolvedHooks) if (!targetArr.some(x => x.command === h.command)) targetArr.push(h);
86
+ } else if (!has(settings.hooks[event], resolvedHooks[0]?.command)) {
87
+ settings.hooks[event].push({ matcher: entry.matcher || "", hooks: resolvedHooks });
88
+ }
89
+ }
90
+ }
91
+ writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + "\n");
92
+ }
93
+
94
+ function removeHooks() {
95
+ const settingsPath = join(CLAUDE, "settings.json");
96
+ if (!existsSync(settingsPath)) return;
97
+ let settings; try { settings = JSON.parse(readFileSync(settingsPath, "utf8")); } catch { return; }
98
+ if (!settings.hooks) return;
99
+ const isMishkan = (h) => (h.command || "").includes("/mishkan/hooks/");
100
+ for (const event of Object.keys(settings.hooks)) {
101
+ settings.hooks[event] = settings.hooks[event]
102
+ .map(e => ({ ...e, hooks: (e.hooks || []).filter(h => !isMishkan(h)) }))
103
+ .filter(e => (e.hooks || []).length > 0);
104
+ if (settings.hooks[event].length === 0) delete settings.hooks[event];
105
+ }
106
+ writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + "\n");
107
+ }
108
+
109
+ function install() {
110
+ log(`installing into ${tilde(CLAUDE)} (home resolved at runtime)`);
111
+ ensureDir(CLAUDE);
112
+ // 1. payload/mishkan -> ~/.claude/mishkan
113
+ copyDir(join(PKG, "payload", "mishkan"), MISHKAN);
114
+ ensureDir(join(MISHKAN, "logs"));
115
+ ensureDir(join(MISHKAN, "cognee"));
116
+ // 2. engineer profile -> runtime. Prefer a real (gitignored) profile.md if the
117
+ // engineer made one; otherwise ship the sanitized example. Never overwrite an
118
+ // existing runtime profile the engineer may have edited in place.
119
+ const realProfile = join(PKG, "docs", "engineer", "profile.md");
120
+ const exampleProfile = join(PKG, "docs", "engineer", "profile.example.md");
121
+ const runtimeProfile = join(MISHKAN, "profile.md");
122
+ if (!existsSync(runtimeProfile)) {
123
+ const src = existsSync(realProfile) ? realProfile : exampleProfile;
124
+ if (existsSync(src)) copyFileSync(src, runtimeProfile);
125
+ if (src === exampleProfile) log("placed example profile — edit ~/.claude/mishkan/profile.md with your details");
126
+ } else {
127
+ log("preserved existing ~/.claude/mishkan/profile.md");
128
+ }
129
+ // 3. user-level files
130
+ ensureDir(join(CLAUDE, "rules"));
131
+ // y4nn-standards.md is the harness-maintained DEFAULT — always refreshed so
132
+ // updates flow. Customisation lives in engineer-standards.md instead.
133
+ copyFileSync(join(PKG, "payload", "user", "rules", "y4nn-standards.md"),
134
+ join(CLAUDE, "rules", "y4nn-standards.md"));
135
+ log("refreshed harness default ~/.claude/rules/y4nn-standards.md");
136
+ // engineer-standards.md is the USER's layer — placed once, never overwritten.
137
+ const engRule = join(CLAUDE, "rules", "engineer-standards.md");
138
+ if (!existsSync(engRule)) copyFileSync(join(PKG, "payload", "user", "rules", "engineer-standards.md"), engRule);
139
+ else log("preserved your ~/.claude/rules/engineer-standards.md");
140
+ // user CLAUDE.md — placed once, never overwritten.
141
+ const userClaude = join(CLAUDE, "CLAUDE.md");
142
+ if (!existsSync(userClaude)) copyFileSync(join(PKG, "payload", "user", "CLAUDE.md"), userClaude);
143
+ else log("preserved existing ~/.claude/CLAUDE.md");
144
+ // 4. symlinks for discovery
145
+ const a = linkInto("agents", join(CLAUDE, "agents"), false);
146
+ const s = linkInto("skills", join(CLAUDE, "skills"), true);
147
+ const c = linkInto("commands", join(CLAUDE, "commands"), false);
148
+ log(`linked agents=${a.linked} (skipped ${a.skipped}), skills=${s.linked}, commands=${c.linked}`);
149
+ // 5. hooks
150
+ mergeHooks();
151
+ log("hooks merged into settings.json (existing hooks preserved)");
152
+ // 6. stamp
153
+ const version = JSON.parse(readFileSync(join(PKG, "package.json"), "utf8")).version;
154
+ writeFileSync(STAMP, JSON.stringify({ version, installedAt: new Date().toISOString() }, null, 2) + "\n");
155
+ log(`installed v${version}. Run a Claude session and talk to Nehemiah, or /mishkan-init in a project.`);
156
+ }
157
+
158
+ function uninstall({ purge = false } = {}) {
159
+ // remove symlinks that point into mishkan
160
+ for (const [sub, dirEntries] of [["agents", false], ["commands", false], ["skills", true]]) {
161
+ const dir = join(CLAUDE, sub);
162
+ if (!existsSync(dir)) continue;
163
+ for (const name of readdirSync(dir)) {
164
+ const p = join(dir, name);
165
+ if (isSymlink(p)) {
166
+ let t; try { t = readlinkSync(p); } catch { continue; }
167
+ if (t.includes("mishkan/")) rmSync(p);
168
+ }
169
+ }
170
+ }
171
+ removeHooks();
172
+ if (existsSync(MISHKAN)) rmSync(MISHKAN, { recursive: true, force: true });
173
+ log("removed ~/.claude/mishkan, its symlinks, and its hooks.");
174
+ if (purge) {
175
+ // Remove the harness-maintained default; KEEP the user's engineer-standards
176
+ // and CLAUDE.md (their own work).
177
+ const def = join(CLAUDE, "rules", "y4nn-standards.md");
178
+ if (existsSync(def)) rmSync(def);
179
+ log("purged harness default y4nn-standards.md. Kept your engineer-standards.md and CLAUDE.md.");
180
+ } else {
181
+ log("kept user-level CLAUDE.md, y4nn-standards.md, and engineer-standards.md (use --purge to remove the default).");
182
+ }
183
+ }
184
+
185
+ function status() {
186
+ if (!existsSync(STAMP)) { log("not installed."); return; }
187
+ const st = JSON.parse(readFileSync(STAMP, "utf8"));
188
+ const count = (sub, dirEntries) => {
189
+ const dir = join(CLAUDE, sub); if (!existsSync(dir)) return 0;
190
+ return readdirSync(dir).filter(n => {
191
+ const p = join(dir, n); if (!isSymlink(p)) return false;
192
+ try { return readlinkSync(p).includes("mishkan/"); } catch { return false; }
193
+ }).length;
194
+ };
195
+ const settingsPath = join(CLAUDE, "settings.json");
196
+ let hooks = 0;
197
+ if (existsSync(settingsPath)) { try {
198
+ const s = JSON.parse(readFileSync(settingsPath, "utf8"));
199
+ for (const ev of Object.values(s.hooks || {})) for (const e of ev) for (const h of (e.hooks||[]))
200
+ if ((h.command||"").includes("/mishkan/hooks/")) hooks++;
201
+ } catch {} }
202
+ log(`installed v${st.version} (${st.installedAt})`);
203
+ log(`linked: agents=${count("agents")}, skills=${count("skills")}, commands=${count("commands")}, mishkan hooks=${hooks}`);
204
+ log(`runtime profile: ${existsSync(join(MISHKAN,"profile.md")) ? "present" : "MISSING"}`);
205
+ log(`cognee dir: ${existsSync(join(MISHKAN,"cognee")) ? "present (deploy the container to activate the graph)" : "missing"}`);
206
+ }
207
+
208
+ const cmd = process.argv[2];
209
+ const flags = new Set(process.argv.slice(3));
210
+ switch (cmd) {
211
+ case "install": install(); break;
212
+ case "uninstall": uninstall({ purge: flags.has("--purge") }); break;
213
+ case "status": status(); break;
214
+ default:
215
+ console.log(`MISHKAN harness installer
216
+ Usage:
217
+ npx mishkan-harness install Install/refresh into ~/.claude (idempotent)
218
+ npx mishkan-harness status Show install state
219
+ npx mishkan-harness uninstall Remove harness (keeps your CLAUDE.md & rules)
220
+ npx mishkan-harness uninstall --purge Also remove user-level rule`);
221
+ }
@@ -0,0 +1,140 @@
1
+ # MISHKAN — Agent Aliases
2
+ ## Complete Biblical Name Registry
3
+
4
+ All names drawn from the Hebrew Bible (KJV). Every name is a real biblical
5
+ figure with a documented source and a meaning matched to the agent's function.
6
+ No stretching. No invented names.
7
+
8
+ ---
9
+
10
+ ## Naming Rules
11
+
12
+ - Personal names for agents (biblical figures)
13
+ - Hebrew words / places for teams (not people)
14
+ - No name used twice
15
+ - Meaning must match function — character OR role in scripture
16
+
17
+ ---
18
+
19
+ ## Orchestration
20
+
21
+ | Alias | Functional Role | Source | Meaning & Why |
22
+ |-------|----------------|--------|---------------|
23
+ | **Nehemiah** | PM — scope, delivery, sprint state, user interface | Book of Nehemiah | "Yah comforts" — oversaw every builder, every section of the wall, reported to the king, managed people through opposition |
24
+ | **Bezalel** | CTO — technical standards, architecture, quality bar | Exodus 31:2 | "In the shadow of God" — filled with wisdom, understanding and knowledge in all manner of workmanship; led all craftsmen |
25
+
26
+ ---
27
+
28
+ ## Research Pipeline
29
+
30
+ | Alias | Functional Role | Source | Meaning & Why |
31
+ |-------|----------------|--------|---------------|
32
+ | **Jakin** | intent_clarificator | 1 Kings 7:21 | "He establishes" — one of the two bronze pillars at the entrance of Solomon's Temple; establishes the threshold before anything passes through |
33
+ | **Ezra** | research_details_formulator | Book of Ezra 7:6 | "Help" — a ready scribe skilled in the law of Moses; formulated and structured the restoration plan with precision |
34
+ | **Caleb** | contextual_web_researcher | Numbers 13:30 | "Faithful, wholehearted" — one of the two spies who went into Canaan and returned with an accurate, full, fearless report |
35
+ | **Shaphan** | contextual_research_summarizer | 2 Kings 22:3-10 | Royal scribe who read and summarised the found Book of the Law to the king — compressed and delivered |
36
+ | **Shemaiah** | contextual_research_results_evaluator | Nehemiah 6:10-13 | Prophet consulted to evaluate counsel — discerned true signal from false |
37
+ | **Baruch** | research_reporter | Jeremiah 36:4 | "Blessed" — Jeremiah's scribe, wrote from his mouth and carried his words faithfully; the terminal carrier of the message |
38
+
39
+ ---
40
+
41
+ ## Chosheb — Design Team
42
+
43
+ | Alias | Functional Role | Source | Meaning & Why |
44
+ |-------|----------------|--------|---------------|
45
+ | **Aholiab** | Team Lead | Exodus 31:6 | "Tent of the father" — Bezalel's appointed partner, led the design craftsmen, taught others, coordinated the handoff |
46
+ | **Hiram** | senior_ui_design_and_prototype_implementation | 1 Kings 7:13-14 | "Exalted, noble" — the craftsman Solomon sent for; made all the beautiful visible things in the Temple, the pillars, the sea, the vessels |
47
+ | **Deborah** | cognitive_and_emotional_ux_expert | Judges 4:4-5 | "Bee" — the prophetess who sat under her palm tree and people came to her for understanding; saw what others missed, guided with deep human insight |
48
+ | **Elasah** | Team Reporter | Jeremiah 29:3 | "God has made" — carried Jeremiah's letter faithfully from Jerusalem to Babylon; the faithful carrier of structured output |
49
+
50
+ ---
51
+
52
+ ## Panim — Frontend Team
53
+
54
+ | Alias | Functional Role | Source | Meaning & Why |
55
+ |-------|----------------|--------|---------------|
56
+ | **Huram** | Team Lead | 2 Chronicles 2:13 | "Noble, free-born" — Hiram's master craftsman sent to Solomon to lead all visible works; cunning in gold, silver, brass, stone, timber |
57
+ | **Oholiab** | senior_frontend_engineer_frontend_design_system_expert | Exodus 35:34 | "Tent of the father" — taught all manner of work, keeper of patterns and standards across the craftsmen |
58
+ | **Salma** | senior_frontend_developer | 1 Chronicles 2:51 | "Clothing, garment" — builder of Bethlehem; one who clothes and covers, the implementer of visible form |
59
+ | **Obed** | smart_frontend_assets_feeder | Ruth 4:17 | "Serving, worshipping" — the faithful servant who supplies and sustains; named for his function of service |
60
+ | **Asaph** | seo_accessibility_expert | 1 Chronicles 16:5 | "Collector, gatherer" — chief of David's musicians appointed to make the work heard and received by all the people; his role was to make things accessible |
61
+ | **Jahaziel** | frontend_qa_engineer | 2 Chronicles 20:14 | "God sees" — stood in the congregation and spoke truth about what he observed; saw what others missed, evaluates without producing |
62
+ | **Ahikam** | Team Reporter | 2 Kings 22:12 | "My brother has risen" — sent by the king to carry a message and return with a faithful report |
63
+
64
+ ---
65
+
66
+ ## Yasad — Backend Team
67
+
68
+ | Alias | Functional Role | Source | Meaning & Why |
69
+ |-------|----------------|--------|---------------|
70
+ | **Zerubbabel** | Team Lead | Ezra 3:2, Haggai 1:1 | "Seed of Babylon" — the governor who led the rebuilding of the Temple foundation; his specific role was laying and overseeing the deep base |
71
+ | **Zadok** | senior_software_engineer_design_system_master | 2 Samuel 8:17 | "Righteous" — the faithful high priest who kept the standards and patterns across generations; keeper of what must not change |
72
+ | **Nathan** | senior_software_engineer_software_architecture_master | 2 Samuel 7:2 | "He gave" — the prophet who brought architectural vision to David; spoke truth about what should and should not be built |
73
+ | **Hizkiah** | senior_backend_engineer_pure_backend_implementation | 2 Chronicles 31:13 | "Strength of Yah" — an overseer of dedicated, pure administrative work in Hezekiah's time; the one who does the direct labour |
74
+ | **Shallum** | senior_backend_engineering_databases_expert | 2 Kings 15:10 | "Retribution, completeness" — one who maintains and seals; also a keeper of the vestry (2 Kings 22:14) — the keeper of what is stored |
75
+ | **Uriah** | backend_qa_engineer | 2 Samuel 11, 23:39 | "Yah is my light" — the man of absolute integrity and strict adherence to standard; held the line even when pressured not to |
76
+ | **Igal** | Team Reporter | Numbers 13:7 | "He redeems" — one of the twelve spies; returned and reported what he observed from his section |
77
+
78
+ ---
79
+
80
+ ## Mishmar — Security Team
81
+
82
+ | Alias | Functional Role | Source | Meaning & Why |
83
+ |-------|----------------|--------|---------------|
84
+ | **Phinehas** | Team Lead | Numbers 25:7-8 | "Mouth of brass / serpent" — acted decisively to stop a breach; zealous for security, moved without hesitation when the boundary was crossed |
85
+ | **Benaiah** | software_and_infrastructure_security_expert_devsecops | 2 Samuel 23:20 | "Yah has built" — commander of the guard, mighty man who went down into a pit on a snowy day to slay a lion; dealt with the hardest infrastructure-level threats |
86
+ | **Joab** | web_mobile_desktop_security_expert | 2 Samuel 8:16 | "Yah is father" — commander of David's army across all fronts; the field general who covered all surface-level attack vectors |
87
+ | **Ira** | code_security_ops | 2 Samuel 20:26 | "Watchful" — David's priest and a chief officer; one who keeps watch at the code level |
88
+ | **Hushai** | software_security_advisor | 2 Samuel 15:37 | "Haste" — David's friend and strategic counsellor who gave wise advice to counter threats; the trusted advisor who outmanoeuvred the attacker |
89
+ | **Maaseiah** | Team Reporter | Nehemiah 8:4 | "Work of Yah" — stood at Ezra's right hand during the reading of the law; carried the structured account faithfully |
90
+
91
+ ---
92
+
93
+ ## Migdal — Infrastructure Team
94
+
95
+ | Alias | Functional Role | Source | Meaning & Why |
96
+ |-------|----------------|--------|---------------|
97
+ | **Eliashib** | Team Lead | Nehemiah 3:1 | "God restores" — the high priest who led the rebuilding of the Sheep Gate and the wall; the one who organises the foundational infrastructure work |
98
+ | **Palal** | systems_engineer_os_virtualisation_networks | Nehemiah 3:25 | "Judge" — made repairs at the Angle, next to the tower; worked at the structural intersection point of the wall and the tower |
99
+ | **Meshullam** | infrastructure_design_engineer | Nehemiah 3:4 | "Friend, allied" — repaired multiple sections; the one who designs connections between parts |
100
+ | **Hanun** | devsecops_practitioner_support_ops | Nehemiah 3:13 | "Favoured" — repaired the Valley Gate with the men of Zanoah; covered a long section of the wall in support mode |
101
+ | **Meremoth** | devops_engineer | Nehemiah 3:4 | "Heights, elevations" — repaired his section next to the Fish Gate; one who works at the delivery layer |
102
+ | **Rehum** | infrastructure_health_and_security_advisor | Nehemiah 3:17 | "Compassionate" — a Levite who repaired; also the commander who wrote the letter of warning about Jerusalem's walls — he watches for risk and advises |
103
+ | **Zaccur** | Team Reporter | Nehemiah 3:2 | "Remembered, mindful" — built next to the men of Jericho; one who keeps record, who is mindful of what happened |
104
+
105
+ ---
106
+
107
+ ## Sefer — Documentation Team
108
+
109
+ | Alias | Functional Role | Source | Meaning & Why |
110
+ |-------|----------------|--------|---------------|
111
+ | **Jehoshaphat** | Team Lead | 2 Samuel 8:16 | "Yah has judged" — the first Recorder (mazkir) in David's court; cared for national archives, added current annals, brought weighty matters to the king |
112
+ | **Seraiah** | organisation_layer_specialist | 2 Samuel 8:17 | "Yah has prevailed" — David's chief scribe; operated at the highest state level across the entire kingdom |
113
+ | **Joah** | project_layer_specialist | 2 Kings 18:18, 2 Chronicles 34:8 | "Yah is brother" — recorder under Hezekiah and Josiah; documented the specific events and decisions of each reign |
114
+ | **Shevna** | team_layer_specialist | 2 Kings 18:18, Isaiah 36:3 | "Youthful vigour" — the scribe present in direct negotiations; embedded with the teams, documents their specific outputs |
115
+ | **Jehonathan** | knowledge_publication_specialist | 1 Chronicles 27:32 | "Yah has given" — David's uncle, explicitly "a counsellor, a wise man, and a scribe"; takes knowledge and makes it legible for others |
116
+ | **Huldah** | Team Reporter | 2 Kings 22:14 | "Weasel" — the prophetess consulted when the Book of the Law was found; verified, interpreted and reported the meaning back to the king with authority |
117
+
118
+ ---
119
+
120
+ ## Name Conflict Check
121
+
122
+ All 45 agents named. No conflicts.
123
+
124
+ | Group | Count |
125
+ |-------|------:|
126
+ | Orchestration | 2 |
127
+ | Research Pipeline | 6 |
128
+ | Chosheb (Design) | 4 |
129
+ | Panim (Frontend) | 7 |
130
+ | Yasad (Backend) | 7 |
131
+ | Mishmar (Security) | 6 |
132
+ | Migdal (Infrastructure) | 7 |
133
+ | Sefer (Documentation) | 6 |
134
+ | **Total** | **45** |
135
+
136
+ ---
137
+
138
+ *MISHKAN Agent Aliases — May 2026*
139
+ *All names sourced from KJV Hebrew Bible. Personal names only for agents.*
140
+ *Hebrew words/places for teams. No name used twice.*