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,70 @@
1
+ # MISHKAN — Cognee Graph Explorer UI overlay (OPTIONAL · profile: ui).
2
+ # Adds the Cognee web UI (backend API + Next.js frontend) so you can visualise the
3
+ # graph your agents build. Run TOGETHER with the self-hosted overlay, which
4
+ # provides the shared backends (Neo4j + Postgres/pgvector) and Ollama:
5
+ #
6
+ # docker compose -f docker-compose.yml -f docker-compose.hardening.yml \
7
+ # -f docker-compose.selfhosted.yml -f docker-compose.ui.yml \
8
+ # --profile ui up -d --build
9
+ #
10
+ # The UI backend uses the SAME .env as cognee-mcp (same Neo4j + Postgres + Ollama),
11
+ # so the UI and the agents share one graph. The backend + frontend build from a
12
+ # CLONED cognee repo — set COGNEE_SRC in .env. The Cognee UI is "work in progress"
13
+ # upstream; confirm the frontend Dockerfile path + backend entrypoint against the
14
+ # repo. Ports are 127.0.0.1-bound and configurable.
15
+
16
+ services:
17
+ cognee-backend:
18
+ build:
19
+ context: ${COGNEE_SRC:?set COGNEE_SRC in .env to a cloned cognee repo}
20
+ image: mishkan/cognee-backend:${COGNEE_MCP_REF:?}
21
+ container_name: mishkan-cognee-backend
22
+ restart: unless-stopped
23
+ profiles: ["ui"]
24
+ depends_on:
25
+ neo4j:
26
+ condition: service_healthy
27
+ postgres:
28
+ condition: service_healthy
29
+ ollama:
30
+ condition: service_healthy
31
+ env_file:
32
+ - .env # same cognee config as cognee-mcp → shared graph
33
+ environment:
34
+ HOST: 0.0.0.0
35
+ ENVIRONMENT: local
36
+ CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-http://localhost:${COGNEE_UI_PORT:-7724}}
37
+ ports:
38
+ - "127.0.0.1:${COGNEE_BACKEND_PORT:-7737}:8000"
39
+ networks:
40
+ - cognee_net
41
+ security_opt:
42
+ - no-new-privileges:true
43
+ deploy:
44
+ resources:
45
+ limits:
46
+ cpus: "2.0"
47
+ memory: 3g
48
+
49
+ cognee-frontend:
50
+ build:
51
+ context: ${COGNEE_SRC:?set COGNEE_SRC in .env to a cloned cognee repo}/cognee-frontend
52
+ image: mishkan/cognee-frontend:${COGNEE_MCP_REF:?}
53
+ container_name: mishkan-cognee-frontend
54
+ restart: unless-stopped
55
+ profiles: ["ui"]
56
+ depends_on:
57
+ - cognee-backend
58
+ environment:
59
+ NEXT_PUBLIC_LOCAL_API_URL: ${NEXT_PUBLIC_LOCAL_API_URL:-http://localhost:${COGNEE_BACKEND_PORT:-7737}}
60
+ ports:
61
+ - "127.0.0.1:${COGNEE_UI_PORT:-7724}:3000"
62
+ networks:
63
+ - cognee_net
64
+ security_opt:
65
+ - no-new-privileges:true
66
+ deploy:
67
+ resources:
68
+ limits:
69
+ cpus: "1.0"
70
+ memory: 1g
@@ -0,0 +1,71 @@
1
+ # MISHKAN — cognee-mcp knowledge-graph server (local Docker · decision D-001).
2
+ # Runs the official cognee-mcp in HTTP transport on port 7777 (endpoint /mcp).
3
+ # Cognee core is a library; this container exposes it over MCP for Claude Code.
4
+ #
5
+ # Compliant with Migdal rules: built locally from a pinned Dockerfile (no blind
6
+ # pulls, no :latest), SOPS-managed secrets, resource limits, healthcheck, isolated
7
+ # network, 127.0.0.1-bound. Apply the hardening overlay on EVERY recreate:
8
+ # docker compose -f docker-compose.yml -f docker-compose.hardening.yml up -d
9
+ #
10
+ # Port: cognee-mcp listens on 7777 inside the container; COGNEE_PORT (default
11
+ # 7777) sets the host port. (A TCP port must be <= 65535.)
12
+ #
13
+ # Backend stores: cognee uses local backends by default (no extra services).
14
+ # To use PostgreSQL/pgvector or Neo4j instead, set the relevant cognee env vars
15
+ # in .env per https://docs.cognee.ai and add the backend service here.
16
+
17
+ name: mishkan-cognee
18
+
19
+ services:
20
+ cognee-mcp:
21
+ build:
22
+ context: .
23
+ dockerfile: Dockerfile
24
+ args:
25
+ COGNEE_MCP_REF: ${COGNEE_MCP_REF:?set COGNEE_MCP_REF in .env to a pinned cognee git tag/commit}
26
+ PYTHON_VERSION: 3.12-slim
27
+ image: mishkan/cognee-mcp:${COGNEE_MCP_REF:?set COGNEE_MCP_REF in .env to a pinned cognee git tag/commit}
28
+ container_name: mishkan-cognee-mcp
29
+ restart: unless-stopped
30
+ env_file:
31
+ - .env
32
+ environment:
33
+ # LLM_API_KEY (and any backend provider vars) come from .env (SOPS-managed).
34
+ COGNEE_PORT: "7777"
35
+ ports:
36
+ # host COGNEE_PORT (default 7777) → container 7777. Bound to localhost only.
37
+ - "127.0.0.1:${COGNEE_PORT:-7777}:7777"
38
+ volumes:
39
+ # Cognee's local data (graph/vector/sqlite) when using default backends.
40
+ - cognee_data:/app/cognee-mcp/.cognee_system
41
+ healthcheck:
42
+ test: ["CMD", "python", "-c", "import socket; s=socket.create_connection(('127.0.0.1',7777),2); s.close()"]
43
+ interval: 15s
44
+ timeout: 5s
45
+ retries: 5
46
+ start_period: 40s
47
+ networks:
48
+ - cognee_net
49
+ deploy:
50
+ resources:
51
+ limits:
52
+ cpus: "2.0"
53
+ memory: 3g
54
+
55
+ volumes:
56
+ cognee_data:
57
+
58
+ networks:
59
+ cognee_net:
60
+ driver: bridge
61
+ # Subnet pinned away from Docker's default 172.18-172.31 auto-allocation pool.
62
+ # On some hosts the daemon's BoltDB carries orphaned anti-spoofing iptables
63
+ # rules (nat PREROUTING DROP) for a dead bridge that previously owned a
64
+ # 172.x subnet; a new bridge auto-allocated into that subnet then has all
65
+ # inter-container TCP silently dropped (timeout, not refused). Pinning to an
66
+ # unused subnet sidesteps it durably (survives reboot/firewall reload).
67
+ ipam:
68
+ driver: default
69
+ config:
70
+ - subnet: 172.51.0.0/16
71
+ gateway: 172.51.0.1
@@ -0,0 +1,92 @@
1
+ # MISHKAN — structured ingest of the curated library into Cognee.
2
+ # Runs INSIDE the cognee-mcp container (it needs the cognee package + the live
3
+ # .env config: graph=Neo4j, vector=pgvector, embeddings=Ollama). Reads a JSONL
4
+ # of CuratedResource entries and writes typed Team + CuratedResource nodes via
5
+ # Cognee's low-level DataPoint API — NO LLM extraction (cognify), so it costs
6
+ # only embedding calls. Use local Ollama embeddings to avoid cloud rate walls
7
+ # on bulk ingest (Gemini free-tier embeddings 429 on ~100 nodes).
8
+ #
9
+ # Invoked by seed-curated-library.sh; not meant to be run standalone on the host.
10
+ #
11
+ # JSONL path via COGNEE_CURATED_JSONL (default /home/cognee/curated-resources.jsonl)
12
+ #
13
+ # WARNING: prunes the graph first (clean, reproducible seed). Run before real
14
+ # session knowledge accumulates, or it wipes that too.
15
+ import asyncio
16
+ import json
17
+ import os
18
+ from typing import List
19
+
20
+ from cognee.low_level import setup, DataPoint
21
+ from cognee.pipelines import run_tasks, Task
22
+ from cognee.tasks.storage import add_data_points
23
+ from cognee.tasks.storage.index_graph_edges import index_graph_edges
24
+ from cognee.modules.users.methods import get_default_user
25
+ from cognee.modules.data.methods import load_or_create_datasets
26
+ from cognee import prune
27
+
28
+ JSONL = os.environ.get("COGNEE_CURATED_JSONL", "/home/cognee/curated-resources.jsonl")
29
+
30
+
31
+ class CuratedResource(DataPoint):
32
+ name: str
33
+ team: str
34
+ url: str
35
+ problem_class: str
36
+ source_tier: str
37
+ metadata: dict = {"index_fields": ["name", "problem_class"]}
38
+
39
+
40
+ class Team(DataPoint):
41
+ name: str
42
+ resources: List[CuratedResource]
43
+ metadata: dict = {"index_fields": ["name"]}
44
+
45
+
46
+ def build_nodes(_data=None):
47
+ teams: dict[str, list] = {}
48
+ with open(JSONL) as fh:
49
+ for line in fh:
50
+ line = line.strip()
51
+ if not line:
52
+ continue
53
+ d = json.loads(line)
54
+ teams.setdefault(d["team"], []).append(
55
+ CuratedResource(
56
+ name=d["name"],
57
+ team=d["team"],
58
+ url=d["url"],
59
+ problem_class=d.get("problem_class", ""),
60
+ source_tier=d.get("source_tier", "curated"),
61
+ )
62
+ )
63
+ nodes = [Team(name=t, resources=rs) for t, rs in teams.items()]
64
+ print(
65
+ f">> built {len(nodes)} Team nodes, "
66
+ f"{sum(len(t.resources) for t in nodes)} CuratedResource nodes",
67
+ flush=True,
68
+ )
69
+ return nodes
70
+
71
+
72
+ async def main():
73
+ await prune.prune_data()
74
+ await prune.prune_system(metadata=True)
75
+ print(">> pruned", flush=True)
76
+ await setup()
77
+ user = await get_default_user()
78
+ datasets = await load_or_create_datasets(["curated_library"], [], user)
79
+ tasks = [Task(build_nodes), Task(add_data_points)]
80
+ async for status in run_tasks(tasks, datasets[0].id, None, user, "curated_seed"):
81
+ print(">> status:", getattr(status, "status", status), flush=True)
82
+ await index_graph_edges()
83
+ print(">> SEEDED", flush=True)
84
+ # Enrichment always follows the build: memify embeds the relationship/triplet
85
+ # layer into the vector store (default tasks; embeddings-only, no LLM/quota).
86
+ import cognee
87
+ await cognee.memify(dataset="curated_library")
88
+ print(">> MEMIFIED", flush=True)
89
+
90
+
91
+ if __name__ == "__main__":
92
+ asyncio.run(main())
@@ -0,0 +1,24 @@
1
+ ---
2
+ description: Audit dependencies across all registered projects and produce a coordinated, vetted update plan.
3
+ argument-hint: "[optional: package name or CVE id to focus on]"
4
+ ---
5
+
6
+ Run a cross-project dependency audit using the **dependency-audit** skill.
7
+
8
+ Focus (if provided): $ARGUMENTS
9
+
10
+ Steps:
11
+
12
+ 1. Run `~/.claude/mishkan/scripts/dependency-audit.sh` — inventories every project
13
+ in `~/.claude/mishkan/config/projects.yaml`, runs OSV-Scanner/trivy where
14
+ installed, aggregates shared packages, shared CVEs, and version drift.
15
+ 2. As **Benaiah** (supply-chain, Mishmar), prioritise findings by
16
+ severity × blast radius (how many projects each affects).
17
+ 3. For each fix, run **dependency-vetting** on the target version, then
18
+ **dependency-upgrade** for per-project breaking-change analysis.
19
+ 4. As **Migdal**, sequence a staging-first rollout per project. Prepare the pinned
20
+ manifest changes + lockfile-regen commands — **Y4NN runs the installs/deploys**.
21
+ 5. **Seraiah** documents the portfolio posture; promote a cross-harness Cognee node
22
+ (gated by Nehemiah + Bezalel).
23
+
24
+ No fabricated CVEs. No installs or deploys executed by AI. English only.
@@ -0,0 +1,25 @@
1
+ ---
2
+ description: Initialise the current project under MISHKAN (PRD→SRS→CONTRACT→ARCHITECTURE→THREAT_MODEL→C4→docs→Cognee→Sprint S0).
3
+ argument-hint: "[optional one-line project intent]"
4
+ ---
5
+
6
+ Initialise this project under MISHKAN by running the **mishkan-init** skill.
7
+
8
+ Project intent (if provided): $ARGUMENTS
9
+
10
+ Before writing the first document, **produce a `/plan`** and surface it to Y4NN
11
+ for approval — the plan is the scope contract for initialisation. Then run the
12
+ sequence exactly:
13
+
14
+ Nehemiah → `docs/PRD.md`
15
+ → Nathan → `docs/SRS.md`
16
+ → Zadok → `docs/CONTRACT.md` (plan first)
17
+ → Bezalel + Nathan → `docs/ARCHITECTURE.md` (plan first)
18
+ → Benaiah → `docs/THREAT_MODEL.md` (plan first)
19
+ → Meshullam → `docs/diagrams/C4/` (plan first)
20
+ → Jehoshaphat → `docs/README.md`, `docs/adr/`, `docs/runbooks/` (plan first)
21
+ → seed Cognee from all docs
22
+ → write `./CLAUDE.md` (Sprint S0), copy settings + team rules into `.claude/`
23
+
24
+ Sequence before implementation: no code is written during init. Stateful
25
+ operations stop at Y4NN's hands. Every doc is dated. English only.
@@ -0,0 +1,21 @@
1
+ ---
2
+ description: Resume a MISHKAN project — load sprint state and open blockers, Nehemiah greets with current context.
3
+ ---
4
+
5
+ Resume work on this MISHKAN project. This is the replacement for the deferred
6
+ SessionStart hook.
7
+
8
+ Do the following:
9
+
10
+ 1. Read `./CLAUDE.md` for the current sprint, milestone, mode, tasks, and blockers.
11
+ 2. Query Cognee (project namespace) for active blockers, open Mishmar flags, and
12
+ pending decisions.
13
+ 3. As **Nehemiah**, greet Y4NN with a tight context summary:
14
+ - current sprint + milestone + mode
15
+ - open tasks (id, description, status, owner)
16
+ - blockers — Mishmar flags first, with severity
17
+ - pending decisions awaiting Y4NN
18
+ 4. Ask where Y4NN wants to start.
19
+
20
+ Keep it lean — surface state, do not dump raw logs. No code is written by this
21
+ command. English only.
@@ -0,0 +1,19 @@
1
+ ---
2
+ description: Manually promote a learning into Cognee at an explicit blast-radius tier.
3
+ argument-hint: "<agent-private|team-level|cross-harness> <what to promote>"
4
+ ---
5
+
6
+ Manually promote a learning using the **cognee-promote** skill.
7
+
8
+ Requested promotion: $ARGUMENTS
9
+
10
+ Parse the first token as the blast-radius tier and the rest as the learning.
11
+
12
+ - `agent-private` → record in the agent's `MEMORY.md`; do **not** write Cognee.
13
+ - `team-level` → Team Lead decision; update team rules / shared topic file, and
14
+ write a `team-level` Cognee node.
15
+ - `cross-harness` → requires Nehemiah + Bezalel sign-off; write a `cross-harness`
16
+ Cognee node per `~/.claude/mishkan/ontology.md` with the correct entity type and edges.
17
+
18
+ If the tier is ambiguous, ask: does this affect only the agent, the team, or
19
+ everyone? No fabricated facts. English only.
@@ -0,0 +1,19 @@
1
+ ---
2
+ description: Trigger a Sefer documentation pull outside the milestone (event-driven).
3
+ argument-hint: "<event: architecture-decision|security-finding-closed|schema-change> [detail]"
4
+ ---
5
+
6
+ Trigger a Sefer documentation pull using the **sefer-pull** skill, Mode B
7
+ (triggered pull).
8
+
9
+ Event: $ARGUMENTS
10
+
11
+ Jehoshaphat coordinates. Pull only from the team that triggered the event and
12
+ update only the affected docs:
13
+
14
+ - `architecture-decision` → ARCHITECTURE.md + new ADR (Joah, MADR).
15
+ - `security-finding-closed` → THREAT_MODEL.md + security posture (Shevna).
16
+ - `schema-change` → data docs + migration runbook (Joah).
17
+
18
+ Sefer writes to `docs/` only — never code. Every doc dated, Diátaxis quadrant
19
+ declared, sourced from Cognee/reporters. English only.
@@ -0,0 +1,21 @@
1
+ ---
2
+ description: Close the current sprint — reporters surface, Nehemiah aggregates, Bezalel reviews, Sefer pulls, Cognee promotes, next sprint begins.
3
+ ---
4
+
5
+ Close the current sprint milestone. First **produce a `/plan`** of what will be
6
+ promoted to Cognee and what will be closed, and surface it to Y4NN for approval.
7
+ Then run:
8
+
9
+ 1. Each **Team Reporter** surfaces its `team-report.json` (Maaseiah, Igal,
10
+ Elasah, Ahikam, Zaccur, Huldah) — via the **sprint-report** skill.
11
+ 2. **Nehemiah** aggregates all six team reports.
12
+ 3. **Bezalel** reviews architectural and security flags.
13
+ 4. **Sefer** runs a sequential pull (**sefer-pull** skill, Mode A) — changelogs,
14
+ ADRs, API docs, runbooks, team docs updated in `docs/`.
15
+ 5. Resolved research + decisions promoted to the Cognee project graph
16
+ (**cognee-promote** skill) — gated by Nehemiah + Bezalel.
17
+ 6. Observability aggregation runs; improvement-layer queries refresh.
18
+ 7. Update `./CLAUDE.md` to the next sprint (S+1) and reset milestone.
19
+
20
+ Stateful operations stop at Y4NN's hands. Reporters surface structured summaries
21
+ only. English only.
@@ -0,0 +1,113 @@
1
+ # MISHKAN curated library — per-team vetted references, ingested into Cognee as
2
+ # CuratedResource nodes (ontology: type=CuratedResource). Specific to Y4NN's
3
+ # actual stack. Distinct from the research pipeline: the pipeline finds new
4
+ # things; this library holds proven things agents load without searching.
5
+ # Seeded by scripts/seed-curated-library.sh once Cognee is running.
6
+
7
+ chosheb: # Design
8
+ - { name: "NN/g — 10 Usability Heuristics", url: "https://www.nngroup.com/articles/ten-usability-heuristics/", problem_class: "heuristic-evaluation" }
9
+ - { name: "Laws of UX", url: "https://lawsofux.com/", problem_class: "cognitive-load-decision-architecture" }
10
+ - { name: "Refactoring UI", url: "https://www.refactoringui.com/", problem_class: "visual-design-heuristics" }
11
+ - { name: "Material Design 3", url: "https://m3.material.io/", problem_class: "design-system-reference" }
12
+ - { name: "Apple HIG", url: "https://developer.apple.com/design/human-interface-guidelines/", problem_class: "platform-native-design" }
13
+ - { name: "WCAG 2.2 Quick Reference", url: "https://www.w3.org/WAI/WCAG22/quickref/", problem_class: "accessibility-checklist" }
14
+ - { name: "Inclusive Components", url: "https://inclusive-components.design/", problem_class: "accessible-component-patterns" }
15
+ - { name: "IBM Carbon Design System", url: "https://carbondesignsystem.com/", problem_class: "design-system-architecture" }
16
+
17
+ panim: # Frontend
18
+ - { name: "MDN Web Docs", url: "https://developer.mozilla.org/", problem_class: "web-platform-reference" }
19
+ - { name: "React docs", url: "https://react.dev/", problem_class: "react-patterns" }
20
+ - { name: "TanStack docs hub", url: "https://tanstack.com/", problem_class: "data-fetching-routing" }
21
+ - { name: "TanStack Router v1", url: "https://tanstack.com/router/latest", problem_class: "routing" }
22
+ - { name: "Vite docs", url: "https://vitejs.dev/", problem_class: "build-tooling" }
23
+ - { name: "pnpm docs", url: "https://pnpm.io/", problem_class: "package-management" }
24
+ - { name: "Vercel docs", url: "https://vercel.com/docs", problem_class: "frontend-deployment" }
25
+ - { name: "TailwindCSS docs", url: "https://tailwindcss.com/docs", problem_class: "styling-system" }
26
+ - { name: "Nuxt 3 docs", url: "https://nuxt.com/docs", problem_class: "vue-ssr" }
27
+ - { name: "Storybook docs", url: "https://storybook.js.org/docs", problem_class: "component-isolation" }
28
+ - { name: "web.dev Core Web Vitals", url: "https://web.dev/articles/vitals", problem_class: "performance-budgets" }
29
+ - { name: "WAI-ARIA APG", url: "https://www.w3.org/WAI/ARIA/apg/", problem_class: "accessible-js-components" }
30
+ - { name: "Can I Use", url: "https://caniuse.com/", problem_class: "browser-compatibility" }
31
+ - { name: "Patterns.dev", url: "https://www.patterns.dev/", problem_class: "frontend-patterns" }
32
+
33
+ yasad: # Backend
34
+ - { name: "FastAPI docs", url: "https://fastapi.tiangolo.com/", problem_class: "python-api-framework" }
35
+ - { name: "Pydantic v2 docs", url: "https://docs.pydantic.dev/latest/", problem_class: "data-validation" }
36
+ - { name: "asyncpg docs", url: "https://magicstack.github.io/asyncpg/current/", problem_class: "async-postgres-driver" }
37
+ - { name: "Alembic docs", url: "https://alembic.sqlalchemy.org/en/latest/", problem_class: "schema-migrations" }
38
+ - { name: "SQLAlchemy 2.0 async", url: "https://docs.sqlalchemy.org/en/20/orm/extensions/asyncio.html", problem_class: "async-orm" }
39
+ - { name: "Hono docs", url: "https://hono.dev/", problem_class: "ts-edge-api" }
40
+ - { name: "NestJS docs", url: "https://docs.nestjs.com/", problem_class: "ts-enterprise-api" }
41
+ - { name: "Fastify docs", url: "https://fastify.dev/docs/latest/", problem_class: "ts-api-framework" }
42
+ - { name: "PostgreSQL docs", url: "https://www.postgresql.org/docs/current/", problem_class: "relational-db" }
43
+ - { name: "Use the Index, Luke", url: "https://use-the-index-luke.com/", problem_class: "sql-indexing" }
44
+ - { name: "MongoDB docs", url: "https://www.mongodb.com/docs/", problem_class: "document-db" }
45
+ - { name: "DynamoDB developer guide", url: "https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/", problem_class: "key-value-db" }
46
+ - { name: "LangChain Python docs", url: "https://python.langchain.com/docs/introduction/", problem_class: "llm-orchestration" }
47
+ - { name: "LangGraph docs", url: "https://langchain-ai.github.io/langgraph/", problem_class: "stateful-ai-workflows" }
48
+ - { name: "HuggingFace Hub docs", url: "https://huggingface.co/docs/hub/", problem_class: "model-hub" }
49
+ - { name: "OpenRouter docs", url: "https://openrouter.ai/docs", problem_class: "model-routing" }
50
+ - { name: "Docker Model Runner docs", url: "https://docs.docker.com/ai/model-runner/", problem_class: "local-inference" }
51
+ - { name: "ChromaDB docs", url: "https://docs.trychroma.com/", problem_class: "vector-db" }
52
+ - { name: "Google AIP", url: "https://google.aip.dev/", problem_class: "api-design-standard" }
53
+ - { name: "OpenAPI 3.1 spec", url: "https://spec.openapis.org/oas/v3.1.0", problem_class: "api-contract" }
54
+ - { name: "AsyncAPI spec", url: "https://www.asyncapi.com/docs/reference/specification/latest", problem_class: "event-contract" }
55
+ - { name: "Twelve-Factor App", url: "https://12factor.net/", problem_class: "saas-app-design" }
56
+ - { name: "Martin Fowler", url: "https://martinfowler.com/", problem_class: "enterprise-patterns" }
57
+ - { name: "Designing Data-Intensive Applications", url: "https://dataintensive.net/", problem_class: "distributed-data" }
58
+
59
+ mishmar: # Security
60
+ - { name: "OWASP Top 10", url: "https://owasp.org/Top10/", problem_class: "web-app-risk" }
61
+ - { name: "OWASP API Security Top 10 2023", url: "https://owasp.org/API-Security/editions/2023/en/0x00-header/", problem_class: "api-risk" }
62
+ - { name: "OWASP ASVS", url: "https://owasp.org/www-project-application-security-verification-standard/", problem_class: "verification-standard" }
63
+ - { name: "OWASP Cheat Sheet Series", url: "https://cheatsheetseries.owasp.org/", problem_class: "secure-coding-lookup" }
64
+ - { name: "MITRE ATT&CK", url: "https://attack.mitre.org/", problem_class: "adversary-tactics" }
65
+ - { name: "MITRE CWE Top 25", url: "https://cwe.mitre.org/top25/", problem_class: "code-weakness-patterns" }
66
+ - { name: "NVD / CVE", url: "https://nvd.nist.gov/", problem_class: "vulnerability-data" }
67
+ - { name: "OSV.dev", url: "https://osv.dev/", problem_class: "dependency-vulnerabilities" }
68
+ - { name: "SLSA Framework", url: "https://slsa.dev/", problem_class: "supply-chain-security" }
69
+ - { name: "Keycloak documentation", url: "https://www.keycloak.org/documentation", problem_class: "identity-provider" }
70
+ - { name: "Keycloak hardening guide", url: "https://www.keycloak.org/server/hardening", problem_class: "identity-hardening" }
71
+ - { name: "SOPS documentation", url: "https://getsops.io/docs/", problem_class: "secret-management" }
72
+ - { name: "age encryption", url: "https://age-encryption.org/", problem_class: "encryption" }
73
+ - { name: "STRIDE threat modeling", url: "https://learn.microsoft.com/en-us/azure/security/develop/threat-modeling-tool-threats", problem_class: "threat-modelling" }
74
+ - { name: "NIST SSDF SP 800-218", url: "https://csrc.nist.gov/Projects/ssdf", problem_class: "secure-sdlc" }
75
+ - { name: "CIS Benchmarks", url: "https://www.cisecurity.org/cis-benchmarks", problem_class: "hardening-baselines" }
76
+ - { name: "Traefik security docs", url: "https://doc.traefik.io/traefik/https/tls/", problem_class: "tls-ingress-security" }
77
+
78
+ migdal: # Infrastructure
79
+ - { name: "Docker Compose docs", url: "https://docs.docker.com/compose/", problem_class: "container-orchestration" }
80
+ - { name: "Docker networking docs", url: "https://docs.docker.com/network/", problem_class: "container-networking" }
81
+ - { name: "Docker security docs", url: "https://docs.docker.com/engine/security/", problem_class: "container-security" }
82
+ - { name: "Traefik v3 docs", url: "https://doc.traefik.io/traefik/", problem_class: "reverse-proxy" }
83
+ - { name: "GitLab CI/CD docs", url: "https://docs.gitlab.com/ee/ci/", problem_class: "ci-cd-pipeline" }
84
+ - { name: "GitLab CI variables", url: "https://docs.gitlab.com/ee/ci/variables/", problem_class: "ci-secrets" }
85
+ - { name: "GitLab protected branches", url: "https://docs.gitlab.com/ee/user/project/protected_branches.html", problem_class: "deploy-gating" }
86
+ - { name: "Ansible docs", url: "https://docs.ansible.com/", problem_class: "config-management" }
87
+ - { name: "Kubernetes docs", url: "https://kubernetes.io/docs/home/", problem_class: "k8s-orchestration" }
88
+ - { name: "Terraform best practices", url: "https://www.terraform-best-practices.com/", problem_class: "iac-patterns" }
89
+ - { name: "CIS Kubernetes Benchmark", url: "https://www.cisecurity.org/benchmark/kubernetes", problem_class: "k8s-hardening" }
90
+ - { name: "AWS Well-Architected", url: "https://aws.amazon.com/architecture/well-architected/", problem_class: "cloud-architecture-review" }
91
+ - { name: "GCP Architecture Framework", url: "https://cloud.google.com/architecture/framework", problem_class: "cloud-architecture-review" }
92
+ - { name: "CNCF Landscape", url: "https://landscape.cncf.io/", problem_class: "cloud-native-tooling" }
93
+ - { name: "OpenTelemetry docs", url: "https://opentelemetry.io/docs/", problem_class: "observability-instrumentation" }
94
+ - { name: "Prometheus docs", url: "https://prometheus.io/docs/", problem_class: "metrics" }
95
+ - { name: "Grafana docs", url: "https://grafana.com/docs/", problem_class: "dashboards" }
96
+ - { name: "Loki docs", url: "https://grafana.com/docs/loki/latest/", problem_class: "log-aggregation" }
97
+ - { name: "Sentry docs", url: "https://docs.sentry.io/", problem_class: "error-tracking" }
98
+ - { name: "Google SRE Book", url: "https://sre.google/sre-book/table-of-contents/", problem_class: "sre-foundation" }
99
+ - { name: "Google SRE Workbook", url: "https://sre.google/workbook/table-of-contents/", problem_class: "sre-practice" }
100
+ - { name: "NIST CSF 2.0", url: "https://www.nist.gov/cyberframework", problem_class: "security-posture" }
101
+
102
+ sefer: # Documentation
103
+ - { name: "Diátaxis Framework", url: "https://diataxis.fr/", problem_class: "doc-architecture" }
104
+ - { name: "Google Dev Documentation Style Guide", url: "https://developers.google.com/style", problem_class: "technical-writing-style" }
105
+ - { name: "MADR ADR template", url: "https://adr.github.io/madr/", problem_class: "adr-format" }
106
+ - { name: "C4 Model", url: "https://c4model.com/", problem_class: "architecture-diagrams" }
107
+ - { name: "Keep a Changelog", url: "https://keepachangelog.com/en/1.1.0/", problem_class: "changelog-convention" }
108
+ - { name: "Semantic Versioning 2.0", url: "https://semver.org/", problem_class: "versioning" }
109
+ - { name: "Conventional Commits", url: "https://www.conventionalcommits.org/en/v1.0.0/", problem_class: "commit-convention" }
110
+ - { name: "OpenAPI → API docs", url: "https://spec.openapis.org/oas/v3.1.0", problem_class: "api-documentation" }
111
+ - { name: "Stripe API docs (quality benchmark)", url: "https://docs.stripe.com/api", problem_class: "api-doc-quality-bar" }
112
+ - { name: "Docusaurus", url: "https://docusaurus.io/", problem_class: "docs-site-generator" }
113
+ - { name: "Write the Docs", url: "https://www.writethedocs.org/guide/", problem_class: "docs-workflow" }
@@ -0,0 +1,29 @@
1
+ # MISHKAN — Improvement Layer Queries
2
+
3
+ Saved queries the improvement layer runs against Cognee (and the observability
4
+ aggregate) to make MISHKAN better over time. Run after `/sprint-close`, once two
5
+ or three sprints of data exist.
6
+
7
+ These are intent specifications; the concrete query syntax binds to the deployed
8
+ Cognee API (D-001). Each maps to an action.
9
+
10
+ | # | Query intent | Reads | Action it drives |
11
+ |---|---|---|---|
12
+ | 1 | **Most expensive agents per sprint** | observability aggregate (cost, tokens) + `Agent` nodes | Prompt-optimisation targets; retier a costly Sonnet→Haiku where quality allows |
13
+ | 2 | **Tools called most per team** | observability aggregate (tool_calls) grouped by team | MCP access refinement; prune unused tool grants, keep the <10 MCP / <80 tool budget |
14
+ | 3 | **Blocker hot spots** | `Task` nodes with `blocks` edges, clustered | Workflow bottleneck detection; resequence or split tasks |
15
+ | 4 | **Components accumulating findings** | `SecurityFinding` nodes grouped by `location` | Structural risk surfacing; flag a component for refactor/threat-review |
16
+ | 5 | **Curated library hit rate per problem class** | `CuratedLibraryHit` joined to `CuratedResource` | Identify under-used resources (prune) and high-value ones (promote); detect gaps where the web pipeline is used because the library lacks coverage |
17
+ | 6 | **Cache hit rate per agent** | observability aggregate (tokens_cached / tokens_input) | Validate the token-optimisation layer; fix agents whose static prefix is not caching |
18
+ | 7 | **Research outcome ratio** | `ResearchOutput` nodes (resolved/partial/blocked) | Detect problem classes the pipeline repeatedly fails; seed the curated library |
19
+
20
+ ## Cadence
21
+
22
+ - Per sprint close: run queries 1–3, 6 (cost + flow health).
23
+ - Every ~3 sprints: run queries 4, 5, 7 (structural + library health).
24
+
25
+ ## Owner
26
+
27
+ Nehemiah + Bezalel review the outputs at sprint close and decide actions
28
+ (retiering, MCP pruning, library updates, refactor flags). The improvement layer
29
+ surfaces; the orchestrators act.
@@ -0,0 +1,87 @@
1
+ # MISHKAN model routing — Claude tiers only (decision D-002, no local models).
2
+ # AUTHORITATIVE: the PreToolUse hook hooks/model-route.py reads this file on
3
+ # every Task/Agent call and injects `model` for any agent LISTED below, which
4
+ # overrides that agent's frontmatter `model:`. So this file is the single source
5
+ # of truth for the 45 MISHKAN agents. Agents NOT listed here (e.g. aiobi-ops,
6
+ # Explore) are left untouched and keep their own frontmatter model. Three tiers:
7
+ # opus, sonnet, haiku. (Edit here, not frontmatter — frontmatter is the fallback
8
+ # used only if the hook is removed.)
9
+ #
10
+ # Rationale per tier:
11
+ # opus — orchestration, team leadership, knowledge publication (judgement-heavy)
12
+ # sonnet — anything that WRITES code/config into the codebase (precision matters
13
+ # on Y4NN's code) + senior specialists + research clarify/formulate/research
14
+ # haiku — agents that do NOT write code: QA (evaluate-only), Reporters
15
+ # (collect-only), pure advisors (Deborah, Rehum), research
16
+ # summarise/evaluate/report. Cost-sensitive, no precision risk to code.
17
+
18
+ defaults:
19
+ unlisted_agent: sonnet # documented default tier for a NEW mishkan agent not
20
+ # yet added below. NOT hook-enforced on foreign agents
21
+ # (they keep their own model). Add new agents to the map.
22
+
23
+ agents:
24
+ # Orchestration
25
+ nehemiah: opus
26
+ bezalel: opus
27
+
28
+ # Research pipeline
29
+ jakin: sonnet
30
+ ezra: sonnet
31
+ caleb: sonnet
32
+ shaphan: haiku
33
+ shemaiah: haiku
34
+ baruch: haiku
35
+
36
+ # Mishmar (Security)
37
+ phinehas: opus # lead
38
+ ira: sonnet
39
+ benaiah: sonnet
40
+ joab: sonnet
41
+ hushai: sonnet
42
+ maaseiah: haiku # reporter
43
+
44
+ # Yasad (Backend)
45
+ zerubbabel: opus # lead
46
+ nathan: sonnet # architecture
47
+ zadok: sonnet # contracts / design system
48
+ hizkiah: sonnet # implementation — writes backend code
49
+ shallum: sonnet # databases
50
+ uriah: haiku # QA
51
+ igal: haiku # reporter
52
+
53
+ # Chosheb (Design)
54
+ aholiab: opus # lead
55
+ hiram: sonnet # writes prototype code
56
+ deborah: haiku # advisory only, no code
57
+ elasah: haiku # reporter
58
+
59
+ # Panim (Frontend)
60
+ huram: opus # lead
61
+ oholiab: sonnet # design system expert
62
+ salma: sonnet # writes frontend code
63
+ obed: sonnet # writes asset-pipeline config
64
+ asaph: sonnet # remediates markup
65
+ jahaziel: haiku # QA — evaluate only
66
+ ahikam: haiku # reporter
67
+
68
+ # Migdal (Infrastructure)
69
+ eliashib: opus # lead
70
+ meshullam: sonnet # infra design
71
+ palal: sonnet # writes system configs/scripts
72
+ meremoth: sonnet # writes CI/pipeline code
73
+ hanun: sonnet # writes hardening/observability config
74
+ rehum: haiku # advisor — no code
75
+ zaccur: haiku # reporter
76
+
77
+ # Sefer (Documentation)
78
+ jehoshaphat: opus # lead
79
+ seraiah: sonnet
80
+ joah: sonnet
81
+ shevna: haiku
82
+ jehonathan: opus # knowledge publication
83
+ huldah: haiku # reporter
84
+
85
+ # Tier totals: opus=9, sonnet=22, haiku=14 (45 agents)
86
+ # Principle: any agent that writes code/config into the codebase runs on Sonnet
87
+ # (precision on Y4NN's code). Haiku only for evaluate/collect/advise roles.
@@ -0,0 +1,38 @@
1
+ # MISHKAN project registry — portable, NOT machine-bound.
2
+ # The cross-project dependency audit discovers projects rather than hardcoding
3
+ # paths. Resolution order:
4
+ # 1. $MISHKAN_WORKSPACE env var, if set
5
+ # 2. workspace_root below, if set (supports ~ and $HOME)
6
+ # 3. the current working directory's parent
7
+ # Under the resolved workspace root, every git repository is treated as a project
8
+ # (excluding the dirs below). Set explicit `project_roots` only to override
9
+ # discovery. Ship with discovery on and no hardcoded paths.
10
+
11
+ workspace_root: "" # e.g. "~/Projects" — empty = auto (env or cwd parent)
12
+
13
+ project_roots: [] # explicit override; empty = discover git repos under workspace_root
14
+
15
+ # Manifest/lockfile filenames the audit looks for in each project (recursively,
16
+ # excluding the dirs below).
17
+ manifest_globs:
18
+ - package.json
19
+ - pnpm-lock.yaml
20
+ - requirements*.txt
21
+ - pyproject.toml
22
+ - poetry.lock
23
+ - uv.lock
24
+ - go.mod
25
+ - Cargo.toml
26
+ - composer.json
27
+ - composer.lock
28
+ - pom.xml
29
+ - build.gradle
30
+
31
+ exclude_dirs:
32
+ - node_modules
33
+ - vendor
34
+ - .git
35
+ - dist
36
+ - build
37
+ - .venv
38
+ - target