@zerwiz/ymir 0.1.14 → 0.1.15

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 (78) hide show
  1. package/.agents/agents/brokk.md +10 -9
  2. package/.agents/agents/forseti-reviewer.md +2 -2
  3. package/.agents/agents/mimir-planner.md +2 -2
  4. package/.agents/assets/agents/registry.md +22 -0
  5. package/.agents/config/agents.yaml +53 -0
  6. package/.agents/config/{cron.yaml → cron.yaml.example} +5 -3
  7. package/.agents/config/tailscale-sync.yaml +9 -0
  8. package/.agents/config/wedge-alarm +3 -0
  9. package/.agents/migrations/0003-private-data-separation.sh +4 -4
  10. package/.agents/skills/galdr-ymirsystem/assets/harness-integration/README.md +6 -1
  11. package/.agents/skills/galdr-ymirsystem/assets/installation.md +5 -4
  12. package/.agents/skills/galdr-ymirsystem/assets/memory-well.md +5 -5
  13. package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +59 -4
  14. package/.agents/skills/galdr-ymirsystem/assets/registry.md +74 -338
  15. package/.agents/skills/galdr-ymirsystem/assets/runtime-compliance.md +1 -1
  16. package/.agents/skills/galdr-ymirsystem/assets/smidja.md +5 -3
  17. package/.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh +1 -1
  18. package/.agents/skills/ratatoskr-a2a/SKILL.md +1 -1
  19. package/.agents/skills/tyr-check/SKILL.md +5 -5
  20. package/.agents/skills/ymir-host/SKILL.md +1 -1
  21. package/.agents/state/.wake-queue +0 -0
  22. package/.agents/state/.wake-queue.seq +1 -0
  23. package/.agents/state/.watcher-down +1 -0
  24. package/.agents/state/procevent-inbox/when-hall-button.1.adapter +1 -0
  25. package/.agents/state/procevent-inbox/when-hall-button.1.handled +0 -0
  26. package/.agents/state/procevent-inbox/when-hall-button.1.result +8 -0
  27. package/.agents/state/procevent-inbox/when-hall-button.2.adapter +1 -0
  28. package/.agents/state/procevent-inbox/when-hall-button.2.handled +0 -0
  29. package/.agents/state/procevent-inbox/when-hall-button.2.result +5 -0
  30. package/.agents/state/procevent-inbox/when-odrerir.1.adapter +1 -0
  31. package/.agents/state/procevent-inbox/when-odrerir.1.handled +0 -0
  32. package/.agents/state/procevent-inbox/when-odrerir.1.result +8 -0
  33. package/.agents/state/procevent-inbox/when-odrerir.2.adapter +1 -0
  34. package/.agents/state/procevent-inbox/when-odrerir.2.handled +0 -0
  35. package/.agents/state/procevent-inbox/when-odrerir.2.result +5 -0
  36. package/.agents/state/procevent-inbox/when-odrerir.3.adapter +1 -0
  37. package/.agents/state/procevent-inbox/when-odrerir.3.handled +0 -0
  38. package/.agents/state/procevent-inbox/when-odrerir.3.result +5 -0
  39. package/.agents/state/procevent-inbox/when-odrerir.4.adapter +1 -0
  40. package/.agents/state/procevent-inbox/when-odrerir.4.handled +0 -0
  41. package/.agents/state/procevent-inbox/when-odrerir.4.result +8 -0
  42. package/.agents/state/procevent-inbox/when-odrerir.5.adapter +1 -0
  43. package/.agents/state/procevent-inbox/when-odrerir.5.handled +0 -0
  44. package/.agents/state/procevent-inbox/when-odrerir.5.result +8 -0
  45. package/.agents/state/procevent-inbox/when-sessrumnir-cloth.1.adapter +1 -0
  46. package/.agents/state/procevent-inbox/when-sessrumnir-cloth.1.handled +0 -0
  47. package/.agents/state/procevent-inbox/when-sessrumnir-cloth.1.result +8 -0
  48. package/AGENTS.md +17 -10
  49. package/CHANGELOG.md +123 -0
  50. package/bin/a2a-mcp.sh +9 -2
  51. package/bin/app-lib.sh +8 -1
  52. package/bin/docs-guard.sh +1 -1
  53. package/bin/erindi-brief.sh +1 -1
  54. package/bin/hamr-harness.sh +1 -1
  55. package/bin/hoard-lib.sh +10 -0
  56. package/bin/mimir-bridge.py +8 -1
  57. package/bin/mimir-bridge.sh +7 -1
  58. package/bin/mimir-reflect.sh +8 -1
  59. package/bin/nornir-cron-start.sh +21 -1
  60. package/bin/nornir-job-bragi-scrape.sh +116 -0
  61. package/bin/nornir-job-daily-briefing.sh +7 -7
  62. package/bin/nornir-job-forgejo-git.sh +87 -0
  63. package/bin/nornir-job-observer.sh +5 -4
  64. package/bin/rodd-operational-input.sh +1 -1
  65. package/bin/saga-session-start.sh +4 -3
  66. package/bin/sessrumnir.sh +11 -0
  67. package/bin/syn-arm-pretool-check.sh +1 -1
  68. package/bin/syn-cd-pretool-check.sh +1 -1
  69. package/bin/syn-watch-arm.sh +1 -1
  70. package/bin/vor-crew-state.sh +1 -1
  71. package/bin/ymir-install.sh +47 -2
  72. package/bin/ymir-marketing-stack.sh +323 -0
  73. package/docs/runbooks/models.md +1 -1
  74. package/docs/workspaces.md +4 -0
  75. package/package.json +8 -2
  76. package/scripts/electron.sh +2 -2
  77. package/.agents/bus/messages.json +0 -1
  78. package/.agents/config/agents.machine.example.yaml +0 -16
@@ -1,379 +1,115 @@
1
- # Galdr Registry — skills, tools, commands, profiles, schemas
1
+ # Registry — skills, assets, tools, commands (loaded from AGENTS.md)
2
2
 
3
- The reference registries Galdr routes to when synthesizing or validating a skill.
4
- Load this when the task is about skill synthesis, the tool inventory, OpenCode
5
- commands, or compliance assets.
3
+ AGENTS.md loads this when a task needs the live inventories.
6
4
 
