@zerwiz/ymir 0.1.16 → 0.1.18

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 (171) hide show
  1. package/.agents/config/app-repos.yaml +38 -0
  2. package/.claude/settings.json +31 -0
  3. package/.codex/hooks.json +43 -0
  4. package/.cursor/hooks.json +33 -0
  5. package/.pi/extensions/README.md +39 -0
  6. package/.pi/extensions/gna-pi-watch.ts +15 -0
  7. package/.pi/extensions/lib/ro-assistant-layout.ts +96 -0
  8. package/.pi/extensions/lib/ro-operational-user-layout.ts +145 -0
  9. package/.pi/extensions/lib/ro-visibility.ts +99 -0
  10. package/.pi/extensions/lib/ro-working-ship.ts +243 -0
  11. package/.pi/extensions/lib/rodd-operational-input.ts +62 -0
  12. package/.pi/extensions/lib/skuld-branch-dispatch.ts +252 -0
  13. package/.pi/extensions/lib/skuld-branch-model-picker.ts +77 -0
  14. package/.pi/extensions/lib/vordr-sessionstart-supervisor.mjs +48 -0
  15. package/.pi/extensions/ro.ts +11 -0
  16. package/.pi/extensions/skuld-branch-supervision.ts +11 -0
  17. package/.pi/extensions/syn-turnend-guard.ts +11 -0
  18. package/.pi/mcp.json +16 -0
  19. package/.pi/mcp.json.example +11 -0
  20. package/.pi/npm/.gitignore +2 -0
  21. package/.pi/settings.json +8 -0
  22. package/.pi/shared/extensions/gna-pi-watch.ts +750 -0
  23. package/.pi/shared/extensions/herdr-agent-state.ts +257 -0
  24. package/.pi/shared/extensions/open-editor.ts +509 -0
  25. package/.pi/shared/extensions/ro.ts +504 -0
  26. package/.pi/shared/extensions/skuld-branch-supervision.ts +1535 -0
  27. package/.pi/shared/extensions/syn-turnend-guard.ts +683 -0
  28. package/.pi/shared/extensions/todo.ts +133 -0
  29. package/.pi/shared/extensions/ymir-subagents.ts +287 -0
  30. package/.pi/shared/extensions/ymir-well.ts +130 -0
  31. package/CHANGELOG.md +23 -0
  32. package/assets/Ymir.md +4654 -0
  33. package/assets/healer.html +717 -0
  34. package/assets/icon-family/family-sheet.png +0 -0
  35. package/assets/icon-family/hlidskjalf.svg +1 -0
  36. package/assets/icon-family/sessrumnir.svg +1 -0
  37. package/assets/icon-family/smidja.svg +1 -0
  38. package/assets/icon-family/ymir.svg +1 -0
  39. package/assets/mimirswell.html +880 -0
  40. package/assets/mock/README.md +16 -0
  41. package/assets/mock/feeds.ts +175 -0
  42. package/assets/mock/mock.ts +408 -0
  43. package/assets/reference/docs/agent-control.md +122 -0
  44. package/assets/reference/docs/apodex/Appdex_as_Orchestrator_Planner_Reviewer_Assessment.md +176 -0
  45. package/assets/reference/docs/apodex/Final Report(1).md +198 -0
  46. package/assets/reference/docs/apodex/Final Report(2).md +54 -0
  47. package/assets/reference/docs/apodex/Final Report(3).md +40 -0
  48. package/assets/reference/docs/apodex/Final Report(4).md +234 -0
  49. package/assets/reference/docs/apodex/Final Report(5).md +13 -0
  50. package/assets/reference/docs/apodex/Final Report.md +82 -0
  51. package/assets/reference/docs/architecture.md +392 -0
  52. package/assets/reference/docs/arm-pretool-check.md +247 -0
  53. package/assets/reference/docs/calm-mode-feasibility.md +541 -0
  54. package/assets/reference/docs/calm.md +59 -0
  55. package/assets/reference/docs/captain-hold-lifecycle.md +96 -0
  56. package/assets/reference/docs/cd-guard.md +165 -0
  57. package/assets/reference/docs/cmux-backend.md +133 -0
  58. package/assets/reference/docs/codex-app-backend.md +57 -0
  59. package/assets/reference/docs/configuration.md +924 -0
  60. package/assets/reference/docs/documentation-audiences.json +468 -0
  61. package/assets/reference/docs/documentation-audiences.md +28 -0
  62. package/assets/reference/docs/examples/crew-dispatch.json +26 -0
  63. package/assets/reference/docs/examples/process-event-extension/file-signal.mjs +96 -0
  64. package/assets/reference/docs/examples/process-event-extension/firstmate-extension.json +15 -0
  65. package/assets/reference/docs/examples/watched-tools.json +24 -0
  66. package/assets/reference/docs/examples/wedge-alarm +22 -0
  67. package/assets/reference/docs/extension-bindings.md +237 -0
  68. package/assets/reference/docs/fm-test-isolation-proof.json +37 -0
  69. package/assets/reference/docs/fm-test-isolation-proof.md +149 -0
  70. package/assets/reference/docs/fm-test-portable-shards.md +118 -0
  71. package/assets/reference/docs/gitlab-merge-watch.md +275 -0
  72. package/assets/reference/docs/herdr-backend.md +346 -0
  73. package/assets/reference/docs/orca-backend.md +84 -0
  74. package/assets/reference/docs/pi-supervision-branch-poster.svg +125 -0
  75. package/assets/reference/docs/pi-supervision-branch.md +96 -0
  76. package/assets/reference/docs/plans/agentic-engineering-workflow.md +395 -0
  77. package/assets/reference/docs/plans/agentic-factory-implementation-plan.md +615 -0
  78. package/assets/reference/docs/plans/command-factory-enhancement-plan.md +420 -0
  79. package/assets/reference/docs/plans/phase-1-layer3-program-design.md +134 -0
  80. package/assets/reference/docs/plans/phase-2-vertical-slices.md +100 -0
  81. package/assets/reference/docs/plans/phase-3-measurable-goals.md +106 -0
  82. package/assets/reference/docs/plans/phase-4-context-budget.md +106 -0
  83. package/assets/reference/docs/plans/phase-5-pre-mortem-confidence.md +100 -0
  84. package/assets/reference/docs/plans/phase-6-incident-to-agent.md +109 -0
  85. package/assets/reference/docs/remote-secondmates.md +268 -0
  86. package/assets/reference/docs/scripts.md +146 -0
  87. package/assets/reference/docs/sessionstart-nudge.md +115 -0
  88. package/assets/reference/docs/subagent-guard.md +383 -0
  89. package/assets/reference/docs/supervision-protocols/claude.md +27 -0
  90. package/assets/reference/docs/supervision-protocols/codex.md +16 -0
  91. package/assets/reference/docs/supervision-protocols/cursor.md +31 -0
  92. package/assets/reference/docs/supervision-protocols/grok.md +39 -0
  93. package/assets/reference/docs/supervision-protocols/opencode.md +17 -0
  94. package/assets/reference/docs/supervision-protocols/pi.md +33 -0
  95. package/assets/reference/docs/supervision-protocols/unknown.md +13 -0
  96. package/assets/reference/docs/tmux-backend.md +115 -0
  97. package/assets/reference/docs/trace-context.md +117 -0
  98. package/assets/reference/docs/turnend-guard.md +170 -0
  99. package/assets/reference/docs/verification/dispatch-auth.md +204 -0
  100. package/assets/reference/docs/verification/muse.md +221 -0
  101. package/assets/reference/docs/verification/process-event-sources.md +208 -0
  102. package/assets/reference/docs/verification/public-followup.md +119 -0
  103. package/assets/reference/docs/verification/runtime-backends.md +1022 -0
  104. package/assets/reference/docs/verification/stow-memory.md +53 -0
  105. package/assets/reference/docs/verification/supervision.md +534 -0
  106. package/assets/reference/docs/verification/trace-context.md +31 -0
  107. package/assets/reference/docs/voice-relay.md +295 -0
  108. package/assets/reference/docs/watcher-continuity.md +119 -0
  109. package/assets/reference/docs/wedge-alarm.md +39 -0
  110. package/assets/reference/docs/zellij-backend.md +114 -0
  111. package/assets/reference/index.html +1172 -0
  112. package/assets/reference/skills/afk/SKILL.md +241 -0
  113. package/assets/reference/skills/ahoy/SKILL.md +56 -0
  114. package/assets/reference/skills/ask-user-authority/SKILL.md +56 -0
  115. package/assets/reference/skills/bearings/SKILL.md +161 -0
  116. package/assets/reference/skills/bearings/assets/board-template.html +731 -0
  117. package/assets/reference/skills/bootstrap-diagnostics/SKILL.md +68 -0
  118. package/assets/reference/skills/captain-hold-lifecycle/SKILL.md +54 -0
  119. package/assets/reference/skills/decision-hold-lifecycle/SKILL.md +15 -0
  120. package/assets/reference/skills/diagnostic-reasoning/SKILL.md +53 -0
  121. package/assets/reference/skills/firstmate-codexapp/SKILL.md +110 -0
  122. package/assets/reference/skills/firstmate-codexapp/agents/openai.yaml +4 -0
  123. package/assets/reference/skills/firstmate-coding-guidelines/SKILL.md +127 -0
  124. package/assets/reference/skills/firstmate-orca/SKILL.md +92 -0
  125. package/assets/reference/skills/fmx-respond/SKILL.md +283 -0
  126. package/assets/reference/skills/harness-adapters/SKILL.md +95 -0
  127. package/assets/reference/skills/harness-adapters/references/common/control-and-recovery.md +37 -0
  128. package/assets/reference/skills/harness-adapters/references/common/dispatch.md +32 -0
  129. package/assets/reference/skills/harness-adapters/references/common/model-and-effort.md +42 -0
  130. package/assets/reference/skills/harness-adapters/references/common/primary-hooks.md +40 -0
  131. package/assets/reference/skills/harness-adapters/references/harness/claude.md +55 -0
  132. package/assets/reference/skills/harness-adapters/references/harness/codex.md +43 -0
  133. package/assets/reference/skills/harness-adapters/references/harness/cursor.md +75 -0
  134. package/assets/reference/skills/harness-adapters/references/harness/grok.md +69 -0
  135. package/assets/reference/skills/harness-adapters/references/harness/kimi.md +51 -0
  136. package/assets/reference/skills/harness-adapters/references/harness/muse.md +70 -0
  137. package/assets/reference/skills/harness-adapters/references/harness/opencode.md +42 -0
  138. package/assets/reference/skills/harness-adapters/references/harness/pi.md +56 -0
  139. package/assets/reference/skills/process-event-sources/SKILL.md +137 -0
  140. package/assets/reference/skills/project-management/SKILL.md +92 -0
  141. package/assets/reference/skills/quota-array-dispatch/SKILL.md +131 -0
  142. package/assets/reference/skills/secondmate-provisioning/SKILL.md +254 -0
  143. package/assets/reference/skills/stow/SKILL.md +309 -0
  144. package/assets/reference/skills/stuck-crewmate-recovery/SKILL.md +54 -0
  145. package/assets/reference/skills/updatefirstmate/SKILL.md +64 -0
  146. package/assets/skills/README.md +5 -0
  147. package/assets/yggdrasil.html +649 -0
  148. package/assets/ymir-banner-01.png +0 -0
  149. package/assets/ymir-banner-02.png +0 -0
  150. package/assets/ymir-banner-03.png +0 -0
  151. package/assets/ymir-banner-04.png +0 -0
  152. package/assets/ymir-banner-05.png +0 -0
  153. package/assets/ymir-banner-06.png +0 -0
  154. package/assets/ymir-emblem-darksteel.svg +63 -0
  155. package/assets/ymir-emblem-forged.svg +55 -0
  156. package/assets/ymir-emblem-slate.svg +55 -0
  157. package/assets/ymir-mark-algiz-anvil.svg +9 -0
  158. package/assets/ymir-stave.svg +53 -0
  159. package/assets/ymir.html +563 -0
  160. package/bin/ymir-install.sh +6 -1
  161. package/data/learnings.md +33 -0
  162. package/data/local-models.md +34 -0
  163. package/data/operator.md +15 -0
  164. package/data/projects.md +28 -0
  165. package/data/realm.md +1 -0
  166. package/deploy/Containerfile +27 -0
  167. package/deploy/README.md +104 -0
  168. package/deploy/compose/compose.yaml +45 -0
  169. package/deploy/env.example +30 -0
  170. package/deploy/quadlet/ymir.container +57 -0
  171. package/package.json +10 -8