7
- ## Internal skills registry
5
+ ## Skills registry (`.agents/skills/`)
8
6
 
9
7
  ```
10
- skills[26]{name,norse,purpose,path,status}:
11
- "galdr","Galdr","AXI incantation standards + master builder/maintainer",".agents/skills/galdr-ymirsystem/SKILL.md","live"
12
- "tyr-check","Tyr","The judge — validates tools/skills/docs against the 10 principles",".agents/skills/tyr-check/SKILL.md","live"
13
- "rules-check-drift","Tyr","Rules-file drift checker keeps AGENTS.md true after code changes",".agents/skills/rules-check-drift/SKILL.md","live"
14
- "smidja-factory","Smíðja","The smithy — agent factory: roster, phases, envelopes, visualizer",".agents/skills/smidja-factory/SKILL.md","live"
15
- "no-mistakes","—","The clean-PR gate — vendored engine skill: validate, push, PR, CI",".agents/skills/no-mistakes/SKILL.md","live"
16
- "hvild-afk","Hvíld","Away-mode supervision — routine wakes, batched escalations",".agents/skills/hvild-afk/SKILL.md","live"
17
- "saga-bearings","Sága","Bearings (/bearings) + recap and unresolved decisions (/ahoy)",".agents/skills/saga-bearings/SKILL.md","live"
18
- "muninn-stow","Muninn","Session-knowledge curation, routing, persistence",".agents/skills/muninn-stow/SKILL.md","live"
19
- "jord-projects","Jörð","Project registry + delivery posture",".agents/skills/jord-projects/SKILL.md","live"
20
- "urdh-hold","Urðr","Allfather-hold lifecycle: decisions held for the Allfather, reconciled",".agents/skills/urdh-hold/SKILL.md","live"
21
- "frigg-consent","Frigg","Consent / ask-user authority gate",".agents/skills/frigg-consent/SKILL.md","live"
22
- "vor-diagnostics","Vör","Bootstrap + diagnostic reasoning",".agents/skills/vor-diagnostics/SKILL.md","live"
23
- "nornir-schedule","Nornir","Fate & schedule: process→event sources + quota-aware dispatch",".agents/skills/nornir-schedule/SKILL.md","live"
24
- "nsr-compliance","—","NorthStar scaffold/audit + the .compliance/ harness",".agents/skills/nsr-compliance/SKILL.md","live"
25
- "lifecycle","—","Start/stop/status/smoke-test wiring contract",".agents/skills/lifecycle/SKILL.md","live"
26
- "gjallarhorn-relay","Gjallarhorn","Public relay replies (X/Discord)",".agents/skills/gjallarhorn-relay/SKILL.md","live"
27
- "eindri-homes","Eindri","Isolated worker homes (provisioning)",".agents/skills/eindri-homes/SKILL.md","live"
28
- "syn-recovery","Sýn","Stuck-worker recovery playbook",".agents/skills/syn-recovery/SKILL.md","live"
29
- "ymir-host","Ymir","Self-update · Omarchy-native operation · the Þjazi backend",".agents/skills/ymir-host/SKILL.md","live"
30
- "groa-update","Gróa","The updater shaman — self-update Brokk + every Eindri-home",".agents/skills/groa-update/SKILL.md","live"
31
- "herdr-panes","Þjazi","Terminal panes — seat/control panes, tabs, workspaces, agents",".agents/skills/herdr-panes/SKILL.md","live"
32
- "ratatoskr-a2a","Ratatoskr","A2A/MCP mesh — a2abridge + wayofteams; registration",".agents/skills/ratatoskr-a2a/SKILL.md","live"
33
- "hamr-adapters","Hamr","Per-harness adapter reference",".agents/skills/hamr-adapters/SKILL.md","live"
34
- "pr-ops","—","PR lifecycle — create, update, status, request merge",".agents/skills/pr-ops/SKILL.md","live"
35
- "hnoss-design","Hnoss","Design artifacts via OpenDesign (prototypes, decks, dashboards, video)",".agents/skills/hnoss-design/SKILL.md","live"
36
- "bragi-marketing","Bragi","Marketing — research/crawl (Firecrawl), agentic browser (browser-use)",".agents/skills/bragi-marketing/SKILL.md","live"
8
+ skills[3]{name,norse,purpose,path,status}:
9
+ "galdr","Galdr","agent-CLI ergonomics + master builder/maintainer",".agents/skills/galdr-ymirsystem/SKILL.md","live"
10
+ "tyr-check","Tyr","the judge — 10 principles + runtime gates",".agents/skills/tyr-check/SKILL.md","live"
11
+ "brokk-craft","Brokk","the forgergenerates Galdr-compliant skills in TOON","(planned) .agents/skills/brokk-craft/SKILL.md","planned"
37
12
  ```
38
13
 
39
- **Loading:** Skills auto-load from `.agents/skills/` via `opencode.json`
40
- `skills.paths: [".agents/skills"]`. Use the `skill` tool: `skill galdr`,
41
- `skill tyr-check`.
14
+ The **canonical, complete** skill index is `.agents/skills/README.md` — read it for
15
+ the live set. The two removed legacy skills (`galdr-compliance`, `galdr-crafter`)
16
+ are superseded by `tyr-check` and the planned `brokk-craft`; their files are gone.
42
17
 
43
- ## The Einherjar agent fleet
18
+ Loading: auto-load from `.agents/skills/` via `opencode.json` →
19
+ `skills.paths: [".agents/skills"]`. Use `skill galdr`, `skill tyr-check`.
44
20
 
45
- Eight specialists, one primary. Each is named for the figure whose role matches its work.
21
+ ## Galdr assets (`.agents/skills/galdr-ymirsystem/assets/`)
46
22
 
47
23
  ```
48
- einherjar[20]{agent,norse,role,file}:
49
- "Brokk","Brokk","Primary forge-master, dispatcher, supervisor",".agents/agents/brokk.md"
50
- "Sindri","Sindri","Developer code synthesis, refactoring, tests, CLI tools",".agents/agents/sindri-developer.md"
51
- "Bragi","Bragi","Marketer content, SEO, social copy, campaigns",".agents/agents/bragi-marketer.md"
52
- "Huginn","Huginn","Researcher RAG, web search, analysis",".agents/agents/huginn-researcher.md"
53
- "Mimir","Mimir","Planner memory, recall, architecture sequencing",".agents/agents/mimir-planner.md"
54
- "Kvasir","Kvasir","Scout reconnaissance, investigation",".agents/agents/kvasir-scout.md"
55
- "Forseti","Forseti","Reviewer — QA, acceptance, compliance",".agents/agents/forseti-reviewer.md"
56
- "Snotra","Snotra","Documenter — docs, changelogs, runbooks",".agents/agents/snotra-documenter.md"
57
- "Hnoss","Hnoss","Designer — UI/UX, prototypes, decks, visual assets",".agents/agents/hnoss-designer.md"
58
- "Galdr","Galdr","Builder — agent-CLI ergonomics, the runtime's master builder",".agents/agents/galdr.md"
59
- "Týr","Týr","Judge — the 10 principles + the runtime gates",".agents/agents/tyr-check.md"
60
- "Sága","Sága","Seeress — bearings + recap",".agents/agents/saga-bearings.md"
61
- "Muninn","Muninn","Rememberer — memory curation",".agents/agents/muninn-stow.md"
62
- "Urðr","Urðr","Fate — the hold lifecycle",".agents/agents/urdh-hold.md"
63
- "Frigg","Frigg","Knowing — the consent gate",".agents/agents/frigg-consent.md"
64
- "Vör","Vör","Aware — diagnostics",".agents/agents/vor-diagnostics.md"
65
- "Sýn","Sýn","Seeing — stuck-worker recovery",".agents/agents/syn-recovery.md"
66
- "Jörð","Jörð","Grounded — the project registry",".agents/agents/jord-projects.md"
67
- "Gróa","Gróa","Renewer — self-update",".agents/agents/groa-update.md"
68
- "Völundr","Völundr","Master smith — Smíðja's orchestrator seat",".agents/agents/volundr-smith.md"
24
+ galdr_assets[6]{path,load_when}:
25
+ "assets/README.md","the full asset routing index"
26
+ "assets/principles.md","the 10 CLI design principles (full doctrine)"
27
+ "assets/norse-naming.md","naming law + full component map"
28
+ "assets/brokk-distro-runtime.md","the runtime spec (home, digest, lock, cron)"
29
+ "assets/harness-integration/","per-harness adapters (opencode, pi, claude, cursor, codex)"
30
+ "assets/runtime-compliance.md","runtime acceptance gates + runnable checklist"
69
31
  ```
70
32
 
71
- **Rule:** Every agent carries its rune of introduction (Agent Card). Every agent
72
- reports to Brokk. Brokk reports to the Allfather.
33
+ Galdr scripts: `scripts/toon-check.py` (TOON validation) and
34
+ `scripts/compliance-check.sh` (all gates). Run the latter before claiming done.
73
35
 
74
- ## Legacy sub-agent profiles (`.agents/subagents/*.md` — superseded)
36
+ ## Assets inventory
75
37
 
76
- These profiles were superseded by the Einherjar fleet above. They remain for
77
- historical reference only.
78
-
79
- ```
80
- eindri[3]{role,norse,domain,capabilities,tools,workspaces}:
81
- "developer","Sindri (smith)","code synthesis, refactoring, tests, CLI tools, packaging","code_synthesis, refactoring, test_writing, cli_tools, package_management","yggdrasil, herder, hermes_runner, vector_db, supabase","development/, .agents/tools/, .agents/skills/"
82
- "marketer","Bragi (skald)","content, SEO, social copy, campaigns","content_creation, seo_optimization, social_copy, campaign_planning, market_research","vector_db, supabase, hermes_runner, herder, yggdrasil","marketing/, .agents/assets/templates/, .agents/skills/"
83
- "researcher","Huginn (sage)","RAG, web search, analysis, knowledge discovery","rag_search, web_search, analysis, summarization, entity_extraction","vector_db, hermes_runner, herder, yggdrasil, supabase","development/, .agents/memory/, .agents/assets/templates/"
84
- ```
85
-
86
- All three declare the Utgard security posture: `runs_in_utgard: true`,
87
- `utgard_network: none`, `utgard_resource_caps: true`, `yggdrasil_worktree: true`,
88
- `sandboxed: true`.
89
-
90
- ## Build tool categories (`.agents/skills/galdr-ymirsystem/assets/build-tool-categories.md`)
91
-
92
- ```
93
- build_tools[4]{category,role}:
94
- "Python smidja tools","deterministic Python orchestrators in `templates/smidja/`"
95
- "smidja","validated OSS smidja (agents + typed JSON envelopes + SQLite trace + Vue visualizer)"
96
- "Agent-distro orchestration","validated upstream distro pattern (see porting asset)"
97
- "Galdr skill assets","internal reference data under `assets/`"
98
38
  ```
99
-
100
- ## TOON output schemas (`.agents/skills/galdr-ymirsystem/schemas/toon-schemas.md`)
101
-
102
- ```
103
- schemas[7]{schema,fields}:
104
- "Smíðja orchestrator","status, phase, progress, next_action, utgard_sandbox, worktree, phase_complete"
105
- "Worker orchestration","status, agent_role, worktree, utgard, sandboxed, session_id"
106
- "Galdr skill generator","name, category, toon_output, principles, compliance_status, eindri_role, utgard_sandbox"
107
- "Eindri profile","capabilities, tools, workspace_patterns, security"
108
- "Norse aett naming","aett pattern, validity, rejection reasons"
109
- "Session integration","hook, installed, skill_loaded, ambient_context, context_richness, last_session_start"
110
- "Compliance gate results","toon_output_test, principle_compliance, norse_name_validity, frame_integration, mimirsbrunn_observation, eindri_compatibility, utgard_sandbox"
39
+ assets[9]{asset,path,purpose}:
40
+ "Eindri profiles",".agents/subagents/*.md","Sindri/Bragi/Huginn role profiles"
41
+ "Build tool categories",".agents/skills/galdr-ymirsystem/assets/build-tool-categories.md","tool categories for synthesis"
42
+ "TOON schemas",".agents/skills/galdr-ymirsystem/schemas/toon-schemas.md","schema types for validation"
43
+ "Compliance requirements",".agents/skills/galdr-ymirsystem/assets/runtime-compliance.md","runtime + Utgard gates"
44
+ "PI boot profile",".agents/skills/galdr-ymirsystem/assets/pi-boot/pi-profile.yml","PI harness profile"
45
+ "PI herdr profile",".agents/skills/galdr-ymirsystem/assets/pi-boot/herdr-profile.toml","pane layout / Þjazi"
46
+ "PI dispatch schema",".agents/skills/galdr-ymirsystem/assets/pi-boot/einherjar-spawn.schema.json","dispatch payload"
47
+ "Templates",".agents/assets/templates/*","PRD, env, system-prompt boilerplate"
48
+ "Tool manifest schema",".agents/assets/schemas/tool_manifest.json","tool manifest"
111
49
  ```