@@ -0,0 +1,122 @@
1
+ # Agent lifecycle control plane
2
+
3
+ Firstmate talks to a running agent two ways, and they are not the same channel.
4
+
5
+ The **data plane** is [`bin/fm-send.sh`](../bin/fm-send.sh): conversational text for the agent to read.
6
+ For a `kind=secondmate` target it always prepends the from-firstmate routing marker, because a secondmate is itself a firstmate and its reply must come back through the status path rather than a chat nobody reads.
7
+
8
+ The **control plane** is [`bin/fm-control.sh`](../bin/fm-control.sh): allowlisted lifecycle verbs addressed to an exact task id.
9
+
10
+ The split exists because the data plane's marking is exactly right for a message and exactly wrong for a lifecycle command.
11
+ A routing-marked `/quit` arrives as ordinary chat - `[fm-from-firstmate] /quit` - which the agent reasons about instead of executing.
12
+ The failure repeated across harnesses and homes, and the workaround (remember to use an unmarked send for agent-control commands, and improvise the right key or command per harness) lived only in agent prose, so it failed again every time a session did not happen to recall it.
13
+
14
+ ## What the control plane owns
15
+
16
+ `bin/fm-control-lib.sh` is the single executable owner of three capability tables, with no side effects, so it can be read as a contract:
17
+
18
+ - The **verb allowlist**: `interrupt`, `exit`, `relaunch`.
19
+ There is no arbitrary-text and no generic raw-key entry point.
20
+ A caller either names an allowlisted verb or is refused.
21
+ - **Per-harness mechanics**: the key that cancels a running turn, how many times it must be delivered, whether the composer needs clearing afterwards, the command that exits the agent, and which task kinds the adapter is verified to run.
22
+ These were previously carried only in the [`harness-adapters`](../.agents/skills/harness-adapters/SKILL.md) skill's tool references, which now point here.
23
+ `bin/fm-send.sh`'s `--key` path reads the composer-clear table from this owner too, rather than keeping a second copy of it.
24
+ - **Per-backend capability**: which named keys a runtime backend can deliver, and whether it has a recovery-grade agent-state classifier able to prove an agent stopped.
25
+
26
+ A recorded `harness=` is not always an exact adapter name: a task launched from a raw command records that command's basename instead.
27
+ `fm_control_harness_family` is the one place that prefix rule is stated, and an unrecognized value resolves to no adapter rather than being guessed into one.
28
+
29
+ ## Verbs
30
+
31
+ | Verb | Effect | Postcondition |
32
+ | --- | --- | --- |
33
+ | `interrupt` | Deliver the harness's verified interrupt sequence while leaving the agent running. | Delivery succeeds while the endpoint still exists and the agent is still alive where the backend can classify that; cancellation is confirmed only from an adapter-owned acknowledgement and otherwise reports `cancel=unconfirmed`. |
34
+ | `exit` | Stop the agent, preserving the endpoint, the worktree, and every uncommitted change. | The backend's recovery-grade classifier reports the agent gone. Already-stopped is idempotent success. |
35
+ | `relaunch` | Replace the running agent with a new one in the same endpoint and worktree, on the exact recorded adapter or an explicitly chosen harness, model, and effort. | The new agent is alive on the recorded endpoint, and the durable record names the harness that is actually running. |
36
+
37
+ An exit that delivers lifecycle input but cannot prove the agent stopped fails with `exit=unconfirmed`, reports the observed agent state and any interrupt cancellation claim, and never claims that nothing changed.
38
+ Interrupt never rewrites busy state as proof of its own success.
39
+ Claude exposes no lifecycle acknowledgement for a manual interrupt, so delivery succeeds with `cancel=unconfirmed` and its adapter-owned busy state remains as observed.
40
+ muse's session log records `terminal=cancelled` for the interrupted run, so the control plane reports `cancel=confirmed` only after observing that exact acknowledgement.
41
+
42
+ An interrupt is not complete until the composer is empty.
43
+ muse is the one verified adapter that restores the cancelled prompt back into its composer as real text, so its interrupt key is followed by a Ctrl+U clear; without it the next submitted line - including this plane's own exit command - would concatenate onto the restored prompt and submit both as one line.
44
+ The clear is refused before anything is sent when the recorded backend cannot deliver it.
45
+
46
+ **Teardown and discard are not verbs and will not become verbs.**
47
+ `exit` stops an agent and preserves everything else.
48
+ Removing a worktree, closing an endpoint, or discarding work stays with [`bin/fm-teardown.sh`](../bin/fm-teardown.sh), which owns the landed-work test.
49
+
50
+ **`resume` is not a verb.**
51
+ It is not deterministic across the verified adapters: codex and grok resume only from a session id printed at exit, opencode continues the most recent session for the cwd, and claude, pi, pi-signed, and kimi have no verified pane-resume contract.
52
+ `relaunch` covers the same need on every adapter, because the brief on disk - not a harness-private session - is the durable instruction.
53
+
54
+ ## Transactional relaunch
55
+
56
+ `relaunch` is the only verb that changes durable records, so it runs as a transaction with a journal at `state/<id>.control-relaunch`, the prior record preserved beside it, and a ship or scout's prior instructions preserved when a progress note is appended.
57
+
58
+ 1. **Resolve the profile.**
59
+ An explicit `--harness`, `--model`, or `--effort` wins.
60
+ Otherwise a `kind=secondmate` task re-resolves its durable `config/secondmate-harness` pin, including that file's optional model and effort tokens, exactly as every other respawn does - so setting the pin and relaunching is the ordinary way to move a secondmate's runtime.
61
+ A ship or scout keeps the harness already recorded for it, because that harness comes from firstmate's dispatch-profile judgment at intake and must not be silently re-read from configuration.
62
+ A recorded raw-command basename that differs from its resolved adapter cannot reproduce the command actually running, so relaunch refuses before the checkpoint unless the caller passes an explicit `--harness` to choose the replacement runtime deliberately.
63
+ A harness change resets model and effort unless they are named too, because a model chosen for one adapter does not transfer to another.
64
+ 2. **Safe checkpoint.**
65
+ The recorded worktree must exist and be a worktree root; its head and dirty state are recorded.
66
+ For a `kind=secondmate` task, the home's identity marker must match and its child records must be readable, so a relaunch can never strand child work behind an unreadable home.
67
+ A secondmate's own crewmates run in their own endpoints and outlive its relaunch; the relaunched secondmate reconciles them from its home's durable records at startup.
68
+ 3. **Record the note.**
69
+ A ship or scout relaunch requires `--note`, because the replacement inherits the local copy but none of the conversation; the note is appended to the instructions it reads.
70
+ A secondmate relaunch does not require one and never rewrites its standing charter.
71
+ 4. **Stop the old agent** through the `exit` verb, with its postcondition.
72
+ 5. **Launch the replacement** through its single owner, `bin/fm-spawn.sh --relaunch`, which adopts the recorded endpoint and worktree instead of creating either, clears the previous harness's per-task wiring, and arms a fresh busy generation.
73
+
74
+ Switching harness is therefore one ordinary relaunch rather than a separate mechanism.
75
+
76
+ ### Failure and rollback
77
+
78
+ - A refusal **before** the agent is stopped leaves the durable record and the instructions byte-identical.
79
+ - A launch failure **after** the agent is stopped restores the prior durable record, keeps the progress note so a later recovery still has it, marks the journal `failed:launching`, and reports plainly that no agent is running and where the work is preserved.
80
+ - If the launch owner already published the new record but no running agent can be confirmed, the new record is kept: the task is recorded on the new harness with no agent confirmed, which is exactly what recovery reconciles.
81
+ Rewriting it back to the old harness would be a second, worse inaccuracy.
82
+
83
+ ## Fail-closed boundaries
84
+
85
+ - Targeting is exact.
86
+ Only a bare task id with a `state/<id>.meta` record in this home is accepted, and that record must pass the shared endpoint-identity validation.
87
+ A legacy `fm-<id>` window label, an explicit `session:window` endpoint, and a record whose `endpoint_task_id` names another task are all refused.
88
+ - A remotely placed secondmate is refused by name.
89
+ Its agent runs on another host, so none of the postconditions this plane verifies could be read for it here; local endpoint validation would refuse the record regardless, because `window=remote:<id>` can never match a local backend's required shape.
90
+ Drive that lifecycle on its own host and reconcile it through the secondmate recovery path.
91
+ - An unverified harness is refused rather than guessed at.
92
+ - An implicit relaunch from a prefixed raw-command basename is refused before the agent or durable state is touched because its original launch command cannot be reconstructed.
93
+ - An adapter that is not verified for this task's kind is refused **before** the running agent is stopped, not after.
94
+ Muse is a crewmate and scout adapter only, so relaunching a secondmate onto it refuses while its agent is still up rather than leaving that secondmate with no agent when the launch owner refuses.
95
+ - A backend that cannot deliver the harness's interrupt key, or the composer clear that key needs, is refused rather than sent a different key.
96
+ Orca's terminal API exposes only an interrupt and an Enter, so it can deliver neither Escape nor Ctrl+U.
97
+ - `exit` and `relaunch` require a backend with a recovery-grade agent-state classifier - tmux and herdr - because without one the "the agent stopped" postcondition cannot be proven.
98
+ zellij, orca, and cmux are refused rather than reported as successful blind.
99
+ - An ambiguous or unreadable endpoint state refuses.
100
+ Only a positively classified state acts.
101
+ - `fm-spawn --relaunch` independently refuses unless the recorded endpoint is positively agent-free and its shell is sitting in the recorded worktree, so a replacement can never join a live agent or start outside the copy holding the work.
102
+
103
+ ## Capability matrix
104
+
105
+ Backend capability comes from each adapter's real surface, not from a policy choice.
106
+
107
+ | Backend | Escape | Enter | Ctrl+C | Ctrl+U | Recovery-grade agent state |
108
+ | --- | --- | --- | --- | --- | --- |
109
+ | tmux | yes | yes | yes | yes | yes |
110
+ | herdr | yes | yes | yes | yes | yes |
111
+ | zellij | yes | yes | yes | yes | no |
112
+ | cmux | yes | yes | yes | yes | no |
113
+ | orca | no | yes | yes | no | no |
114
+
115
+ Per-harness interrupt keys, repeat counts, composer clears, exit commands, and supported task kinds live in `bin/fm-control-lib.sh` and are exercised for every verified harness by `tests/fm-control.test.sh`.
116
+ The empirical basis for each adapter's value is the `harness-adapters` skill's verification record for that adapter.
117
+
118
+ ## Verification
119
+
120
+ - `tests/fm-control.test.sh` - the adapter contract for every verified harness, the backend capability matrix, exact-id scoping, the closed verb list, the busy, idle, dead, and idempotent lifecycle cases, and marker non-regression, all against a stubbed session provider.
121
+ - `tests/fm-control-relaunch.test.sh` - the relaunch transaction: identity preservation, harness switching, the progress note, checkpoint refusals, and rollback after a failed launch.
122
+ - `tests/fm-control-herdr-smoke.test.sh` - the second state-verified backend against the real herdr binary, on an isolated throwaway lab session.
@@ -0,0 +1,176 @@
1
+ # Would it be good to use Appdex as an orchestrator, planner, and reviewer?
2
+
3
+ **Assessment of `Apodex` (the entity behind https://ymir.zerwiz.org) for the roles of orchestrator, planner, and reviewer**
4
+
5
+
6
+
7
+ To wire Apodex's reasoning engine and orchestration code into the Ymir platform (ymir.zerwiz.org), you treat Apodex as the intelligence layer (the "brain" for Brokk or Kaia and the execution engine for Eindri workers) while letting Ymir's native substrate enforce memory, messaging, and safety gates.
8
+ Here is the blueprint for how to structure that integration:
9
+ Step 1: Spin Up and Validate the Local Apodex Endpoint
10
+ Before touching Ymir's internal components, ensure your underlying Apodex model is served and responding correctly as an OpenAI-compatible endpoint:
11
+ * Use SGLang to serve your chosen open-weights model (e.g., apodex/Apodex-1.0-35B-A3B) with the required tool-calling and reasoning parsers:
12
+ python3 -m sglang.launch_server \
13
+ --model-path apodex/Apodex-1.0-35B-A3B \
14
+ --tp 1 \
15
+ --host 0.0.0.0 \
16
+ --port 1234 \
17
+ --context-length 262144 \
18
+ --tool-call-parser qwen3_coder \
19
+ --reasoning-parser qwen3
20
+
21
+ * Run a quick smoke test using the official AgentHarness runner to verify that search, fetch, and tool execution loops are stable against your local endpoint.
22
+ Step 2: Route Brokk or Kaia through the Apodex Backend
23
+ Ymir decouples agent logic from model providers by relying on API configurations and MCP/A2A composition (Hermóðr).
24
+ * Update the Primary Reasoning Target: Point Brokk (the primary agent) or Kaia (the orchestrator) at your local Apodex endpoint by setting your environment variables:
25
+ OPENAI_BASE_URL=http://localhost:1234/v1
26
+ OPENAI_API_KEY=not-needed-for-local
27
+ OPENAI_MODEL=apodex/Apodex-1.0-35B-A3B
28
+
29
+ * Ground Plans via Mimirsbrunn: Configure Kaia to query Mimirsbrunn (GET /recall) before generating execution plans. Because memory in Ymir is a "boost, never a blocker," Apodex will use historical context when available without failing if the well is dry.
30
+ Step 3: Run Heavy Research Bursts as Eindri Workers
31
+ For multi-step, deep-research workflows, map Apodex's heavy-duty sub-agent execution loops into Eindri workers running inside isolated Utgard sandboxes:
32
+ * Package the execution loop from AgentHarness into an isolated worker script.
33
+ * Have the worker execute its sub-agent tasks independently, then push its structured verdicts back into the ledger using Mimirsbrunn's observation hook (POST /observe).
34
+ * Publish state announcements across the Ratatoskr A2A backbone so Hlidskjalf can render the active task stream.
35
+ Step 4: Enforce Ymir's Governance and Review Gates
36
+ Regardless of how powerful the underlying Apodex model is, platform safety remains absolute:
37
+ * The Glitnir Gate: Never allow automated agents to bypass human review for merges or destructive actions. Apodex’s internal evidence graphs provide a clean, traceable audit trail, which serves as ideal input for human reviewers sitting at the Glitnir gate.
38
+ * The Append-Only Ledger: Ensure all final code artifacts and plan signatures are inscribed into Ymir's runes ledger before Mjölnir triggers any pull request pipelines.
39
+ Would you like to draft the specific configuration overrides for plugging the local endpoint into Brokk's execution environment?
40
+
41
+ ---
42
+
43
+ ## Executive summary
44
+
45
+ Short answer: **Yes — but with a reframing.** Apodex is not a turnkey "orchestrator + planner + reviewer suite" you can simply deploy. It is primarily **a model + API product plus a heavy-duty research orchestration layer**, and its strongest role is as a **planning / reasoning backend** wired into your own workflow. The "reviewer" capability is real but partial (an auditable verifier/evidence-graph component) and does not replace human governance.
46
+
47
+ Three clarifications before the verdict:
48
+
49
+ 1. **Name check.** The product is spelled **Apodex** (one p after the "A"). No distinct product called "Appdex" was found; the name is almost certainly a typo. This report uses "Apodex."
50
+ 2. **The URL points at Ymir, not Appdex.** https://ymir.zerwiz.org is the **Ymir platform** — an alpha, invite-only, self-hosted agent-orchestration framework (Brokk/Eindri/Kaia fleet, Mimirsbrunn memory, Yggdrasil worktrees, Hlidskjalf dashboard, Glitnir human-review gate, append-only runes ledger). It is **not** an Appdex/Apodex landing page. Your question therefore blends two things; this assessment answers both readings:
51
+ - **(A)** Should *you* use Apodex as an orchestrator/planner/reviewer in your own work?
52
+ - **(B)** Could/would it be good to plug Apodex into **Ymir** in those roles (e.g., instead of Kaia or Brokk)?
53
+ 3. **Evidence basis.** The four attached reports (`Final Report(1).md`–`(4).md`) are prior analyses of exactly these questions, sourced from ymir.zerwiz.org, Apodex docs/HF, and the `ApodexAI/AgentHarness` README. I corroborated the key external claims via search (the `ApodexAI/AgentHarness` repo exists on GitHub, `platform.apodex.ai/docs/responses-api` is live, and community build posts reference the HF weights). What I could **not** independently verify: billing/pricing details on platform.apodex.ai, the internal wiring of Apodex's "global verifier," and the exact subset of Ymir's A2A/MCP interface specs (the site notes several are partly private).
54
+
55
+ **Bottom line by role**
56
+
57
+ | Role | Verdict | Why |
58
+ |---|---|---|
59
+ | **Planner** | ✅ Strong fit | Heavy-duty mode decomposes complex goals across sub-agent teams with draft/revise loops; plans stay grounded via recall (Mimirsbrunn-style) and leave an audit trail. |
60
+ | **Orchestrator** | ⚠️ Medium, conditional | It *does* orchestrate its own research sub-agent teams internally, but it isn't documented as a general-purpose meta-orchestrator you point arbitrary agents at. Best used by wiring the API into your own control plane (or running its orchestration as isolated Eindri-style workers inside Ymir). |
61
+ | **Reviewer** | ⚠️ Low-to-medium | The verifier/evidence-graph component can check claims and produce auditable trails, but there is no public governance/gate product. Human-in-the-loop review (Glitnir) must remain external and final. |
62
+
63
+ ---
64
+
65
+ ## 1. What each thing actually is
66
+
67
+ ### Apodex — the product
68
+ Apodex is a **model/API product** focused on agentic, deep-research work:
69
+ - **Chat assistant + Responses API.** Managed via `platform.apodex.ai` (keys, usage, billing); the programmatic entry point is `POST /v1/responses` with `background=true`, then polling `GET /v1/responses/:id` for long jobs.
70
+ - **Heavy-duty orchestration layer.** For mission-critical multi-step tasks it runs an **orchestrated team of sub-agents plus a global verifier** over an **auditable evidence graph** — every claim traces back to a source node. Reported scale: 150+ sub-agents, 15k+ steps.
71
+ - **Model weights.** Apache 2.0 open weights on Hugging Face (`apodex/Apodex-1.0-mini`, and the `Apodex-1.0-35B-A3B` variant among others), deployable locally via SGLang or vLLM over an OpenAI-compatible endpoint.
72
+ - **AgentHarness.** The official open-source evaluation harness (`ApodexAI/AgentHarness`, Apache 2.0) for running Apodex-1.0 models in a ReAct agent setup with web search, web fetch, and code sandboxing.
73
+
74
+ Key corroboration: the GitHub org `ApodexAI/AgentHarness` exists and describes itself as "Evaluation harness for Apodex-1.0 on public deep-research benchmarks"; `platform.apodex.ai/docs/responses-api` is a live doc page; a reference repo (`karminski/apodex-deepresearch`) uses `POST /v1/responses` with `background=true`; and the Apodex team has publicly described their model family as built to "scale agentic intelligence" (Apodex 1.1, per r/LocalLLaMA).
75
+
76
+ ### Ymir — the platform at the URL you gave
77
+ Ymir is a **self-hosted agent substrate** (alpha, invites only): one program/one machine anchored in a single repo, with a named fleet — Brokk (primary agent/bellows), Eindri (isolated workers in Utgard sandboxes), and **Kaia (the orchestrator)**; Mimirsbrunn (single-file SQLite "engram" memory, `POST /observe` / `GET /recall`; rule: memory is a boost, never a blocker); Yggdrasil (git worktrees for zero-collision parallel edits); Mjölnir (issue→PR pipeline); Ratatoskr (A2A 1.0 backbone); Hermóðr (MCP composition); Hlidskjalf (fleet dashboard); and strong process rules — append-only runes/ledger, **Glitnir (human review always required)**, one-session locks, stuck-worker recovery, re-forging roadmap toward Rust/NATS/gRPC/libgit2. The current implementation stack is TypeScript/Python/React/Vue.
78
+
79
+ Crucially, Ymir ties no agent to a vendor model — agents call APIs and exchange messages, so swapping the underlying reasoning engine is architecturally possible.
80
+
81
+ ### The four attached reports, in brief
82
+ - `Final Report(1).md`: Apodex can work **with and for** Ymir as an assistant around the ecosystem (decode architecture, plan House/artifact fits, draft TS/Python/React/Vue code), but cannot grant access, bypass human review, or modify the well/ledger directly.
83
+ - `Final Report(2).md`: Apodex ships as chat assistant **+ model/API** (Responses API, developer console) with heavy-duty orchestrated sub-agent + verifier pipelines, plus **self-hostable Apache 2.0 weights** (SGLang/vLLM).
84
+ - `Final Report(3).md`: The **TUI cannot** live inside Ymir (it's a client, not an engine component), but the **model/API fits as Brokk's/Kaia's brain**, and the **heavy-duty orchestration layer fits as Eindri workers** in Utgard sandboxes.
85
+ - `Final Report(4).md`: `AgentHarness` is a benchmark/eval runner (not a TUI, platform, or pi.dev replacement); it's the practical way to validate a local Apodex endpoint (smoke test → pi.dev wiring → eventual Ymir worker embedding).
86
+
87
+ ---
88
+
89
+ ## 2. Role-by-role assessment
90
+
91
+ ### Planner — Strong fit ✅
92
+ Apodex's design is centered on decomposing open-ended goals into coordinated steps — precisely what planning means here. The heavy-duty mode breaks a task into many sub-agent turns, drafts and revises across iterations, and keeps the resulting plan grounded (via recall-like context, matching Ymir's Kaia rule that every plan be grounded in what the well already holds rather than spun from air).
93
+
94
+ Strengths:
95
+ - Multi-step decomposition and draft/revise loops out of the box.
96
+ - **Traceable rationale**: the evidence graph maps every claim to a source — ideal for explaining *why* a plan was made, which is the exact thing Glitnir reviewers need to see.
97
+ - Works either as a hosted API call or as a locally hosted weight, so you keep planning on-prem if required.
98
+
99
+ Best usage pattern: give it a structured brief and a clear output contract (milestones, artifacts, acceptance criteria). In Ymir terms: Apodex produces the plan that passes "through the veil"; Glitnir still signs off.
100
+
101
+ ### Orchestrator — Medium, conditional ⚠️
102
+ Here the answer splits. Inside Apodex, orchestration **is** a real capability: sub-agent teams run in concert under a supervisor, each task state-tracked over the A2A-style backbone of its harness. But this orchestration is scoped to Apodex's own research/code workload; it is surfaced through a request/response API plus background polling rather than exposed as a general meta-orchestrator for your external agent fleets.
103
+
104
+ Implications:
105
+ - You can **wire** it in — treat Apodex as one node in your own control plane, or run its orchestration bursts as isolated parallel workers — but you would build the outer coordination, not hand Apodex your whole fleet and walk away.
106
+ - In Ymir language: Apodex's orchestration layer maps most naturally onto **Eindri workers** (isolated, parallelized, reporting verdicts into Mimirsbrunn), while the top-level orchestrator role (Kaia) remains yours — optionally powered by the same Apodex model.
107
+
108
+ So: good orchestrator **for research and coding workloads it natively understands**; not a drop-in replacement for an external, general-purpose fleet orchestrator.
109
+
110
+ ### Reviewer — Low-to-medium ⚠️
111
+ This is the weakest claim, and it deserves nuance. Apodex does include a **global verifier** within its heavy-duty pipeline that checks outputs against an evidence graph — a genuine automated verification step, not just text generation. That makes it useful as an **automated verification assistant and evidence auditor**: cross-checking facts, flagging unsupported claims, and producing an audit trail for humans to read.
112
+
113
+ What it does **not** provide:
114
+ - A public governance/review-gate product with approval workflows, permissions, and merge control. Nothing in the available documentation positions the verifier as an autonomous decision authority.
115
+ - A substitute for human sign-off. Both Apodex's own heavy-duty mode (which includes human oversight) and Ymir's laws (Glitnir: human review always required for merges and irreversible actions) make that explicit. You should expect Apodex's review output to be **input to** the human gate, not the gate itself.
116
+
117
+ Rating as "low-to-medium": high value as evidence checker + auditor; low value as the final reviewer-of-record.
118
+
119
+ ---
120
+
121
+ ## 3. Confidence table (what is solid vs. needs verifying)
122
+
123
+ | Claim | Source | Confidence |
124
+ |---|---|---|
125
+ | `ApodexAI/AgentHarness` repo exists; Apache 2.0; evaluates Apodex-1.0 in ReAct setup (browsecomp, BrowseComp-ZH, HLE-text, DeepSearchQA, etc.) | Corroborated via GitHub org + README search | High |
126
+ | Responses API at `api.apodex.ai/v1`, managed via `platform.apodex.ai` docs | Corroborated via live `platform.apodex.ai/docs/responses-api` + reference repo usage | High |
127
+ | Heavy-duty mode = orchestrated sub-agent team + global verifier over auditable evidence graph | Attached reports (2), (3) | Medium — internal detail not independently verified |
128
+ | Apache 2.0 HF weights (`apodex/Apodex-1.0-mini`, `Apodex-1.0-35B-A3B`); SGLang/vLLM serving | Attached reports (2), (4); HF naming consistent with community posts | Medium-High |
129
+ | 150+ sub-agents / 15k+ steps scale figure | Attached report (2) only | Low-Medium |
130
+ | Ymir: alpha/invite-only, Kaia orchestrator, Mimirsbrunn `/observe`/`/recall`, Glitnir human-review gate, Ratatoskr A2A, partial private specs | Direct read of ymir.zerwiz.org + attached reports (1), (3) | High |
131
+ | Pricing / billing specifics on platform.apodex.ai | Not accessible in this environment | Not verified — check directly |
132
+ | Which exact Ymir A2A/MCP interface endpoints you must implement | Site notes several are private | Not verified — request access or ask Ymir maintainers |
133
+
134
+ ---
135
+
136
+ ## 4. Recommended ways to use it
137
+
138
+ ### Path A — Use Apodex in your own workflow (independent of Ymir)
139
+ 1. Start with the hosted Responses API for planning-heavy, multi-step tasks (deep research, technical write-ups, architecture drafting).
140
+ 2. For cost/latency/control, validate a **local** endpoint: serve an Apodex weight via SGLang/vLLM and run the AgentHarness smoke test first.
141
+ 3. Wire it into your existing tools as a **planning/reasoning provider**; add your own review gate on top (manual sign-off, or a policy layer). Treat the verifier output as evidence, not a verdict.
142
+
143
+ ### Path B — Plug Apodex into Ymir
144
+ 1. Replace the model behind **Brokk** (via Hermóðr/MCP tools) or behind **Kaia's planner** so plans are fetched against Mimirsbrunn recalls and pass "the veil." No governance change: Glitnir/Skuld still apply.
145
+ 2. Optionally run Apodex's **heavy-duty orchestration layer as Eindri workers** in Utgard sandboxes for parallel research bursts; have them `POST /observe` verdicts back into Mimirsbrunn to keep the ledger complete.
146
+ 3. Keep the TUI as a human client — it has no place in the agent data path, and Ymir's own Hlidskjalf dashboard is where humans sit.
147
+ 4. Wire everything from **your own fork/instance** once you have alpha access; Ymir's A2A/MCP specs are partly private, so nothing gets injected into the official platform without access.
148
+
149
+ ---
150
+
151
+ ## 5. Limitations and risks
152
+ - **Identity/platform confusion.** Appdex ≠ Apodex; the URL you gave is Ymir, a separate alpha platform. Getting the integration right depends on which one is doing the orchestrating.
153
+ - **Not autonomous governance.** The reviewer role is automated evidence checking; human-in-the-loop remains mandatory (Ymir's Glitnir law; Apodex's own human-supervised heavy-duty mode).
154
+ - **Access wall.** Ymir is alpha/invite-only; you need access (or a fork) before you can plug anything in, and some specs are private.
155
+ - **Implementation effort.** Wiring Apodex as Kaia/Brokk's brain requires implementing the agent↔API↔ledger path and respecting Ymir's Houses, gates, and ledger rules — nontrivial but documented conceptually.
156
+ - **Cost/compute.** Hosted API per-call costs; local weights (e.g., 35B) require a capable GPU server. Validate with the smoke test before committing.
157
+
158
+ ---
159
+
160
+ ## 6. Recommended next steps
161
+ 1. Decide **Path A** (own workflow) vs **Path B** (into Ymir) — this determines all downstream wiring.
162
+ 2. If Path B: request **alpha access** to Ymir; otherwise operate on your own fork.
163
+ 3. If you want your own Apodex endpoint: install `AgentHarness`, serve a weight with SGLang, run the browsecomp smoke test, and confirm behavior against the README performance table before routing anything critical through it.
164
+ 4. Stand up your **human review gate** first — whether Ymir's Glitnir or your own policy layer — and treat Apodex's verifier output as trusted input to that gate, never as the final word.
165
+ 5. Iterate on the planning brief/output-contract pairing; that pairing is where the planning strength is actually captured.
166
+
167
+ ---
168
+
169
+ ## 7. References
170
+ - Ymir platform (the URL you provided): https://ymir.zerwiz.org — read in full; alpha/invite-only; concepts above sourced directly from its pages.
171
+ - `ApodexAI/AgentHarness` (official eval harness): https://github.com/ApodexAI/AgentHarness
172
+ - Apodex Responses API docs: https://platform.apodex.ai/docs/responses-api
173
+ - Apodex model reference / responses usage: https://github.com/karminski/apodex-deepresearch
174
+ - Apodex HF weights: https://huggingface.co/apodex (not independently confirmed in this run)
175
+
176
+ **Analysis prepared against:** `Final Report(1).md`, `Final Report(2).md`, `Final Report(3).md`, `Final Report(4).md` in `/inputs`.
@@ -0,0 +1,198 @@
1
+ Yes, you can use Apodex to work *with* and *for* Ymir—but not to bypass Ymir’s own constraints (alpha access, review gates, etc.). The value is in using Apodex as your assistant around the Ymir ecosystem, not as a replacement for Ymir’s own agents.
2
+
3
+ Below is a direct, actionable breakdown.
4
+
5
+ ---
6
+
7
+ ## 1. What Ymir is (so we’re talking about the same thing)
8
+
9
+ From the Ymir site:
10
+
11
+ - **Ymir is a single-substrate platform** – “one program, one machine, all realms carved from it” anchored in one repo and one machine.
12
+ - It runs a **named agent fleet**:
13
+ - **Brokk** – primary agent (“the bellows”).
14
+ - **Eindri** – isolated worker agents (“the craft”) running in Utgard sandboxes.
15
+ - **Kaia** – orchestrator (“the eye that remembers”), which drinks from the well and passes plans through “the veil” so they are grounded in memory, not spun from air.
16
+ - **Mimirsbrunn** – a single-file SQLite “engram” memory engine with:
17
+ - `POST /observe` – record meaningful actions, conversations, skills, and verdicts.
18
+ - `GET /recall` – retrieve relevant memory for a project before dispatch.
19
+ - Rule: memory is always a **boost, never a blocker**—a dry well doesn’t stop the forge, it just runs cold.
20
+ - **Git worktree / Yggdrasil model** – branches/worktrees for zero-collision parallel edits; all work routes through one trunk.
21
+ - **Artifacts / tools named by myth**:
22
+ - **Mjölnir** – issue → PR pipeline (hammer that returns with a PR).
23
+ - **Ratatoskr** – A2A 1.0 backbone: state announcements and work tracking between agents.
24
+ - **Hermóðr** – MCP/A2A composition: horizontal delegation via A2A, vertical tool access via MCP.
25
+ - **Hlidskjalf** – dashboard: fleet graph, A2A stream, well, ledger, reviews.
26
+ - **Others** (Bifrost, Heimdall, Gjallarhorn, Skrymir, Valhalla, etc.) map to familiar OSS like Traefik/Caddy, OAuth2-proxy/AuthentiK, cloudflared, MinIO/FileBrowser, PM2/Docker.
27
+ - **Houses** – ventures within the mythos (Ymir Labs, Brokk Forge, Runestone Labs, Muninn Labs, Dvalin, Utgard Studios, Askr, Mannheim).
28
+ - **Forge-Master’s Rule** – “open source first; only what differentiates Ymir is smithed in Ymir’s own forge.”
29
+ - **Stack**:
30
+ - **Current “light metals”**: TypeScript, Python, React, Vue.
31
+ - **Future “Rut steel”**: Rust, NATS, gRPC, libgit2, re-forging gates without changing their contracts.
32
+ - **Strong process & safety rules**:
33
+ - Append-only runes/ledger; nothing un-carved.
34
+ - Glitnir: **human review is always required**.
35
+ - Laws about one session/one reins, scheduling, stuck-worker recovery, update rules, etc.
36
+
37
+ So Ymir is not “just a library.” It’s a whole, opinionated agent platform plus operational philosophy.
38
+
39
+ ---
40
+
41
+ ## 2. Ways you *can* use Apodex for Ymir
42
+
43
+ Within those constraints, these are realistic, concrete uses of Apodex:
44
+
45
+ ### 2.1. Understanding and planning around Ymir
46
+
47
+ You can use Apodex to:
48
+
49
+ - **Decode the myth into an architecture map**
50
+ - Translate Brokk/Eindri/Kaia, Mimirsbrunn, Ratatoskr, Mjölnir, Hlidskjalf, etc., into plain technical architecture and workflows.
51
+ - Explain the “ten laws” and the additional nineteen laws (Gleipnir, Skuld, Hermóðr, Glitnir, etc.) in operational terms for your team.
52
+
53
+ - **Design how your project will live inside Ymir**
54
+ - Decide which **House** your work belongs to (e.g., an observability tool under Valhalla vs. a memory-centric thing under Muninn).
55
+ - Plan branch/worktree usage so you respect the “never work outside your realm” and “Svartalfaheim holds the shop floors” rules.
56
+ - Sketch how your service should interact with:
57
+ - A2A 1.0 (Ratatoskr) if it needs agent-to-agent messaging.
58
+ - MCP (Hermóðr) if it exposes tools to agents.
59
+ - Mimirsbrunn (`/observe` and `/recall`) if it needs memory.
60
+
61
+ - **Prepare contribution plans**
62
+ - Outline a concrete proposal for:
63
+ - A new “treasure” (artifact) to hang on the wall.
64
+ - Improvements to an existing gate (e.g., Hlidskjalf panels, Ratatoskr enhancements).
65
+ - Frame the proposal in their myth/lexicon so it fits the repo’s “ten laws” and later rules.
66
+
67
+ If this is your main need, you’d use Apodex like a systems architect + documentation explainer.
68
+
69
+ ---
70
+
71
+ ### 2.2. Helping you build code that fits Ymir’s stack and rules
72
+
73
+ Given that Ymir’s current implementation stack is:
74
+
75
+ - **TypeScript**
76
+ - **Python**
77
+ - **React**
78
+ - **Vue**
79
+
80
+ and later:
81
+
82
+ - **Rust**
83
+ - **NATS**
84
+ - **gRPC**
85
+ - **libgit2**
86
+
87
+ you can use Apodex to:
88
+
89
+ - **Draft components, services, or utilities in these stacks**
90
+ For example:
91
+ - A service that calls `POST /observe` and `GET /recall` and conforms to their “memory is a boost, never a blocker” rule (falling back cleanly when recall is empty).
92
+ - React/Vue views or widgets conceptually suitable for the Hlidskjalf dashboard (e.g., visualizing A2A task streams or ledger entries).
93
+ - Helper libraries to integrate with Ratatoskr’s A2A model in your own agents/services.
94
+
95
+ - **Prototype integrations that follow Ymir’s “borrowed anvil” stance**
96
+ - For example, if you want to expose some new capability, we can:
97
+ - Identify an existing, validated OSS project that does the bulk of it.
98
+ - Sketch how to wrap it under a mythic name and keep Ymir-specific logic thin.
99
+ - This stays faithful to: “Does a validated OSS project already do this? If yes, name it and use it. Only what differentiates Ymir is smithed in Ymir’s own forge.”
100
+
101
+ - **Set up clean boundaries for MCP/A2A tooling**
102
+ - Design MCP tools or A2A-facing services that:
103
+ - Take a structured `Erindi`-style brief.
104
+ - Avoid irreversible actions unless a “Frigg/consent” gate is explicit.
105
+ - Respect Skuld (no merge without a verdict) and Glitnir (human review).
106
+
107
+ You would then run, test, and review this code in your own fork or instance; Apodex does not execute it for you or merge anything itself.
108
+
109
+ ---
110
+
111
+ ### 2.3. Working with the Ymir repo/process, without bypassing it
112
+
113
+ Apodex can:
114
+
115
+ - **Help you prepare contributions that fit Ymir’s laws**
116
+ - Propose file layout and naming consistent with Houses, gates, and runes.
117
+ - Suggest how to structure tests, docs, or runbooks so they feed nicely into Runestone Labs’ “runes and records” model.
118
+
119
+ - **Help you respect the ledger & review constraints**
120
+ - Draft commit messages and documentation that:
121
+ - Clearly inscribe significant actions (aligns with the “runes are append-only” idea).
122
+ - Make it straightforward for Glitnir (human reviewers) to see what changed and why.
123
+ - Outline a manual checklist for you to follow before invoking Mjölnir (issue → PR pipeline), so Skuld (outcome/merge gate) has what she needs.
124
+
125
+ - **Support operational thinking around Ymir’s “seating” and “watch”**
126
+ - Turn the “seating” ceremony (seat, chain, loom, telling) into:
127
+ - A practical checklist for starting your Ymir workday.
128
+ - A runbook for on-call or daily operations.
129
+ - Turn “the watch” rules into monitoring/alerting requirements for your Ymir deployment.
130
+
131
+ Again: Apodex **assists your work**; Ymir’s laws still enforce human review and ledger discipline on the platform side.
132
+
133
+ ---
134
+
135
+ ## 3. What Apodex cannot do for Ymir
136
+
137
+ You **cannot** rely on Apodex to:
138
+
139
+ 1. **Grant or circumvent access to Ymir**
140
+ - Ymir is explicitly **alpha, invites only**.
141
+ - If you don’t have an invite or a running instance, Apodex can’t create one or get you in.
142
+
143
+ 2. **Act as an unsupervised Ymir agent that skips Glitnir**
144
+ - Ymir mandates **human review for merges and irreversible actions**.
145
+ - Even if you wired Apodex into Ymir via A2A or MCP, a human still has to:
146
+ - Approve plans and artifacts.
147
+ - Approve merges/rollouts.
148
+ - Apodex can’t and shouldn’t nullify Skuld, Glitnir, Frigg, or similar safety/oversight rules.
149
+
150
+ 3. **Directly modify the Mimirsbrunn well, ledger, or running fleet without your control**
151
+ - Any use of `/observe` and `/recall`, ledger entries, or agent orchestration must be mediated through your own code, tools, or Ymir UI.
152
+ - Apodex can help you design and implement those tools; it does not reach into your running Ymir environment by itself.
153
+
154
+ 4. **Guarantee conformance to internal contracts you haven’t shown**
155
+ - Ymir’s public page gives a conceptual description (A2A 1.0, MCP composition, etc.), not the full, private interface specs.
156
+ - For private APIs, schemas, or conventions, you would need to provide the relevant pieces; Apodex will work from what you share.
157
+
158
+ ---
159
+
160
+ ## 4. How to decide if “using Apodex for Ymir” makes sense for you
161
+
162
+ It *does* make sense if:
163
+
164
+ - You’re trying to:
165
+ - Understand Ymir’s philosophy and architecture.
166
+ - Plan how your project or product fits as a House, artifact, or gate.
167
+ - Draft or iterate on code and docs in Ymir’s current tech stack.
168
+ - Prepare well-structured contributions or integrations before you open a PR.
169
+
170
+ It does **not** solve:
171
+
172
+ - Getting platform access when you don’t already have it.
173
+ - Replacing human oversight in a system whose laws explicitly require it.
174
+
175
+ ---
176
+
177
+ ## 5. Concrete next steps (pick one and Apodex can help)
178
+
179
+ If you tell me:
180
+
181
+ 1. **“We want to build X on Ymir.”**
182
+ - I can map X onto:
183
+ - Houses.
184
+ - Required gates (A2A, MCP, Mimirsbrunn, Hlidskjalf, etc.).
185
+ - A step-by-step implementation plan.
186
+
187
+ 2. **“We have repo access and want to add/modify Y.”**
188
+ - I can:
189
+ - Help you unpack the relevant laws that govern that area.
190
+ - Sketch the directory layout and data flow.
191
+ - Draft implementation code in TS/Python/React/Vue that you then run and review.
192
+
193
+ 3. **“We’re just evaluating Ymir; help us decide if it fits us.”**
194
+ - I can:
195
+ - Produce a concise pros/cons or fit analysis against your current stack and workflow.
196
+ - Highlight where Ymir’s strong process (ledger, review, watch, seating) lines up—or conflicts—with how your team already works.
197
+
198
+ If you share your specific goal (“we want to X with Ymir”), I can turn that into a focused plan plus concrete artifacts you can apply in your own environment.
@@ -0,0 +1,54 @@
1
+ Good news — and this is very much doable. I dug into how Apodex actually ships as a model, because "using the Apodex model" can mean three different things, and only one of them is "just talking to me in this chat." Here's what I found.
2
+
3
+ ## The short version
4
+
5
+ Apodex is both a **chat assistant** (what you get right now) and an actual **model + API product** that you can call from your own code or plug into other tools — pi.dev and Ymir alike. So yes, you can move beyond this UI and run Apodex as your underlying model.
6
+
7
+ Three ways to interpret your question, with an answer for each:
8
+
9
+ ---
10
+
11
+ ### 1. If you mean: "Can I use Apodex instead of this chat interface (e.g., for heavy-duty research / multi-step tasks)?"
12
+
13
+ **Yes — via the official API.** Apodex runs a Responses API at `api.apodex.ai/v1`, managed through a Developer Console at `platform.apodex.ai` (keys, usage, billing). For research/workload tasks you'd POST to `/v1/responses` with `background=true`, then poll `GET /v1/responses/:id` until complete.
14
+
15
+ Key capabilities worth knowing if you're routing your hard jobs through it:
16
+
17
+ - It's a **tool-using agent** by design, not just a text generator — it can search, fetch pages, and execute code in a loop, feeding results back into itself.
18
+ - Its "heavy-duty" mode runs an orchestrated team of sub-agents plus a global verifier over an **auditable evidence graph**, so every claim traces back to a source node. That's a real fit for long-horizon work (150+ sub-agents, 15k+ steps), and it mirrors Ymir's own ledger/verdict philosophy.
19
+ - A local-only ReAct variant exists too, where you supply your own tools via `OPENAI_BASE_URL`/`OPENAI_API_KEY` and pin your search/fetch/code providers.
20
+
21
+ So for exactly the kind of mission-critical, multi-step jobs Pi.dev won't naturally handle, Apodex has a programmatic path.
22
+
23
+ ---
24
+
25
+ ### 2. If you mean: "Can I use Apodex **inside pi.dev** as my model provider?"
26
+
27
+ **Very probably, yes.** Pi.dev already speaks to 15+ providers and is explicitly built for **self-hosted endpoints**. Two routes:
28
+
29
+ - **Official API:** give pi.dev an `APODEX_API_KEY`-backed `BASE_URL` pointing at `https://api.apodex.ai/v1` (the Responses API). Whether Pi deviates from strict OpenAI-conforming `/chat/completions` may matter here — worth testing against its supported provider list.
30
+ - **Self-hosted weights (fully local):** Apodex publishes **Apache 2.0 weights on Hugging Face** (`apodex/Apodex-1.0-mini`, and 1.1 variants). You can serve them yourself over an OpenAI-compatible endpoint using SGLang or vLLM:
31
+ - SGLang: `python3 -m sglang.launch_server --model-path apodex/Apodex-1.0-35B-A3B --context-length 262144 --tool-call-parser qwen3_coder --reasoning-parser qwen3`
32
+ - vLLM: `vllm serve ... --enable-auto-tool-choice --tool-call-parser qwen3_coder --reasoning-parser qwen3`
33
+
34
+ Pi.dev should pick this up like any local endpoint. Note the model expects function-calling messages with structured tool payloads, so make sure whatever harness you use parses tool_calls and returns them as `role: "tool"` messages.
35
+
36
+ **Caveat:** I can't confirm which exact endpoint format Pi.dev currently accepts; you'll want to test against its provider configuration rather than assume OpenAI-conformity across the board.
37
+
38
+ ---
39
+
40
+ ### 3. If you mean: "Can Apodex be **Ymir's agent model** (replacing Brokk/Eindri's backend)?"
41
+
42
+ **Yes, in principle, with some wiring.** Ymir's agents operate by calling APIs, sending A2A messages via Ratatoskr, and delegating tools over MCP (Hermóðr). Nothing in the design ties a model to a specific vendor — Apodex as an API call or as a local OpenAI-compatible endpoint fits cleanly into that pattern.
43
+
44
+ The interesting part is alignment:
45
+ - Ymir requires **human review** (Glitnir) before merges and irreversible actions, uses an **append-only ledger**, and treats memory as a boost not a blocker.
46
+ - Apodex heavy-duty mode produces an **auditable evidence trail** by default, which lines up well with Ymir's append-only runes/ledger ethos.
47
+
48
+ Practical caveat: brokering Apodex through Ymir means the same constraints you already have — Ymir's review gates still apply, and Ymir's interface specs are partly private so you'd wire it up from within your own fork/instance.
49
+
50
+ ---
51
+
52
+ ## One clarification worth making
53
+
54
+ "To this" was slightly ambiguous — is your target **pi.dev** (swapping the model underneath), **Ymir** (making Apodex a fleet worker), or something else entirely (a standalone research pipeline)? Tell me which and I'll give you the concrete wiring: env vars, endpoint config, or a repo layout that respects whichever platform's rules apply.
@@ -0,0 +1,40 @@
1
+ ## Short answer
2
+
3
+ **No on the TUI — yes on everything else.** You can't run "the Apodex TUI" inside Ymir, but you *can* run the Apodex **model, API, and orchestration layer** inside Ymir as the brain behind Brokk or Kaia. Those are the only two categories worth distinguishing.
4
+
5
+ ---
6
+
7
+ ## 1. Why "Apodex TUI" doesn't work inside Ymir
8
+
9
+ The TUI (and this chat interface) is a **client** — a way for you to talk to me. It's not an engine component like Brokk (the bellows) or Kaia (the eye that remembers). There's nothing to "drop in":
10
+
11
+ - A TUI is a screen UI with its own session, commands, and output rendering. Brokk/Kaia need a **reasoning engine**, not a display.
12
+ - Ymir's architecture is agent↔API↔ledger. A chat window fits nowhere in that data path.
13
+
14
+ So there's no point trying to embed the TUI in a house, gate, or Utgard sandbox. What matters is what sits *behind* the model calls.
15
+
16
+ ## 2. What you *can* put inside Ymir
17
+
18
+ **The Apodex model/API → serves as Brokk's (or Kaia's) brain.** Nothing in Ymir ties a model to a vendor. Your existing agents already operate by calling APIs and exchanging messages, so you replace whatever backend they currently call with the Apodex endpoint (`/v1/responses`, background=true + polling for heavy jobs), just as you'd route a self-hosted endpoint through it.
19
+
20
+ - **As Brokk:** wrap an Apodex call behind Hermóðr (MCP tools) so Brokk gets the same tool discipline (structured briefs, consent gates) with stronger reasoning underneath.
21
+ - **As Kaia's planner:** let Apodex draft and revise plans fetched against Mimirsbrunn recalls, then pass them through "the veil." Memory is still a boost, never a blocker — a silent recall just changes Kaia's input, not its ability to proceed.
22
+
23
+ **The heavy-duty orchestration layer → runs as Endri workers.** The multi-step research / code / verifier loop (sub-agent teams, evidence graph, local ReAct variant) fits naturally as *isolated worker agents in Utgard sandboxes*, parallelizing Ymir's own fleet idea. Each worker still reports verdicts back into Mimirsbrunn via `/observe`, keeping the ledger complete.
24
+
25
+ ## 3. The important caveat: Ymir's laws don't care about your model
26
+
27
+ Whether Brokk runs on Apodex, GPT, or a local weight, **Glitnir still requires human review before merges/rollouts, Skuld still blocks merges without a verdict, and the runes/ledger stays append-only.** The model swap changes intelligence and traceability — not oversight. If anything, Apodex's built-in auditable evidence trail maps nicely onto the ledger ethos, which helps Glitnir reviewers see *why* a change happened.
28
+
29
+ Ymir is alpha/invite-only and its A2A/MCP specs are partly private, so you wire this from inside your own fork or instance — nothing gets injected into the official platform.
30
+
31
+ ## Bottom line
32
+
33
+ | Piece | Inside Ymir? | How |
34
+ |---|---|---|
35
+ | Apodex **TUI** | ❌ No | Client UI, not an engine component — no place for it in Brokk/Kaia's data path |
36
+ | Apodex **model/API** | ✅ Yes | Drop it in as Brokk's or Kaia's reasoning backend (MCP or direct calls) |
37
+ | Apodex **heavy-duty orchestration** | ✅ Yes | Run as Endri workers in Utgard sandboxes, reporting verdicts to Mimirsbrunn |
38
+ | Ymir's **review/gate/ledger rules** | ⚠️ Unchanged | Apply regardless of model choice |
39
+
40
+ Tell me whether you're targeting pi.dev, Ymir, or a standalone pipeline as your main target, and I'll give you the concrete env/config or repo layout that respects whichever platform's rules apply.