112
50
 
113
- ## Norse aett pattern
51
+ ## Tools inventory (`.agents/tools/`)
114
52
 
115
53
  ```
116
- aett[8]{prefix,pattern,examples}:
117
- "galdr-","incantation / chant standards","galdr, galdr-compliance, galdr-crafter"
118
- "val-","hall / health","valhalla"
119
- "skyr-","giant / file scope","skrymir"
120
- "bifr-","bridge / gateway","bifrost"
121
- "heimd-","gate / guard","heimdall"
122
- "gjallar-","horn / signal","gjallarhorn"
123
- "mimir-","memory / wisdom","mimir-recall, mimirsbrunn"
124
- "yggd-","tree / worktree","yggdrasil, yggd-branch"
125
- ```
126
-
127
- **Naming form:** `<aett>-<verb|noun|adjective>`, e.g. `mimir-recall`, `yggd-branch`.
128
- The aett table lives in `SKILL.md:288-301` and `assets/norse-naming.md`; keep both
129
- in sync when an aett gains its first real skill.
130
-
131
- **Aett prefix rules:**
132
- - `galdr-` is reserved for Galdr-family skills (incantation/chant standards)
133
- - `val-` is for hall/health subsystems
134
- - `skyr-` is for giant/file-scope tools
135
- - `bifr-` is for bridge/gateway components
136
- - `heimd-` is for gate/guard components
137
- - `gjallar-` is for horn/signal components
138
- - `mimir-` is for memory/wisdom components
139
- - `yggd-` is for tree/worktree components
140
-
141
- ## Internal tools inventory
142
-
143
- ```
144
- tools[9]{tool,path,purpose,status}:
145
- "tasks-cli",".agents/tools/bin/tasks-cli","AXI task manager (list/view/create/close), TOON output","live"
54
+ tools[8]{tool,path,purpose,status}:
55
+ "tasks-cli",".agents/tools/bin/tasks-cli","AXI task manager (list/view/create/close), TOON","live"
146
56
  "tasks-cli.ts",".agents/tools/tasks-cli.ts","TypeScript source","live"
147
- "agents-config.sh","bin/agents-config.sh","Show/apply the personal agent→model combination (config/agents.yaml)","live"
148
- "yggdrasil.ts",".agents/tools/yggdrasil.ts","Worktree CLI harness","planned"
149
- "hermes_runner.ts",".agents/tools/hermes_runner.ts","Realm agent CLI orchestrator","planned"
150
- "herder.ts",".agents/tools/herder.ts","Terminal multiplexer / pane state tracker","planned"
151
- "vector_db.ts",".agents/tools/vector_db.ts","Vector indexing / RAG search","planned"
152
- "firebase.ts",".agents/tools/firebase.ts","Backend provisioning","planned"
57
+ "yggdrasil.ts",".agents/tools/yggdrasil.ts","worktree CLI harness","planned"
58
+ "hermes_runner.ts",".agents/tools/hermes_runner.ts","realm agent CLI orchestrator","planned"
59
+ "herder.ts",".agents/tools/herder.ts","terminal multiplexer / pane state tracker","planned"
60
+ "vector_db.ts",".agents/tools/vector_db.ts","vector indexing / RAG search","planned"
61
+ "firebase.ts",".agents/tools/firebase.ts","backend provisioning","planned"
153
62
  "supabase.ts",".agents/tools/supabase.ts","DB / edge function setup","planned"
154
63
  ```
155
64
 
156
65
  Usage: `python3 .agents/tools/bin/tasks-cli <command>`. All tools emit TOON.
157
66
 
158
- ### Runtime components added 2026-09-13 (seat-hall · machine lock · guard families)
159
-
160
- ```
161
- added[10]{component,path,purpose}:
162
- "Sessrúmnir GUI","apps/sessrumnir/","vendored pi-desktop fork rebranded: the seat-hall; width-responsive Home/models/modals, narrative agent surfaces (Brokk/Eindri)"
163
- "seat-hall launchers","bin/sessrumnir.sh, bin/sessrumnir-ensure.sh","raise/ensure the Sessrúmnir desktop app (deps+build on first run)"
164
- "machine lock","bin/gleipnir-lock-lib.sh","ONE primary session lock per machine; Eindri-homes keep a per-home lock; state/.lock-path pointer"
165
- "invariant seatbelt","bin/syn-guard-pretool-check.sh","PreToolUse denial for destructive shapes against the lock, markers, Runes, the guard machinery, secrets, registries"
166
- "neutral realm resolver","bin/realm-lib.sh","active realm: data/realm.md → first non-example tenant → default (never a company slug)"
167
- "A2A bridge ensure","bin/a2abridge-ensure.sh","install/verify the a2abridge engine + directory daemon (Ratatoskr mesh)"
168
- "desktop entry","apps/sessrumnir/resources/ymir-sessrumnir.desktop.in","Omarchy launcher entry rendered by bin/desktop-place.sh"
169
- "Gróa (updater shaman)","bin/groa-update.sh","fast-forward Brokk + Eindri-homes, mend forward; the groa-update skill's door (alias bin/brokk-update.sh)"
170
- "Eir (doctor)","bin/eir-doctor.sh","diagnose every surface, then mend the broken (composes the *-ensure.sh surfaces)"
171
- "install auth","bin/ymir-setup-auth.sh","set the operator credential at install (password or GitHub) into .env.local"
172
- ```
173
-
174
- The reference tenant moved to `svartalfaheim/examples/wayof/`; a fresh install
175
- ships no company of its own (see `installation.md` §Neutral tenant defaults).
176
-
177
- ## External tools (adopted, not rebuilt)
178
-
179
- Ymir adopts validated OSS projects first — never rebuilds a subsystem that already
180
- exists on this machine. These are the adopted tools, each wearing a Norse name:
181
-
182
- | OSS Project | Norse Name | Purpose | Path |
183
- |---|---|---|---|
184
- | adopted upstream smithy (provenance: `command-factory`) | **Smíðja** | Deterministic agent pipeline + trace | `.agents/skills/smidja-factory/` |
185
- | `a2aproject/a2a` | **Ratatoskr** | Agent-to-agent collaboration | `.agents/bus/protocol.ts` |
186
- | Redis | **Ratatoskr queue** | Pub/sub message queue | platform service |
187
- | Traefik / Caddy | **Bifrost** | Reverse proxy / routing | platform service |
188
- | OAuth2-proxy | **Heimdall** | Authentication guardian | platform service |
189
- | cloudflared | **Gjallarhorn** | Cloudflare tunnel | platform service |
190
- | MinIO / FileBrowser | **Skrymir** | File browser | platform service |
191
- | PM2 / Docker | **Valhalla** | Process supervisor | platform service |
192
- | MCP servers | **Hermóðr** | Tool composition | `.agents/skills/galdr-ymirsystem/assets/pi-boot/herdr-profile.toml` |
193
- | — (Ymir-owned) | **Gungnir** | Dynamic skill creation | `.agents/skills/` |
194
- | zerwiz/SkillOpt | **Gunnlöð** | Skill optimization (trajectory-driven skill refinement) | `.venv/bin/skillopt-*` |
195
- | OpenDesign CLI | **Od** | Design engine (HTML/PDF/PPTX/video) | `od` CLI |
196
- | Þjazi backend | **Þjazi** | Terminal pane presentation | `config/herdr-presentation-spaces` |
197
- | llama.cpp router | **llama-swap** | Local model serving | `http://127.0.0.1:8080` |
198
-
199
67
  ## OpenCode commands
200
68
 
201
- Available as `/command-name` in OpenCode:
202
-
203
69
  ```
204
70
  commands[8]{command,purpose}:
205
- "create-plan","Create detailed implementation plans iteratively"
206
- "fixes-bump","Bump version across project files"
207
- "fixes-create","Create fix note entry"
208
- "implement-plan","Implement approved plan phase-by-phase"
209
- "rules","Display/manage coding rules"
210
- "standup","Generate daily standup entries"
211
- "ticket-create","Interactive ticket creation"
212
- "validate-plan","Validate plan before implementation"
71
+ "/create-plan","create detailed implementation plans iteratively"
72
+ "/fixes-bump","bump version across project files"
73
+ "/fixes-create","create fix note entry"
74
+ "/implement-plan","implement approved plan phase-by-phase"
75
+ "/rules","display/manage coding rules"
76
+ "/standup","generate daily standup entries"
77
+ "/ticket-create","interactive ticket creation"
78
+ "/validate-plan","validate plan before implementation"
213
79
  ```
214
80
 
215
- ## Session integration hooks
216
-
217
- - **Primary — session hook**: installs/repairs after user intent is clear, provides a
218
- compact dashboard as context at session start, loads every session, works only in
219
- agents that support hooks.
220
- - **Secondary — installable skill**: loads on demand when the agent recognizes a
221
- matching task, no per-session token cost, works in any agent that supports the
222
- skill format.
223
- - Recommended order: hook first (ambient context + live state), skill second (lower
224
- overhead, broader support). They are complementary; install either or both.
225
-
226
- ## Utgard sandbox compliance checklist
227
-
228
- Every Galdr-generated CLI tool must declare:
81
+ ## Brokk commands — the Eindri wake bridge (control)
229
82
 
230
83
  ```
231
- [runs_in_utgard: true]
232
- [utgard_network: none]
233
- [utgard_resource_caps: true]
234
- [yggdrasil_worktree: true]
235
- [sandboxed: true]
84
+ commands[4]{command,purpose}:
85
+ "bin/eindri-watch.sh","the bridge's door: arm/retire/list/reconcile a when-source per smith (Norns' loom)"
86
+ "bin/eindri-seen.sh","bridge condition: has the smith reported? (report file, or herdr left working)"
87
+ "bin/eindri-acclaim.sh","bridge action: file the report, mark done, append the wake queue + desktop note"
88
+ "bin/hall-snapshot.sh","the planning feed: real system state -> public-safe livehall.json for the Óðrerir Hall"
236
89
  ```
237
90
 
238
- Failure to declare all five results in compliance-gate rejection.
239
-
240
- ## Memory (the Well — Mimirsbrunn / engram)
241
-
242
- | Component | Path | Purpose |
243
- |---|---|---|
244
- | Store | `.agents/memory/kaia.engram` | single shared engram memory |
245
- | Append log | `.agents/memory/well/episodes.jsonl` | raw episodes; re-seed source |
246
- | HTTP bridge | `bin/mimir-bridge.py` / `.sh` | `:4602` recall/observe/recent/episode/timeline |
247
- | CLI | `bin/mimir.sh` | health / recall / observe / timeline |
248
- | Ingest | `bin/mimir-ingest.sh` | drink a directory into the well |
249
- | MCP | `engram-mcp` | stdio tools: remember/recall/why/forget/stats |
250
- | Gate API | `apps/hlidskjalf/server/index.ts` | `/api/well`, `/api/well/episode`, `/api/mimir/health` |
251
- | UI | `gates/Well.tsx`, `components/RecallPanel.tsx` | live metrics + click-to-read |
252
-
253
- Full spec: [`memory-well.md`](memory-well.md). Law: **no mock data in the well**.
91
+ ## The marketing stack doors (provisionable one stack, any computer)
254
92
 
255
- ## Smithy runtime (Smíðja)
93
+ `bin/ymir-marketing-stack.sh up|status|down|doors` stands Mautic + Postiz +
94
+ Activepieces (+ optionally Forgejo) on ANY computer — same OSS engines the
95
+ server runs, env-driven, ports virtualized, secrets in the home, never inline.
96
+ The Allfather's server stack (zerwizserver) and the public doors agents reach:
256
97
 
257
- | Component | Path / port | Purpose |
258
- |---|---|---|
259
- | Trace DB | `smidja/smidja_data/smidja.db` | sessions/phases/events/gates/envelopes/agent_sessions (WAL, read-only readers) |
260
- | Roster / config | `smidja/smidja_smidja_config/smidja.config.yaml` | teams, roles, `provider/id` models resolved by **pi** (`~/.pi/agent/models.json`) |
261
- | Run | `justfile` (`just demo/scout/sdlc`), `uv run smidja/smidja_*.py` | chains |
262
- | Visualizer (**Smíðja's eye**) | `.agents/skills/smidja-factory/apps/visualizer/`, served at **`:8437`** (API + built UI) | sessions / trace / decisions / stats / chat |
263
- | Gate API | `apps/hlidskjalf/server/index.ts` `/api/smidja/*` | read-only trace for the Hlidskjalf gates |
264
- | Observer (**Huginn**) | `bin/nornir-job-observer.sh` | self-contained Runes lines, incl. `smidja.runs` |
265
- | Start / stop | `scripts/start.sh` / `scripts/stop.sh` | raises/lowers SPA `:3888`, gate API `:3889`, visualizer `:8437`, Nornir cron, Bifrost bridge |
98
+ ```
99
+ marketing_doors[6]{service,door,reach_note}:
100
+ "Mautic (email automation)","mautic.zerwiz.org -> server 127.0.0.1:8001","list building + campaigns; agent-carved via the local provisioned stack when the public door is closed"
101
+ "Postiz (social publishing)","postiz.zerwiz.org -> server 127.0.0.1:4007","schedule X/LinkedIn/insta; queue per site"
102
+ "Activepieces (workflow)","activepieces.zerwiz.org -> server 127.0.0.1:8080","event->post flows; meetup booked -> thread scheduled"
103
+ "Forgejo (git · issues · PRs)","forgejo.zerwiz.org -> server 127.0.0.1:3030","the local git forge: issues->PR loop lives here"
104
+ "SearXNG (search)","searxng on the server","private search for research (Bragi)"
105
+ "Grafana","grafana on the server :3003","fleet + stack observability"
106
+ ```
266
107
 
267
- Full spec: [`smidja.md`](smidja.md). Lore: `docs/lore.md` §XI / §XIII.
108
+ An agent (Bragi for marketing, Sindri for git) provisions the stack locally for
109
+ any user with `bin/ymir-marketing-stack.sh`; the server stack is the Allfather's
110
+ live one. Public-door exposure on the server is tunnel-driven (cloudflared) —
111
+ mend the door layer on the server, not in the tree.
268
112
 
269
113
  ## Maintaining this
270
114
 
271
- - **Owner:** Brokk. **Router:** `.agents/skills/galdr-ymirsystem/SKILL.md`.
272
- - **Mirror:** `.agents/skills/tyr-check/assets/registry.md`.
273
- - Update a registry row whenever a skill, tool, command, or profile changes.
274
-
275
- ## Organisation law — `RULES/` (domains · houses · Eindri)
276
-
277
- The house law lives in `RULES/`; Galdr must know it (Rule 01/02/03):
278
-
279
- - **A house is a company** — and only that. **WayOf** is the house.
280
- - **A domain is a field of knowledge — a *Grein* (pl. *Greinar*).** The eight:
281
-
282
- | Domain (Grein) | id | Covers |
283
- |---|---|---|
284
- | Ymir Labs | `ymirlabs` | the system itself — agents knowledgeable about Ymir |
285
- | Brokk Forge | `brokkforge` | engineering & build tooling |
286
- | Runestone Labs | `runestone` | records & compliance |
287
- | Muninn Labs | `muninn` | memory & knowledge |
288
- | Dvalin | `dvalin` | crafted tools |
289
- | Utgard Studios | `utgard` | creative |
290
- | Askr | `askr` | human-centered products |
291
- | Mannheim | `mannheim` | holding — allocated when a claim lands |
292
-
293
- - **Eindri are the specialists** (marketer, builder, researcher, planner,
294
- reviewer, documenter, scout, …); each names its **domain** and its **craft**.
295
- - **Agents live only in `.agents/agents/*.md`.** `.opencode/agents` and
296
- `.pi/agents` are **symlinks** to the canonical profiles — never edit them;
297
- edit `.agents/agents/<profile>.md` and run `bin/valknut-load.sh --all`.
298
- - **No mock agents.** Ids, names, domains, models, status are real and sourced;
299
- the demo roster is the one labelled mock and appears only in demo mode.
300
-
301
- **In the code:** the eight are `DOMAINS` (type `DomainId`/`DomainDef`) in
302
- `src/data/realms.ts`; an agent carries `domain` (not `house`); the Forge picker
303
- is labelled **Domain**. `svartalfaheim/<company>/companies/` holds the house
304
- card(s); the eight domain cards live under `.../domains/`. The workspace-folder
305
- union is `TopicId`.
306
-
307
- ## The personal agent/model combination — `config/agents.yaml`
308
-
309
- The Allfather chooses **which smith runs on which model** in one YAML; no other
310
- file hardcodes a model for him.
311
-
312
- - **Source of truth:** `config/agents.yaml` — `default_model` (the fallback),
313
- `providers` (local, keyless servers), and `agents` (name → `provider/model`).
314
- - **Applier:** `bin/agents-config.sh show` prints the live combination (TOON);
315
- `apply` writes `model:` into the canonical `.agents/agents/*.md` (matched by
316
- their `name:`) **and** into project `opencode.json` (`provider` + `agent.*`).
317
- It is idempotent and safe to re-run.
318
- - **Local servers.** A local llama.cpp **router needs the exact served id** —
319
- including the quant suffix, e.g. `frontend-design-expert-8b@q4_k_m`; the bare
320
- alias returns `model not found`. Declared under `providers:` so `apply` places
321
- it in project `opencode.json`.
322
- - **Current choice:** Hnoss the designer runs
323
- `llama.cpp/frontend-design-expert-8b@q4_k_m` on `127.0.0.1:8080` (no cloud
324
- key); the rest inherit `opencode-go/deepseek-v4.1-flash`.
325
- - **Subagent caveat:** a `mode: subagent` profile (Hnoss) cannot be run with
326
- `opencode run --agent`; the lowercased model is taken from its profile when a
327
- primary dispatches it. A thin **primary** alias is the way to prove it end to
328
- end.
329
- - **Template & privacy:** `config/agents.yaml.example` is tracked; installation
330
- (step `host`) or `bin/agents-config.sh init` copies it to the private,
331
- gitignored `config/agents.yaml` — push that to a private repo. Override its
332
- path with `YMIR_AGENTS_YAML`.
333
- - **Harness rule:** the harness is chosen by where the model lives — a local
334
- provider runs through **`pi`**, a hosted model through **`opencode`** — unless
335
- an agent names `harness:`. The same server is renamed per harness
336
- (`llama.cpp` → `llama-cpp` for pi).
337
- - **Updating this registry:** when a new provider or model is added to
338
- `config/agents.yaml`, add its id here and (if it is a new server) to the
339
- external-tools inventory.
340
-
341
- ## Hodd — the private hoard (Rule 04)
342
-
343
- `hodd/` is the ONE private place: `secrets/ · docs/ · tenants/ · identity/`.
344
- `hodd/.gitignore` tracks only itself, the README, and `*.example`; every other
345
- file beneath is untracked on every clone. Secrets are **referenced by path**
346
- (`YMIR_HOARD`; `bin/hodd.sh path|init|ls|load|emit|tenant`), never inlined. The
347
- outer ward is `bin/secret-guard.sh` (pre-commit + CI). Law: `RULES/04-hoard.md`.
348
-
349
- ## Consolidated skills — galdr-style routers (2026-09-12)
350
-
351
- Split pairs were merged into one `SKILL.md` router + `assets/` (a change edits an
352
- asset, not a new skill). Same-figure split pairs only — merging distinct figures
353
- is held pending the naming law.
354
-
355
- consolidated[5]{skill,absorbed,assets}:
356
- "ymir","ymir-update + ymir-omarchy + ymir-thjazi","update · omarchy · thjazi"
357
- "urdh","urdh-decisions + urdh-hold","hold · decisions"
358
- "saga","saga-bearings + saga-recap","bearings · recap · board-template.html"
359
- "nornir","nornir-events + nornir-quota","events · quota"
360
- "nsr","NSR + NSRcompliance","nsr/ · nsrcompliance/"
361
-
362
- **Ruling (2026-09-12):** `frigg-consent` + `hvild-afk` and `syn-recovery` +
363
- `vor-diagnostics` stay **separate** — each names a distinct figure, and the
364
- naming law keeps one figure per skill. Only same-figure split pairs consolidate.
365
-
366
- ## Operator runbooks — `docs/runbooks/` (indexed by the `ymir` skill)
367
-
368
- Task-oriented, operator-facing guides. The `ymir` skill carries the index at
369
- `assets/runbooks.md`; when a capability gains an operator procedure, add a
370
- runbook here and a row there.
371
-
372
- ```
373
- runbooks[5]{file,subject}:
374
- "models.md","models per agent (local llama.cpp / hosted); per-machine overlays"
375
- "agents.md","Eindri profiles: home, add, run, dispatch"
376
- "tailscale-sync.md","sync pi data across your machines over Tailscale"
377
- "updates-and-migrations.md","update the runtime; heal old homes"
378
- "secrets-and-hoard.md","Hodd: secrets, secret-guard, rotation + scrub"
379
- ```
115
+ - **Owner:** Brokk. **Loaded by:** `AGENTS.md`. **Mirror:** `.agents/skills/galdr-ymirsystem/assets/registry.md`.
@@ -47,7 +47,7 @@ governed[6]{path,load_first}:
47
47
  "bin/ymir-install.sh",".agents/skills/galdr-ymirsystem/assets/installation.md"
48
48
  "apps/hlidskjalf/**",".agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md"
49
49
  "bin/mimir*",".agents/skills/galdr-ymirsystem/assets/memory-well.md"
50
- "bin/nornir-* | config/cron.yaml",".agents/skills/galdr-ymirsystem/assets/nornir-jobs.md"
50
+ "bin/nornir-* | config/cron.yaml*",".agents/skills/galdr-ymirsystem/assets/nornir-jobs.md"
51
51
  "bin/valknut-load.sh | .pi/** | .opencode/**",".agents/skills/galdr-ymirsystem/assets/harness-integration/README.md"
52
52
  "bin/smidja* | .agents/skills/smidja-factory/**",".agents/skills/galdr-ymirsystem/assets/smidja.md"
53
53
  ```
@@ -9,8 +9,10 @@ running a chain, reading its trace, or wiring it into Hlidskjalf.
9
9
  **Smíðja's eye**.
10
10
  - **Registry:** `.agents/assets/agents/naming.md`, `docs/lore.md` §XI/§XIII.
11
11
  - **Skill (adopted upstream):** `.agents/skills/smidja-factory/` (internals + cookbooks +
12
- references + `apps/visualizer/` + sibling skills `smidja-launcher`, `smidja-start`,
13
- `smidja-instructions`, `volundr`).
12
+ references + sibling skills `smidja-launcher`, `smidja-start`,
13
+ `smidja-instructions`, `volundr`). The **visualizer's home is the smidja repo**
14
+ (`apps/smidja-factory/apps/visualizer` in a clone; the skill tree carries no
15
+ copy — dropped 2026-09-17).
14
16
 
15
17
  **Two layouts, one smithy — do not confuse them.** A *target* repo the smithy is
16
18
  installed into gets the stamped `smidja/` tree (what `install.py` writes). **In
@@ -102,7 +104,7 @@ installed on this machine) — do not reintroduce `sqlite3`.
102
104
 
103
105
  - **Open at `http://127.0.0.1:8437/`.** One Bun server serves both the read-only
104
106
  API (`bun:sqlite` over the trace db) **and** the built Vue UI from
105
- `apps/visualizer/dist`. A Vite dev server on `:8438` is opt-in
107
+ `apps/smidja-factory/apps/visualizer/dist`. A Vite dev server on `:8438` is opt-in
106
108
  (`SMIDJA_VIZ_DEV=1`) and is not needed for use.
107
109
  - **The carved cloth (2026-09-13).** The default theme is **fensalir** — the
108
110
  landing page's stone/bone/bronze/blood and its three faces (Cormorant display,
@@ -333,7 +333,7 @@ asset_for() {
333
333
  *apps/hlidskjalf/*) printf '%s' "$GALDR/assets/hlidskjalf-ui.md" ;;
334
334
  *bin/mimir*) printf '%s' "$GALDR/assets/memory-well.md" ;;
335
335
  *bin/gleipnir-lock-lib.sh|*bin/saga-session-start.sh|*state/.lock) printf '%s' "$GALDR/assets/brokk-distro-runtime.md" ;;
336
- *bin/nornir-*|*config/cron.yaml) printf '%s' "$GALDR/assets/nornir-jobs.md" ;;
336
+ *bin/nornir-*|*config/cron.yaml*) printf '%s' "$GALDR/assets/nornir-jobs.md" ;;
337
337
  *bin/valknut-load.sh|*/.pi/*|*/.opencode/*) printf '%s' "$GALDR/assets/harness-integration/README.md" ;;
338
338
  *bin/smidja*|*.agents/skills/smidja-factory/*) printf '%s' "$GALDR/assets/smidja.md" ;;
339
339
  *) printf '' ;;
@@ -47,7 +47,7 @@ IP** (never 127.0.0.1), state in `.a2a/<agent>`, the directory as a **service**,
47
47
  heartbeat + deregister, and `cert` (ed25519) before federation. Cards are
48
48
  UNSIGNED until then. Realm boundaries hold.
49
49
 
50
- Plan + registration spec: `hodd/docs/ratatoskr.md` and `hodd/docs/a2a-runs.md`.
50
+ Plan + registration spec: `$YMIR_HOME/memory/plans/mesh/25-ratatoskr-a2a.md` and `$YMIR_HOME/hodd/docs/a2a-runs.md`.
51
51
 
52
52
  ## Joining the mesh and talking (skill-driven, no code)
53
53
 
@@ -17,7 +17,7 @@ Tyr also judges the **runtime** and its **Galdr assets** for drift. Galdr is the
17
17
 
18
18
  ## Before You Start
19
19
 
20
- Understand Ymir's architecture: AGENTS.md governs all agent behavior. docs/Architecture.md is the master blueprint. docs/append-only-log.md records all decisions. TOON output should be used for all compliance reports.
20
+ Understand Ymir's architecture: AGENTS.md governs all agent behavior. docs/Architecture.md is the master blueprint. $YMIR_HOME/hodd/docs/append-only-log.md records all decisions. TOON output should be used for all compliance reports.
21
21
 
22
22
  Run the gates as one command when you can:
23
23
 
@@ -94,7 +94,7 @@ Ymir provides ambient context through:
94
94
  Ymir's content-first approach:
95
95
  - README.md shows live system map, not usage manual
96
96
  - AGENTS.md is the root governance, not a "getting started" doc
97
- - Plan docs in docs/plans/ are the source of truth
97
+ - Plan docs in `$YMIR_HOME/memory/plans/` are the source of truth
98
98
  - Daily logs in workspace/memory/daily/ are the active context
99
99
 
100
100
  **Assess:** Does your tool/show live data first, or help text first?
@@ -103,8 +103,8 @@ Ymir's content-first approach:
103
103
  ### 9. Contextual disclosure
104
104
  Ymir's contextual disclosure patterns:
105
105
  - After open item → suggest closing (e.g., "Run `tasks close <id>`")
106
- - After empty list → suggest creating (e.g., "No plans found. ADD: docs/plans/21-company-houses.md")
107
- - After list → suggest viewing (e.g., "View plan: docs/plans/25-ratatoskr-a2a.md")
106
+ - After empty list → suggest creating (e.g., "No plans found. ADD: memory/plans/<domain>/<name>.md")
107
+ - After list → suggest viewing (e.g., "View plan: memory/plans/mesh/25-ratatoskr-a2a.md")
108
108
  - Suggestions use placeholders: <id>, <title>, not concrete values
109
109
  - Guide discovery, not prescribed workflows
110
110
 
@@ -198,7 +198,7 @@ Compliance assessment per principle and per runtime gate, with "Assess" / "Impro
198
198
 
199
199
  ## Files referenced
200
200
 
201
- - Governance: `AGENTS.md`, `docs/Architecture.md`, `docs/append-only-log.md`, `docs/plans/*.md`
201
+ - Governance: `AGENTS.md`, `docs/Architecture.md`, `$YMIR_HOME/hodd/docs/append-only-log.md`, `$YMIR_HOME/memory/plans/*.md`
202
202
  - Skills: `.agents/skills/*/SKILL.md`
203
203
  - Scripts: `.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh`, `.agents/skills/galdr-ymirsystem/scripts/toon-check.py`
204
204
  - Galdr assets (also mirrored at `tyr-check/assets/`):
@@ -30,6 +30,6 @@ assets[6]{path,load_when}:
30
30
  A change that adds a host capability adds a row here, not a new skill.
31
31
 
32
32
  Rule 06 (append-only) governs the memory: the Runes ledger, the
33
- changelog, `docs/append-only-log.md` and the rules are appended to, never
33
+ changelog, `$YMIR_HOME/hodd/docs/append-only-log.md` and the rules are appended to, never
34
34
  rewritten — and a move must carry every one of them plus the hoard.
35
35
  Law: `RULES/06-append-only.md`.
File without changes
@@ -0,0 +1 @@
1
+ 11
@@ -0,0 +1 @@
1
+ pending:downtime:2358634.1789341699.Q5Ycld
@@ -0,0 +1,8 @@
1
+ when: when-hall-button
2
+ status: fired
3
+ detail: the condition held and the action exited 0
4
+ condition_polls: 2
5
+ action_exit: 0
6
+ output:
7
+ eindri-acclaim[1]{agent,detail}:
8
+ "hall-button","report filed at state/eindri-reports/hall-button.md"
@@ -0,0 +1,5 @@
1
+ when: when-hall-button
2
+ status: ambiguous
3
+ detail: the action was already claimed but its outcome was never captured; verify its effect manually before retiring
4
+ condition_polls: 0
5
+ output: