@zerwiz/ymir 0.1.24 → 0.1.26
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.
- package/.agents/bus/messages.json +1 -0
- package/.agents/config/agents.machine.example.yaml +16 -0
- package/.agents/config/app-repos.yaml +38 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models.md +72 -1
- package/.pi/mcp.json +2 -2
- package/CHANGELOG.md +42 -2
- package/README.md +39 -23
- package/assets/reference/state/.branch-eligible-owner +4 -0
- package/assets/reference/state/.branch-mirror-cursor +1 -0
- package/assets/reference/state/.branch-outcomes-cursor +1 -0
- package/assets/reference/state/.branch-session +1 -0
- package/assets/reference/state/.count-default_wF_p5 +1 -0
- package/assets/reference/state/.count-default_wF_p6 +1 -0
- package/assets/reference/state/.count-default_wR_p2 +1 -0
- package/assets/reference/state/.count-default_wS_p2 +1 -0
- package/assets/reference/state/.count-firstmate_fm-server-knowledge +1 -0
- package/assets/reference/state/.hash-default_wF_p5 +1 -0
- package/assets/reference/state/.hash-default_wF_p6 +1 -0
- package/assets/reference/state/.hash-default_wR_p2 +1 -0
- package/assets/reference/state/.hash-default_wS_p2 +1 -0
- package/assets/reference/state/.hash-firstmate_fm-server-knowledge +1 -0
- package/assets/reference/state/.heartbeat-streak +1 -0
- package/assets/reference/state/.inactive-outcome-reconcile +2 -0
- package/assets/reference/state/.lock +1 -0
- package/assets/reference/state/.pi-branch-extension-loaded +1 -0
- package/assets/reference/state/.pi-turnend-extension-loaded +2 -0
- package/assets/reference/state/.pi-watch-extension-loaded +2 -0
- package/assets/reference/state/.seen-server-knowledge_turn-ended +1 -0
- package/assets/reference/state/.session-start-agents-baseline +2 -0
- package/assets/reference/state/.session-start-complete +1 -0
- package/assets/reference/state/.stale-default_wF_p5 +1 -0
- package/assets/reference/state/.stale-default_wR_p2 +1 -0
- package/assets/reference/state/.stale-firstmate_fm-server-knowledge +1 -0
- package/assets/reference/state/.stale-since-default_wF_p5 +1 -0
- package/assets/reference/state/.stale-since-default_wR_p2 +1 -0
- package/assets/reference/state/.stale-since-firstmate_fm-server-knowledge +1 -0
- package/assets/reference/state/.startup-network.delivered +1 -0
- package/assets/reference/state/.startup-network.report +1 -0
- package/assets/reference/state/.startup-network.status +10 -0
- package/assets/reference/state/.startup-network.timings +6 -0
- package/assets/reference/state/.trace-context-effective +1 -0
- package/assets/reference/state/.wake-queue.seq +1 -0
- package/assets/reference/state/.wake-rows.consume.tR2rTy +0 -0
- package/assets/reference/state/.watch-arm-output.3581p6 +0 -0
- package/assets/reference/state/.watch-arm-output.3ciDNP +0 -0
- package/assets/reference/state/.watch-arm-output.SksR6k +0 -0
- package/assets/reference/state/.watch-cycle-exits.log +22 -0
- package/assets/reference/state/.watch-deliveries.log +19 -0
- package/assets/reference/state/.watch-triage.log +38 -0
- package/assets/reference/state/.watch.lock/fm-home +1 -0
- package/assets/reference/state/.watch.lock/pid +1 -0
- package/assets/reference/state/.watch.lock/pid-identity +1 -0
- package/assets/reference/state/.watch.lock/watcher-path +1 -0
- package/assets/reference/state/.watch.lock.owner.qqbxmS/fm-home +1 -0
- package/assets/reference/state/.watch.lock.owner.qqbxmS/pid +1 -0
- package/assets/reference/state/.watch.lock.owner.qqbxmS/pid-identity +1 -0
- package/assets/reference/state/.watch.lock.owner.qqbxmS/watcher-path +1 -0
- package/assets/reference/state/.watcher-down +1 -0
- package/assets/reference/state/branch-outcomes.jsonl +1 -0
- package/assets/reference/state/branch-session/2026-09-04T16-49-38-671Z_01a06d53-6b6f-7619-930d-e6dfd9a4a29e.jsonl +211 -0
- package/assets/reference/state/home-summary.json +42 -0
- package/assets/reference/state/server-knowledge.busy-gen +1 -0
- package/assets/reference/state/server-knowledge.busy-state +1 -0
- package/assets/reference/state/server-knowledge.herdr-presentation +12 -0
- package/assets/reference/state/server-knowledge.meta +18 -0
- package/assets/reference/state/server-knowledge.pi-ext.ts +26 -0
- package/assets/reference/state/server-knowledge.turn-ended +0 -0
- package/bin/ymir-install.sh +6 -1
- package/package.json +2 -2
- package/scripts/start.sh +0 -9
- package/.agents/config/agents.yaml +0 -53
- package/.agents/config/tailscale-sync.yaml +0 -9
- package/.agents/config/wedge-alarm +0 -3
- package/.agents/state/.wake-queue.seq +0 -1
- package/.agents/state/.watcher-down +0 -1
- package/.agents/state/procevent-inbox/when-hall-button.1.adapter +0 -1
- package/.agents/state/procevent-inbox/when-hall-button.1.result +0 -8
- package/.agents/state/procevent-inbox/when-hall-button.2.adapter +0 -1
- package/.agents/state/procevent-inbox/when-hall-button.2.result +0 -5
- package/.agents/state/procevent-inbox/when-odrerir.1.adapter +0 -1
- package/.agents/state/procevent-inbox/when-odrerir.1.result +0 -8
- package/.agents/state/procevent-inbox/when-odrerir.2.adapter +0 -1
- package/.agents/state/procevent-inbox/when-odrerir.2.result +0 -5
- package/.agents/state/procevent-inbox/when-odrerir.3.adapter +0 -1
- package/.agents/state/procevent-inbox/when-odrerir.3.result +0 -5
- package/.agents/state/procevent-inbox/when-odrerir.4.adapter +0 -1
- package/.agents/state/procevent-inbox/when-odrerir.4.result +0 -8
- package/.agents/state/procevent-inbox/when-odrerir.5.adapter +0 -1
- package/.agents/state/procevent-inbox/when-odrerir.5.result +0 -8
- package/.agents/state/procevent-inbox/when-sessrumnir-cloth.1.adapter +0 -1
- package/.agents/state/procevent-inbox/when-sessrumnir-cloth.1.result +0 -8
- package/data/learnings.md +0 -33
- package/data/local-models.md +0 -34
- package/data/operator.md +0 -15
- package/data/projects.md +0 -28
- package/data/realm.md +0 -1
- /package/{.agents/state/.wake-queue → assets/reference/state/.last-check} +0 -0
- /package/{.agents/state/procevent-inbox/when-hall-button.1.handled → assets/reference/state/.last-heartbeat} +0 -0
- /package/{.agents/state/procevent-inbox/when-hall-button.2.handled → assets/reference/state/.last-watcher-beat} +0 -0
- /package/{.agents/state/procevent-inbox/when-odrerir.1.handled → assets/reference/state/.main-eligible-rows.tmp.Exxm82} +0 -0
- /package/{.agents/state/procevent-inbox/when-odrerir.2.handled → assets/reference/state/.main-eligible-rows.tmp.p2HMKo} +0 -0
- /package/{.agents/state/procevent-inbox/when-odrerir.3.handled → assets/reference/state/.wake-queue} +0 -0
- /package/{.agents/state/procevent-inbox/when-odrerir.4.handled → assets/reference/state/.wake-rows.consume.BcqXSq} +0 -0
- /package/{.agents/state/procevent-inbox/when-odrerir.5.handled → assets/reference/state/.wake-rows.consume.NDZZei} +0 -0
- /package/{.agents/state/procevent-inbox/when-sessrumnir-cloth.1.handled → assets/reference/state/.wake-rows.consume.VGkhYm} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# config/agents.<hostname>.yaml — a per-machine OVERLAY for the personal setup.
|
|
2
|
+
#
|
|
3
|
+
# Copies next to config/agents.yaml and is deep-merged over it when the
|
|
4
|
+
# hostname matches (short form, before the first dot). Override the hostname
|
|
5
|
+
# with YMIR_AGENTS_MACHINE. Use it so each machine runs its own model/harness
|
|
6
|
+
# combination from one repo. Private (gitignored); this .example is the shape.
|
|
7
|
+
|
|
8
|
+
# Example: this machine's hnoss runs a bigger local model, and its default
|
|
9
|
+
# fallback differs.
|
|
10
|
+
# agents:
|
|
11
|
+
# hnoss: { model: "llama.cpp/qwen3.6-35b-q4_k_s" }
|
|
12
|
+
# brokk: { model: opencode-go/deepseek-v4.1-flash }
|
|
13
|
+
# providers:
|
|
14
|
+
# llama.cpp:
|
|
15
|
+
# base_url: "http://127.0.0.1:8080/v1"
|
|
16
|
+
# default_model: opencode-go/deepseek-v4.1-flash
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# App repositories — PUBLIC map (the five surfaces)
|
|
2
|
+
#
|
|
3
|
+
# The fork path: a fresh clone has no private hoard (no
|
|
4
|
+
# `$YMIR_HOME/hodd/identity/projects.yaml`), so bin/ymir-install.sh's `apps`
|
|
5
|
+
# step falls back to THIS file to clone the five app repos. The hoard registry
|
|
6
|
+
# stays authoritative when present; this file is the fork's road.
|
|
7
|
+
#
|
|
8
|
+
# Block shape must match the installer's awk (repo: apps/<path> + git: dict).
|
|
9
|
+
|
|
10
|
+
- id: hlidskjalf
|
|
11
|
+
name: Hlidskjalf
|
|
12
|
+
repo: apps/hlidskjalf
|
|
13
|
+
posture: direct-PR
|
|
14
|
+
git: { host: github.com, owner: zerwiz, repo: hlidskjalf, remote: origin, default_branch: main, auth: gh }
|
|
15
|
+
|
|
16
|
+
- id: hlidskjalf-mobile
|
|
17
|
+
name: Hlidskjalf Mobile
|
|
18
|
+
repo: apps/hlidskjalf-mobile
|
|
19
|
+
posture: direct-PR
|
|
20
|
+
git: { host: github.com, owner: zerwiz, repo: hlidskjalf-mobile, remote: origin, default_branch: main, auth: gh }
|
|
21
|
+
|
|
22
|
+
- id: odrerir
|
|
23
|
+
name: Óðrerir
|
|
24
|
+
repo: apps/odrerir
|
|
25
|
+
posture: direct-PR
|
|
26
|
+
git: { host: github.com, owner: zerwiz, repo: odrerir, remote: origin, default_branch: main, auth: gh }
|
|
27
|
+
|
|
28
|
+
- id: sessrumnir
|
|
29
|
+
name: Sessrúmnir
|
|
30
|
+
repo: apps/sessrumnir
|
|
31
|
+
posture: direct-PR
|
|
32
|
+
git: { host: github.com, owner: zerwiz, repo: sessrumnir, remote: origin, default_branch: main, auth: gh }
|
|
33
|
+
|
|
34
|
+
- id: smidja
|
|
35
|
+
name: Smíðja factory
|
|
36
|
+
repo: apps/smidja-factory
|
|
37
|
+
posture: direct-PR
|
|
38
|
+
git: { host: github.com, owner: zerwiz, repo: smidja, remote: origin, default_branch: main, auth: gh }
|
|
@@ -83,7 +83,7 @@ the configuration you intend to keep.
|
|
|
83
83
|
Always record **the context the run was measured at**. A decode figure without
|
|
84
84
|
its context is not a measurement.
|
|
85
85
|
|
|
86
|
-
### The
|
|
86
|
+
### The traps that produce believable, useless numbers
|
|
87
87
|
|
|
88
88
|
| Trap | Reads as | Is |
|
|
89
89
|
|---|---|---|
|
|
@@ -91,6 +91,9 @@ its context is not a measurement.
|
|
|
91
91
|
| **Load is not run** | a model that loads, written down as working | it may die on the first real request |
|
|
92
92
|
| **Context-blind comparison** | two runs "differing by config" | they also differed in context; attention cost tracks the context in use |
|
|
93
93
|
| **Asserted > observed** | a tidy explanation for a slow run | the explanation was never tested against an alternative |
|
|
94
|
+
| **Anonymous load on unified memory** | a model that loads fine, and later "the machine crashed" | on a unified-memory host the GPU's memory **is** system RAM. An anonymous (non-`mmap`) load makes the weights unreclaimable, so under pressure the kernel OOM-kills **something else** — usually the desktop, not the model. Load file-backed. |
|
|
95
|
+
| **Backend chosen by reputation** | "ROCm is the AMD backend, so use ROCm" | on some iGPU targets a backend returns **silently wrong** logits — fast, plausible, incorrect. Backend choice is a measurement, not a default. |
|
|
96
|
+
| **Reasoning configured through the chat template** | a model that thinks forever, or degenerates, "because the model is weak" | the engine's **native** reasoning budget and the chat-template keyword are different mechanisms with different behaviour. Configure reasoning at the engine. |
|
|
94
97
|
|
|
95
98
|
### The fifth trap — model-host port drift
|
|
96
99
|
|
|
@@ -272,3 +275,71 @@ pi -p --model "llamacpp-igpu/qwen3.5-4b@q4_k_s" "Reply with exactly: IGPU OK"
|
|
|
272
275
|
`--model` takes `provider/id`, matching the static entries in
|
|
273
276
|
`.pi/agent/models.json` (§2). Screen the result by hand — a model that answers a
|
|
274
277
|
question you did not ask has told you more than one that answers yours.
|
|
278
|
+
|
|
279
|
+
## 11. Reasoning is a resource you must configure — not a feature you inherit
|
|
280
|
+
|
|
281
|
+
A reasoning model left to think without bound does not fail gracefully. It fails
|
|
282
|
+
**totally**: no answer at all, after minutes of device time. Three outcome classes
|
|
283
|
+
have been observed from the same model on the same request, differing *only* in how
|
|
284
|
+
reasoning was configured:
|
|
285
|
+
|
|
286
|
+
| Outcome | Shape |
|
|
287
|
+
|---|---|
|
|
288
|
+
| **Clean** | bounded reasoning, then a correct answer |
|
|
289
|
+
| **Degenerate** | reasoning collapses into repetition — plausible-looking, worthless |
|
|
290
|
+
| **Unterminated** | the model never leaves its reasoning; the response body is empty |
|
|
291
|
+
|
|
292
|
+
Three rules follow.
|
|
293
|
+
|
|
294
|
+
1. **Prefer the engine's native reasoning-budget flag.** Where an engine exposes
|
|
295
|
+
both a native budget and a chat-template keyword, they are **not** the same
|
|
296
|
+
mechanism. One bounds the thought; the other can truncate it mid-flight and
|
|
297
|
+
derail the model. Use the native one.
|
|
298
|
+
2. **A budget is a correctness control, not merely a cost control.** The clean
|
|
299
|
+
outcome above was *caused* by the budget. Without it the model is not slower —
|
|
300
|
+
it is **wrong, or silent**.
|
|
301
|
+
3. **Read the output, not the counter.** A generation can report a healthy
|
|
302
|
+
tokens-per-second figure while emitting multilingual noise or a repetition
|
|
303
|
+
loop. Verify by reading the text.
|
|
304
|
+
|
|
305
|
+
**Test procedure.** Same prompt, three configurations — unbounded, budgeted,
|
|
306
|
+
and reasoning-off. Score what came back, not how fast it came. A model that is fast
|
|
307
|
+
and empty is not faster.
|
|
308
|
+
|
|
309
|
+
**For agents that need an answer, not a monologue:** when a harness reports an
|
|
310
|
+
empty completion or a repetition loop from a reasoning model, the first suspect is
|
|
311
|
+
the reasoning configuration, not the model's capability.
|
|
312
|
+
|
|
313
|
+
## 12. A model service unit must never raise itself
|
|
314
|
+
|
|
315
|
+
A service unit that loads large weights must be started **by explicit hand**, never
|
|
316
|
+
by login. This is a systemd-and-quadlet lesson, not a vendor one.
|
|
317
|
+
|
|
318
|
+
- **`[Install] WantedBy=default.target` is the switch** — not the restart policy.
|
|
319
|
+
A unit carrying it is started when the target is reached, which for a user unit
|
|
320
|
+
means **every login**. `Restart=` says nothing about this.
|
|
321
|
+
- **Podman quadlet units are *generated* units**, and `systemctl --user disable`
|
|
322
|
+
is a **no-op** on them. So an autostart armed this way **cannot be turned off
|
|
323
|
+
afterwards** — not by `disable`, and not by any wrapper script that calls it.
|
|
324
|
+
Confirm by checking the unit's state (`generated`) before trusting a disable.
|
|
325
|
+
- **The fix is in the file, not the command line:** omit the `[Install]` section
|
|
326
|
+
entirely, then `daemon-reload`. Start the unit on demand.
|
|
327
|
+
- **Always cap the unit.** `MemoryMax=` (with `MemorySwapMax=0`, `OOMPolicy=stop`)
|
|
328
|
+
makes a bad load die **inside its own cgroup** instead of taking down the user
|
|
329
|
+
session — which is what happens when the kernel's global OOM killer picks the
|
|
330
|
+
victim.
|
|
331
|
+
- **`Restart=never` is not a valid systemd value.** The correct value is
|
|
332
|
+
`Restart=no`. An invalid value is silently ignored, which makes the
|
|
333
|
+
configuration a lie even when the effect happens to match the intent.
|
|
334
|
+
|
|
335
|
+
**Verification, not assumption.** After disarmament, list the generator's
|
|
336
|
+
`default.target.wants` directory and confirm the heavy units are **absent by name**.
|
|
337
|
+
A unit that still appears there can still raise itself.
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
ls /run/user/1000/systemd/generator/default.target.wants/
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
**Light infrastructure is a legitimate exception** — an embedding server that runs
|
|
344
|
+
on the CPU and cannot exhaust device memory may be allowed to start at login. Record
|
|
345
|
+
the exception and its reason beside the unit; an undocumented exception is drift.
|
package/.pi/mcp.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"engram": {
|
|
4
|
-
"command": "/home/
|
|
4
|
+
"command": "/home/zerwiz/.local/bin/engram-mcp",
|
|
5
5
|
"args": [
|
|
6
6
|
"--db",
|
|
7
|
-
"/home/
|
|
7
|
+
"/home/zerwiz/Ymir/.agents/memory/kaia.engram"
|
|
8
8
|
]
|
|
9
9
|
}
|
|
10
10
|
},
|
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,46 @@
|
|
|
1
1
|
|
|
2
|
+
## 2026-09-17 — "ymir: command not found" is a PATH fault, and here is the cure
|
|
3
|
+
|
|
4
|
+
- **The command is installed; the shell is not looking.** The published manifest carries `bin: {ymir, ymir-install}`, so the file is there — in npm's global bin directory, which an ordinary Linux install puts under `~/.npm-global` and a shell profile often never adds.
|
|
5
|
+
- **The README answers it where a stuck user looks**: `npm prefix -g`, the `ls` that proves the command exists, the one-line `export PATH`, and the `EACCES` cure that sets a prefix the user owns instead of reaching for `sudo`.
|
|
6
|
+
|
|
7
|
+
## 2026-09-17 — the model that raised itself, and the workhorse that replaced it
|
|
8
|
+
|
|
9
|
+
- **A model raised itself at login and killed the session.** `qwen3-6-35b-a3b`
|
|
10
|
+
carried `[Install] WantedBy=default.target`, so systemd started it at
|
|
11
|
+
12:36:33; with `--no-mmap` on a unified-memory APU the weights were
|
|
12
|
+
unreclaimable, memory and swap drained, and the kernel's global OOM killer took
|
|
13
|
+
`gnome-shell` — and the Ymir stack with it. `local-models.md` §4 gains
|
|
14
|
+
**three traps** from this (anonymous load on unified memory; backend chosen by
|
|
15
|
+
reputation rather than measurement; reasoning configured through the chat
|
|
16
|
+
template), and a new **§12** states the rule: a model service unit must never
|
|
17
|
+
raise itself.
|
|
18
|
+
- **`§11 — Reasoning is a resource you must configure`** is new. Unbounded
|
|
19
|
+
reasoning fails *totally* — no answer at all — not merely worse. The same model
|
|
20
|
+
on the same request produced clean, degenerate (repetition), or unterminated
|
|
21
|
+
output depending only on how reasoning was configured. Prefer the engine's
|
|
22
|
+
native budget flag; the chat-template keyword is a different mechanism.
|
|
23
|
+
- **Seated a new local workhorse** (a 176B-parameter MoE, Vulkan backend, MTP
|
|
24
|
+
speculative decoding, file-backed load). Measured before seating: prefill and
|
|
25
|
+
decode both at parity with the reference stack for this silicon. The per-host
|
|
26
|
+
record belongs in the hoard, not here — §6.
|
|
27
|
+
- **Ran a 32-run A/B on guidance during reasoning** (counsel at the moment of
|
|
28
|
+
failure vs counsel up front vs pause alone vs bare). Result: counsel delivered
|
|
29
|
+
*at the failure point* more than doubled rule-adherence over the pause-only
|
|
30
|
+
control and completed work that bare and up-front-counsel arms abandoned
|
|
31
|
+
entirely. Caveats, scoring traps, and the full table live in the private
|
|
32
|
+
record; the *generic* lesson — the artifact must be extracted, scoring must be
|
|
33
|
+
comment-aware, and the thought must be closed on resume — is recorded where the
|
|
34
|
+
product work lives.
|
|
35
|
+
- **Proposed, not applied:** a boot-cmdline correction to bring the TTM page pool
|
|
36
|
+
below system RAM (it is currently set *above* it, which the reference stack for
|
|
37
|
+
this silicon names as the cause of an unkillable driver deadlock). Needs root
|
|
38
|
+
and a reboot; runbook with rollback and post-reboot verification is in the hoard.
|
|
39
|
+
|
|
40
|
+
galdr-reread: `.agents/skills/galdr-ymirsystem/assets/local-models.md` — §4's
|
|
41
|
+
trap table grew from four to seven and its heading no longer claims a count;
|
|
42
|
+
**§11** (reasoning as a configured resource) and **§12** (a model unit must never
|
|
43
|
+
raise itself) are new sections.
|
|
2
44
|
|
|
3
45
|
## 2026-09-17 — the fork stands the machine
|
|
4
46
|
|
|
@@ -83,7 +125,6 @@
|
|
|
83
125
|
- **The consent shows the plan again.** `--colour` renders on stderr and I had sent *both* streams to `/dev/null`, so the plan was invisible at the very moment it was being accepted.
|
|
84
126
|
- **The seat can mend its own runtime**, and says why when it cannot — npm gates Electron postinstall, so a fresh install otherwise ends with a window that cannot open.
|
|
85
127
|
|
|
86
|
-
|
|
87
128
|
## 2026-09-17 — one well, in the hoard: every reader of Kaia's memory resolves the hoard store
|
|
88
129
|
|
|
89
130
|
- **The memory is ONE store and it lives in the hoard** —
|
|
@@ -168,7 +209,6 @@ contract unchanged).
|
|
|
168
209
|
old voice through the `0.1.8-alpha` pin.
|
|
169
210
|
- **`@zerwiz/ymir@0.1.13`** is the packet that carries them.
|
|
170
211
|
|
|
171
|
-
|
|
172
212
|
## 2026-09-17 — 0.1.12: the icons reach the live tree, and a missing surface is a failure
|
|
173
213
|
|
|
174
214
|
- **The launcher entries name the door** (`Exec=ymir hlidskjalf`, …) instead of an absolute path into whichever tree minted them — the fault that made every icon do nothing.
|
package/README.md
CHANGED
|
@@ -14,22 +14,10 @@
|
|
|
14
14
|
|
|
15
15
|

|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
That is what this platform is. **Ymir is the substrate** — a single machine, a
|
|
22
|
-
single repo — the primordial body from which every realm of work is carved.
|
|
23
|
-
Every service, every tool this fleet ships is shaped from Ymir's frame and
|
|
24
|
-
lives on it; nothing is painted onto Ymir, everything is cut *from* him.
|
|
25
|
-
|
|
26
|
-
It is not lean. It is a single-operator agentic **distro**: a fleet of named
|
|
27
|
-
agents (Brokk at the bellows, **Eindri** in sealed sandboxes), a memory well at
|
|
28
|
-
the root, an audit ledger a rune cannot un-carve, one tenant and its
|
|
29
|
-
workspaces, and a control plane you actually look at. You are the
|
|
30
|
-
**Allfather**; every agent reports to Brokk; Brokk reports to you.
|
|
31
|
-
Everything — development, marketing, business strategy, life — runs from one
|
|
32
|
-
repository.
|
|
17
|
+
Ymir is a lean, single-operator agentic OS. You are the **Allfather**; **Brokk** is
|
|
18
|
+
your primary agent; **Eindri** are the isolated workers it dispatches. Everything —
|
|
19
|
+
development, marketing, business strategy, life — runs from one repository, with an
|
|
20
|
+
audit ledger, a memory well, one tenant and its workspaces, and a control plane you actually look at.
|
|
33
21
|
|
|
34
22
|
---
|
|
35
23
|
|
|
@@ -658,14 +646,14 @@ git clone https://github.com/zerwiz/ymir.git ~/Ymir && cd ~/Ymir && bin/ymir-ins
|
|
|
658
646
|
npm install -g @zerwiz/ymir # the CLI, global
|
|
659
647
|
```
|
|
660
648
|
|
|
661
|
-
**Who can install this today
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
with no remnant of the fork it grew from.
|
|
649
|
+
**Who can install this today.** The Ymir distro is private while it is young —
|
|
650
|
+
so `curl`, `npx` and `git clone` work for the author and invited users, not for
|
|
651
|
+
the public (an unknown clone returns 404). If you would like access, ask:
|
|
652
|
+
**zerwiz.org**. When the distro opens, this note goes away and the four commands
|
|
653
|
+
above become open to everyone.
|
|
667
654
|
|
|
668
|
-
**
|
|
655
|
+
**Early adopters and contributors can install now — but it is rough.** Expect
|
|
656
|
+
sharp edges: the installer is honest about what it cannot do, and says so rather
|
|
669
657
|
than pretending. Bring a Linux host (or let the Windows/macOS bootstraps give
|
|
670
658
|
you one — see *Bringing your own machine* above), and read what the installer
|
|
671
659
|
prints before you trust it.
|
|
@@ -712,6 +700,34 @@ when the work will take a while, tells you plainly:
|
|
|
712
700
|
Your patience is noted, and it is earned.
|
|
713
701
|
```
|
|
714
702
|
|
|
703
|
+
### "`ymir`: command not found" — it is almost always PATH
|
|
704
|
+
|
|
705
|
+
The command is installed; npm puts it in a directory your shell may not look in.
|
|
706
|
+
The package declares it (`bin: {ymir, ymir-install}`), so this is not a missing
|
|
707
|
+
file — it is a missing path.
|
|
708
|
+
|
|
709
|
+
```bash
|
|
710
|
+
npm prefix -g # where npm puts global packages (e.g. ~/.npm-global)
|
|
711
|
+
ls "$(npm prefix -g)/bin/ymir" # the command is there
|
|
712
|
+
export PATH="$(npm prefix -g)/bin:$PATH" # this session
|
|
713
|
+
echo 'export PATH="$(npm prefix -g)/bin:$PATH"' >> ~/.bashrc # every session after
|
|
714
|
+
```
|
|
715
|
+
|
|
716
|
+
On macOS with Homebrew, npm's prefix is usually `/opt/homebrew` and already on
|
|
717
|
+
the path; on Linux a global install as an ordinary user lands under `~/.npm-global`
|
|
718
|
+
(or whatever `npm config get prefix` says), which is exactly the directory that is
|
|
719
|
+
easy to miss. Windows uses `%APPDATA%\npm`.
|
|
720
|
+
|
|
721
|
+
**And if the install itself is refused** — a `EACCES` on `/usr/lib/node_modules` —
|
|
722
|
+
do not reach for `sudo`: point npm at a prefix you own once, and every Ymir
|
|
723
|
+
install afterwards is painless.
|
|
724
|
+
|
|
725
|
+
```bash
|
|
726
|
+
npm config set prefix "$HOME/.npm-global"
|
|
727
|
+
export PATH="$HOME/.npm-global/bin:$PATH"
|
|
728
|
+
npm install -g @zerwiz/ymir
|
|
729
|
+
```
|
|
730
|
+
|
|
715
731
|
### The packages — what is on npm
|
|
716
732
|
|
|
717
733
|
Six names were published; five serve. The distro **depends on the four
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
fm-branch-eligible-owner-v1
|
|
2
|
+
1760629
|
|
3
|
+
linux-starttime=13963152 cmdline-hex=Usage:od[--port<n>][--host<addr>][--no-open]StartthelocaldaemonandopenthewebUI.odtoolslive-artifacts<create|list|update|refresh>[options]Manageliveartifactsthroughdaemonwrappercommands.odtoolsdirections[--id<id>|--label<label>][--json]Listthebuilt-indesigndirections,orprintonedirection'sfullpalette/fontstacks/posturespecforbindinginto:root.odartifactscreate--name<path>--input<file>[--project<id-or-name>]Createanormalprojectartifactthroughthelocaldaemon.odtoolsconnectors<list|execute|github-design-context>[options]Discoverandexecuteconfiguredconnectors.odtoolsdesign-systemsread--path<manifest-declared-path>Readactivedesign-systempull-layerfilesthroughdaemonwrappercommands.odmcplive-artifactsStarttheMCPserverexposinglive-artifactandconnectortools.odresearchsearch--query<text>[--max-sources5][--daemon-url<url>]Runagent-callableTavilyresearchthroughthelocaldaemon.odplugin<list|info|install|uninstall|apply|doctor|replay|trust>[args]Discover,install,andapplypluginsthroughthelocaldaemon.odpluginpublish-repo<folder>Create/updatetheauthor'sGitHubrepoforalocalpluginfolder.odpluginopen-design-pr<folder>Pushacommunity-catalogbranchandopentheOpenDesignPRform.odautomation<list|get|create|update|run|runs|pause|resume|delete>[args]DrivetheAutomationssurfaceheadlessly.SamestoreastheUI'sAutomationstab,soanexternalagent(hermes,openclaw,...)canschedule,trigger,orharvestresultsfromaroutinewithoutopeningthewebUI.odmessage-center<list|read|read-all>[args]Readandacknowledgemessage-centerinboxitemsthroughthesamedaemonendpointsthebellUIuses.odamr<login|status>[args]StartVelabrowsersign-inorinspectthecurrentVelaaccountthroughthelocalOpenDesigndaemon.odmemorytree<list|view|edit|move>[args]Inspectandeditthememorytreethatisinjectedintoagentprompts.odshare<open-design|url>[options]Buildlocalizedsocial-sharetargetsfortheOpenDesignrepooradeployedprojectURL.Use--jsonforscriptedintegrations.odui<list|show|respond|revoke|prefill>[args]ReadandanswerGenUIsurfaces(form/choice/confirmation/oauth-prompt)headlessly.odchatnew--project<id>[--seed-from<cid>][--fork-after<mid>][--title"<t>"][--json]CreateaSideChat:anewconversationthatinheritsanotherconversation'scontextbycopyingitsmessages(--seed-from),optionallystoppingatonemessage(--fork-after).Mirrorsthewebchatforkaction.oddiagnosticsexport[<path>][--json]Bundledaemon/web/desktoplogs,machineinfo,andrecentcrashreportsintoazipforsupporttickets.SameoutputasSettings→About→Exportdiagnostics.odexport<file>--project<id>--format<html|pdf|image|pptx>[--out<path>]ProgrammaticallyexportanHTML/deckartifacttoHTML,PDF,image,orPPTX(nomodel/agentcalls).MirrorsthewebDownloadmenu;rasterizationusesthedesktopruntime'sbundledChromium.odlint<file.html|->[--fail-on<p0|p1|p2|none>][--json]Runthedaemon'santi-slopartifactlinteragainstanHTMLfileorstdin(nomodel/agentcalls;headless-safe).Exits1whenfindingsmeetthe--fail-onthreshold,soitcangatecron/CIrenderpipelines."$OD_NODE_BIN""$OD_BIN"tools...Recommendedagent-runtimeform;avoidsrelyingonuserPATHforodornode.odmediagenerate--surface<image|video|audio>--model<id>[opts]Generateamediaartifactandwriteitintotheactiveproject.Designedtobeinvokedbyacodeagent-picksupOD_DAEMON_URLandOD_PROJECT_IDfromtheenvthatthedaemoninjectedonspawn.odmediascaffold--composition-dir.hyperframes-cache/<id>CreateadeterministicHyperFramescompositionwithoutnpxorglobalskillinstallation,beforedispatchingitthroughmediagenerate.odmcp[--daemon-url<url>]RunastdioMCPserverthatproxiesprojecttoolcallstoarunningOpenDesigndaemon.Wireitintoacodingagent(ClaudeCode,Cursor,VSCode,Zed,Windsurf)inanotherrepotopullfilesfromalocalOpenDesignprojectandcreateproject-scopedartifactswithoutexportingazip.Options:--port<n>Porttolistenon(default:7456,env:OD_PORT).--host<addr>Interfaceaddresstobindto(default:127.0.0.1,env:OD_BIND_HOST).SettoaspecificIP(e.g.aTailscaleaddress)torestrictaccesstothatinterfaceonly.--no-openDonotopenthebrowserafterstart.Whatthedaemondoes:*scansPATHforinstalledcode-agentCLIs(claude,codex,devin,opencode,cursor-agent,...)*servesthechatUIathttp://<host>:<port>*proxiesmessages(text+images)totheselectedagentviachild-processspawn*exposesproject-scopedmediascaffold/generateAPIs—theunifiedpaththattheagentcallsvia`odmediascaffold`and`odmediagenerate`.
|
|
4
|
+
1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"/home/zerwiz/.pi/agent/sessions/--home-zerwiz-firstmate--/2026-09-04T13-43-14-520Z_01a06ca8-c358-7166-8de7-f2dced4fc993.jsonl","index":428}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/home/zerwiz/firstmate/state/branch-session/2026-09-04T16-49-38-671Z_01a06d53-6b6f-7619-930d-e6dfd9a4a29e.jsonl
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
5
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
f1b6dca4f07161ff283508249d5a1526
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
5386cd8e1346b9f0559bf8df63aba235
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
8b3e69307a35d6c32b32b6372db14dbf
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1b42e1472af079e799717464cda336a7
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
b11adb7ce9310f6835e9bb9bd279750c
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
14
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1760629
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1760629
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0:1788541798
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1760629
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
f1b6dca4f07161ff283508249d5a1526
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
8b3e69307a35d6c32b32b6372db14dbf
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
b11adb7ce9310f6835e9bb9bd279750c
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1788541317
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1788541052
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1788541717
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
delivered
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
NOTICE: auto-detected herdr runtime (HERDR_ENV=1) - spawning into the EXPERIMENTAL herdr backend. Set config/backend or pass --backend tmux to opt out.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1760629 off
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
32
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
arm_pid=3540616 watcher_pid=3540691 origin=started started_at=1788222160 ended_at=1788223124 exit_code=143 signal=TERM reason=arm-interrupted beacon_age=16 lock_before=pid:3540691|identity:linux-starttime=22802703 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none
|
|
2
|
+
arm_pid=1013276 watcher_pid=1013356 origin=started started_at=1788540546 ended_at=1788540547 exit_code=0 signal=none reason=actionable-check beacon_age=0 lock_before=pid:1013356|identity:linux-starttime=922627 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1013844
|
|
3
|
+
arm_pid=1013770 watcher_pid=1013844 origin=started started_at=1788540547 ended_at=1788540578 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1013844|identity:linux-starttime=922678 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1015796
|
|
4
|
+
arm_pid=1015722 watcher_pid=1015796 origin=started started_at=1788540578 ended_at=1788540609 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:1015796|identity:linux-starttime=925763 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1018084
|
|
5
|
+
arm_pid=1018010 watcher_pid=1018084 origin=started started_at=1788540610 ended_at=1788540748 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1018084|identity:linux-starttime=928938 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1027614
|
|
6
|
+
arm_pid=1027539 watcher_pid=1027614 origin=started started_at=1788540748 ended_at=1788540781 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1027614|identity:linux-starttime=942795 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1030957
|
|
7
|
+
arm_pid=1030883 watcher_pid=1030957 origin=started started_at=1788540781 ended_at=1788540877 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:1030957|identity:linux-starttime=946116 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1036097
|
|
8
|
+
arm_pid=1036023 watcher_pid=1036097 origin=started started_at=1788540877 ended_at=1788540957 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1036097|identity:linux-starttime=955731 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1039924
|
|
9
|
+
arm_pid=1039850 watcher_pid=1039924 origin=started started_at=1788540957 ended_at=1788540973 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1039924|identity:linux-starttime=963675 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1041607
|
|
10
|
+
arm_pid=1041533 watcher_pid=1041607 origin=started started_at=1788540973 ended_at=1788541052 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1041607|identity:linux-starttime=965306 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1048066
|
|
11
|
+
arm_pid=1047992 watcher_pid=1048066 origin=started started_at=1788541052 ended_at=1788541144 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1048066|identity:linux-starttime=973176 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1053785
|
|
12
|
+
arm_pid=1053711 watcher_pid=1053785 origin=started started_at=1788541144 ended_at=1788541207 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1053785|identity:linux-starttime=982431 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1056909
|
|
13
|
+
arm_pid=1056835 watcher_pid=1056909 origin=started started_at=1788541207 ended_at=1788541284 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1056909|identity:linux-starttime=988699 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1061606
|
|
14
|
+
arm_pid=1061532 watcher_pid=1061606 origin=started started_at=1788541284 ended_at=1788541316 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:1061606|identity:linux-starttime=996434 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1064076
|
|
15
|
+
arm_pid=1064002 watcher_pid=1064076 origin=started started_at=1788541316 ended_at=1788541592 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1064076|identity:linux-starttime=999632 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1075491
|
|
16
|
+
arm_pid=1075417 watcher_pid=1075491 origin=started started_at=1788541592 ended_at=1788541684 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1075491|identity:linux-starttime=1027192 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1080764
|
|
17
|
+
arm_pid=1080690 watcher_pid=1080764 origin=started started_at=1788541685 ended_at=1788541716 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1080764|identity:linux-starttime=1036442 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:1083267
|
|
18
|
+
arm_pid=1333537 watcher_pid=1333623 origin=started started_at=1788606323 ended_at=1788606323 exit_code=0 signal=none reason=actionable-check beacon_age=0 lock_before=pid:none|identity:none lock_after=pid:none|identity:none successor=started:1334223
|
|
19
|
+
arm_pid=3342034 watcher_pid=3342116 origin=started started_at=1788788524 ended_at=1788788526 exit_code=0 signal=none reason=actionable-check beacon_age=0 lock_before=pid:3342116|identity:linux-starttime=25720597 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=started:3343039
|
|
20
|
+
arm_pid=3342907 watcher_pid=3343039 origin=started started_at=1788788527 ended_at=1788803447 exit_code=143 signal=TERM reason=arm-interrupted beacon_age=16 lock_before=pid:3343039|identity:linux-starttime=25720901 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none
|
|
21
|
+
arm_pid=3154284 watcher_pid=3154719 origin=started started_at=1788979636 ended_at=1788979637 exit_code=0 signal=none reason=actionable-check beacon_age=0 lock_before=pid:none|identity:none lock_after=pid:none|identity:none successor=started:3156824
|
|
22
|
+
arm_pid=3156729 watcher_pid=3156824 origin=started started_at=1788979638 ended_at=1788981700 exit_code=143 signal=TERM reason=arm-interrupted beacon_age=15 lock_before=pid:3156824|identity:linux-starttime=3010708 cmdline-hex=Usage:od[--port<n>][--host<addr>][--no-open]StartthelocaldaemonandopenthewebUI.odtoolslive-artifacts<create|list|update|refresh>[options]Manageliveartifactsthroughdaemonwrappercommands.odtoolsdirections[--id<id>|--label<label>][--json]Listthebuilt-indesigndirections,orprintonedirection'sfullpalette/fontstacks/posturespecforbindinginto:root.odartifactscreate--name<path>--input<file>[--project<id-or-name>]Createanormalprojectartifactthroughthelocaldaemo lock_after=pid:none|identity:none successor=none
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
1013356 linux-starttime=922627 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 check: rearm-resurface
|
|
2
|
+
1013844 linux-starttime=922678 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 signal: /home/zerwiz/firstmate/state/server-knowledge.turn-ended
|
|
3
|
+
1015796 linux-starttime=925763 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 stale: default:wR:p2
|
|
4
|
+
1018084 linux-starttime=928938 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 signal: /home/zerwiz/firstmate/state/server-knowledge.turn-ended
|
|
5
|
+
1027614 linux-starttime=942795 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 stale: default:wR:p2
|
|
6
|
+
1030957 linux-starttime=946116 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 stale: default:wR:p2
|
|
7
|
+
1036097 linux-starttime=955731 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 stale: default:wR:p2 (unread firstmate instruction: /home/zerwiz/firstmate/state/server-knowledge.inbox/001.msg still unhandled after 3 doorbell delivery attempts with an idle pane; inspect the worker)
|
|
8
|
+
1039924 linux-starttime=963675 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 stale: default:wR:p2
|
|
9
|
+
1041607 linux-starttime=965306 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 stale: default:wR:p2
|
|
10
|
+
1048066 linux-starttime=973176 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 signal: /home/zerwiz/firstmate/state/server-knowledge.turn-ended
|
|
11
|
+
1053785 linux-starttime=982431 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 stale: firstmate:fm-server-knowledge
|
|
12
|
+
1056909 linux-starttime=988699 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 signal: /home/zerwiz/firstmate/state/server-knowledge.turn-ended
|
|
13
|
+
1061606 linux-starttime=996434 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 stale: default:wF:p5
|
|
14
|
+
1064076 linux-starttime=999632 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 signal: /home/zerwiz/firstmate/state/server-knowledge.turn-ended
|
|
15
|
+
1075491 linux-starttime=1027192 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 signal: /home/zerwiz/firstmate/state/server-knowledge.turn-ended
|
|
16
|
+
1080764 linux-starttime=1036442 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 stale: firstmate:fm-server-knowledge
|
|
17
|
+
1333623 linux-starttime=7500421 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 check: rearm-resurface
|
|
18
|
+
3342116 linux-starttime=25720597 cmdline-hex=62617368002f686f6d652f7a657277697a2f66697273746d6174652f62696e2f666d2d77617463682e736800 check: rearm-resurface
|
|
19
|
+
3154719 linux-starttime=3010534 cmdline-hex=Usage:od[--port<n>][--host<addr>][--no-open]StartthelocaldaemonandopenthewebUI.odtoolslive-artifacts<create|list|update|refresh>[options]Manageliveartifactsthroughdaemonwrappercommands.odtoolsdirections[--id<id>|--label<label>][--json]Listthebuilt-indesigndirections,orprintonedirection'sfullpalette/fontstacks/posturespecforbindinginto:root.odartifactscreate--name<path>--input<file>[--project<id-or-name>]Createanormalprojectartifactthroughthelocaldaemon.odtoolsconnectors<list|execute|github-design-context>[options]Discoverandexecuteconfiguredconnectors.odtoolsdesign-systemsread--path<manifest-declared-path>Readactivedesign-systempull-layerfilesthroughdaemonwrappercommands.odmcplive-artifactsStarttheMCPserverexposinglive-artifactandconnectortools.odresearchsearch--query<text>[--max-sources5][--daemon-url<url>]Runagent-callableTavilyresearchthroughthelocaldaemon.odplugin<list|info|install|uninstall|apply|doctor|replay|trust>[args]Discover,install,andapplypluginsthroughthelocaldaemon.odpluginpublish-repo<folder>Create/updatetheauthor'sGitHubrepoforalocalpluginfolder.odpluginopen-design-pr<folder>Pushacommunity-catalogbranchandopentheOpenDesignPRform.odautomation<list|get|create|update|run|runs|pause|resume|delete>[args]DrivetheAutomationssurfaceheadlessly.SamestoreastheUI'sAutomationstab,soanexternalagent(hermes,openclaw,...)canschedule,trigger,orharvestresultsfromaroutinewithoutopeningthewebUI.odmessage-center<list|read|read-all>[args]Readandacknowledgemessage-centerinboxitemsthroughthesamedaemonendpointsthebellUIuses.odamr<login|status>[args]StartVelabrowsersign-inorinspectthecurrentVelaaccountthroughthelocalOpenDesigndaemon.odmemorytree<list|view|edit|move>[args]Inspectandeditthememorytreethatisinjectedintoagentprompts.odshare<open-design|url>[options]Buildlocalizedsocial-sharetargetsfortheOpenDesignrepooradeployedprojectURL.Use--jsonforscriptedintegrations.odui<list|show|respond|revoke|prefill>[args]ReadandanswerGenUIsurfaces(form/choice/confirmation/oauth-prompt)headlessly.odchatnew--project<id>[--seed-from<cid>][--fork-after<mid>][--title"<t>"][--json]CreateaSideChat:anewconversationthatinheritsanotherconversation'scontextbycopyingitsmessages(--seed-from),optionallystoppingatonemessage(--fork-after).Mirrorsthewebchatforkaction.oddiagnosticsexport[<path>][--json]Bundledaemon/web/desktoplogs,machineinfo,andrecentcrashreportsintoazipforsupporttickets.SameoutputasSettings→About→Exportdiagnostics.odexport<file>--project<id>--format<html|pdf|image|pptx>[--out<path>]ProgrammaticallyexportanHTML/deckartifacttoHTML,PDF,image,orPPTX(nomodel/agentcalls).MirrorsthewebDownloadmenu;rasterizationusesthedesktopruntime'sbundledChromium.odlint<file.html|->[--fail-on<p0|p1|p2|none>][--json]Runthedaemon'santi-slopartifactlinteragainstanHTMLfileorstdin(nomodel/agentcalls;headless-safe).Exits1whenfindingsmeetthe--fail-onthreshold,soitcangatecron/CIrenderpipelines."$OD_NODE_BIN""$OD_BIN"tools...Recommendedagent-runtimeform;avoidsrelyingonuserPATHforodornode.odmediagenerate--surface<image|video|audio>--model<id>[opts]Generateamediaartifactandwriteitintotheactiveproject.Designedtobeinvokedbyacodeagent-picksupOD_DAEMON_URLandOD_PROJECT_IDfromtheenvthatthedaemoninjectedonspawn.odmediascaffold--composition-dir.hyperframes-cache/<id>CreateadeterministicHyperFramescompositionwithoutnpxorglobalskillinstallation,beforedispatchingitthroughmediagenerate.odmcp[--daemon-url<url>]RunastdioMCPserverthatproxiesprojecttoolcallstoarunningOpenDesigndaemon.Wireitintoacodingagent(ClaudeCode,Cursor,VSCode,Zed,Windsurf)inanotherrepotopullfilesfromalocalOpenDesignprojectandcreateproject-scopedartifactswithoutexportingazip.Options:--port<n>Porttolistenon(default:7456,env:OD_PORT).--host<addr>Interfaceaddresstobindto(default:127.0.0.1,env:OD_BIND_HOST).SettoaspecificIP(e.g.aTailscaleaddress)torestrictaccesstothatinterfaceonly.--no-openDonotopenthebrowserafterstart.Whatthedaemondoes:*scansPATHforinstalledcode-agentCLIs(claude,codex,devin,opencode,cursor-agent,...)*servesthechatUIathttp://<host>:<port>*proxiesmessages(text+images)totheselectedagentviachild-processspawn*exposesproject-scopedmediascaffold/generateAPIs—theunifiedpaththattheagentcallsvia`odmediascaffold`and`odmediagenerate`. check: rearm-resurface
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
[2026-09-01T03:32:52+0300] absorbed heartbeat (no captain-relevant change)
|
|
2
|
+
[2026-09-04T19:49:38+0300] absorbed heartbeat (no captain-relevant change)
|
|
3
|
+
[2026-09-04T19:50:10+0300] absorbed non-terminal stale timer reset: default:wR:p2
|
|
4
|
+
[2026-09-04T19:51:42+0300] absorbed benign signal: /home/zerwiz/firstmate/state/server-knowledge.turn-ended
|
|
5
|
+
[2026-09-04T19:52:30+0300] steer-inbox delivery attempt: server-knowledge 001.msg result=0
|
|
6
|
+
[2026-09-04T19:53:02+0300] absorbed non-terminal stale timer reset: default:wR:p2
|
|
7
|
+
[2026-09-04T19:54:06+0300] steer-inbox delivery attempt: server-knowledge 001.msg result=0
|
|
8
|
+
[2026-09-04T19:54:38+0300] absorbed non-terminal stale timer reset: default:wR:p2
|
|
9
|
+
[2026-09-04T19:55:41+0300] steer-inbox delivery attempt: server-knowledge 001.msg result=0
|
|
10
|
+
[2026-09-04T19:56:14+0300] absorbed non-terminal stale timer reset: default:wR:p2
|
|
11
|
+
[2026-09-04T19:57:32+0300] absorbed non-terminal stale timer reset: default:wR:p2
|
|
12
|
+
[2026-09-04T19:59:51+0300] absorbed heartbeat (no captain-relevant change)
|
|
13
|
+
[2026-09-04T20:00:08+0300] absorbed non-terminal stale timer reset: firstmate:fm-server-knowledge
|
|
14
|
+
[2026-09-04T20:01:57+0300] absorbed non-terminal stale timer reset: default:wF:p5
|
|
15
|
+
[2026-09-04T20:08:37+0300] absorbed non-terminal stale timer reset: firstmate:fm-server-knowledge
|
|
16
|
+
[2026-09-04T20:09:37+0300] absorbed benign signal: /home/zerwiz/firstmate/state/server-knowledge.turn-ended
|
|
17
|
+
[2026-09-04T20:09:53+0300] absorbed heartbeat (no captain-relevant change)
|
|
18
|
+
[2026-09-04T20:10:38+0300] absorbed benign signal: /home/zerwiz/firstmate/state/server-knowledge.turn-ended
|
|
19
|
+
[2026-09-05T14:05:24+0300] absorbed heartbeat (no captain-relevant change)
|
|
20
|
+
[2026-09-05T14:25:33+0300] absorbed heartbeat (no captain-relevant change)
|
|
21
|
+
[2026-09-07T16:42:09+0300] absorbed heartbeat (no captain-relevant change)
|
|
22
|
+
[2026-09-07T17:02:12+0300] absorbed heartbeat (no captain-relevant change)
|
|
23
|
+
[2026-09-07T17:42:21+0300] absorbed heartbeat (no captain-relevant change)
|
|
24
|
+
[2026-09-07T19:02:33+0300] absorbed heartbeat (no captain-relevant change)
|
|
25
|
+
[2026-09-09T21:47:19+0300] absorbed heartbeat (no captain-relevant change)
|
|
26
|
+
[2026-09-09T22:07:19+0300] absorbed heartbeat (no captain-relevant change)
|
|
27
|
+
[2026-09-09T22:53:26+0300] absorbed heartbeat (no captain-relevant change)
|
|
28
|
+
[2026-09-10T00:13:28+0300] absorbed heartbeat (no captain-relevant change)
|
|
29
|
+
[2026-09-10T02:13:36+0300] absorbed heartbeat (no captain-relevant change)
|
|
30
|
+
[2026-09-10T04:13:38+0300] absorbed heartbeat (no captain-relevant change)
|
|
31
|
+
[2026-09-10T14:07:20+0300] absorbed heartbeat (no captain-relevant change)
|
|
32
|
+
[2026-09-10T16:07:33+0300] absorbed heartbeat (no captain-relevant change)
|
|
33
|
+
[2026-09-10T18:07:45+0300] absorbed heartbeat (no captain-relevant change)
|
|
34
|
+
[2026-09-10T20:07:56+0300] absorbed heartbeat (no captain-relevant change)
|
|
35
|
+
[2026-09-10T22:08:03+0300] absorbed heartbeat (no captain-relevant change)
|
|
36
|
+
[2026-09-11T00:08:04+0300] absorbed heartbeat (no captain-relevant change)
|
|
37
|
+
[2026-09-11T02:08:05+0300] absorbed heartbeat (no captain-relevant change)
|
|
38
|
+
[2026-09-11T04:08:05+0300] absorbed heartbeat (no captain-relevant change)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/home/zerwiz/firstmate
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3526251
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
linux-starttime=3407402 cmdline-hex=Usage:od[--port<n>][--host<addr>][--no-open]StartthelocaldaemonandopenthewebUI.odtoolslive-artifacts<create|list|update|refresh>[options]Manageliveartifactsthroughdaemonwrappercommands.odtoolsdirections[--id<id>|--label<label>][--json]Listthebuilt-indesigndirections,orprintonedirection'sfullpalette/fontstacks/posturespecforbindinginto:root.odartifactscreate--name<path>--input<file>[--project<id-or-name>]Createanormalprojectartifactthroughthelocaldaemon.odtoolsconnectors<list|execute|github-design-context>[options]Discoverandexecuteconfiguredconnectors.odtoolsdesign-systemsread--path<manifest-declared-path>Readactivedesign-systempull-layerfilesthroughdaemonwrappercommands.odmcplive-artifactsStarttheMCPserverexposinglive-artifactandconnectortools.odresearchsearch--query<text>[--max-sources5][--daemon-url<url>]Runagent-callableTavilyresearchthroughthelocaldaemon.odplugin<list|info|install|uninstall|apply|doctor|replay|trust>[args]Discover,install,andapplypluginsthroughthelocaldaemon.odpluginpublish-repo<folder>Create/updatetheauthor'sGitHubrepoforalocalpluginfolder.odpluginopen-design-pr<folder>Pushacommunity-catalogbranchandopentheOpenDesignPRform.odautomation<list|get|create|update|run|runs|pause|resume|delete>[args]DrivetheAutomationssurfaceheadlessly.SamestoreastheUI'sAutomationstab,soanexternalagent(hermes,openclaw,...)canschedule,trigger,orharvestresultsfromaroutinewithoutopeningthewebUI.odmessage-center<list|read|read-all>[args]Readandacknowledgemessage-centerinboxitemsthroughthesamedaemonendpointsthebellUIuses.odamr<login|status>[args]StartVelabrowsersign-inorinspectthecurrentVelaaccountthroughthelocalOpenDesigndaemon.odmemorytree<list|view|edit|move>[args]Inspectandeditthememorytreethatisinjectedintoagentprompts.odshare<open-design|url>[options]Buildlocalizedsocial-sharetargetsfortheOpenDesignrepooradeployedprojectURL.Use--jsonforscriptedintegrations.odui<list|show|respond|revoke|prefill>[args]ReadandanswerGenUIsurfaces(form/choice/confirmation/oauth-prompt)headlessly.odchatnew--project<id>[--seed-from<cid>][--fork-after<mid>][--title"<t>"][--json]CreateaSideChat:anewconversationthatinheritsanotherconversation'scontextbycopyingitsmessages(--seed-from),optionallystoppingatonemessage(--fork-after).Mirrorsthewebchatforkaction.oddiagnosticsexport[<path>][--json]Bundledaemon/web/desktoplogs,machineinfo,andrecentcrashreportsintoazipforsupporttickets.SameoutputasSettings→About→Exportdiagnostics.odexport<file>--project<id>--format<html|pdf|image|pptx>[--out<path>]ProgrammaticallyexportanHTML/deckartifacttoHTML,PDF,image,orPPTX(nomodel/agentcalls).MirrorsthewebDownloadmenu;rasterizationusesthedesktopruntime'sbundledChromium.odlint<file.html|->[--fail-on<p0|p1|p2|none>][--json]Runthedaemon'santi-slopartifactlinteragainstanHTMLfileorstdin(nomodel/agentcalls;headless-safe).Exits1whenfindingsmeetthe--fail-onthreshold,soitcangatecron/CIrenderpipelines."$OD_NODE_BIN""$OD_BIN"tools...Recommendedagent-runtimeform;avoidsrelyingonuserPATHforodornode.odmediagenerate--surface<image|video|audio>--model<id>[opts]Generateamediaartifactandwriteitintotheactiveproject.Designedtobeinvokedbyacodeagent-picksupOD_DAEMON_URLandOD_PROJECT_IDfromtheenvthatthedaemoninjectedonspawn.odmediascaffold--composition-dir.hyperframes-cache/<id>CreateadeterministicHyperFramescompositionwithoutnpxorglobalskillinstallation,beforedispatchingitthroughmediagenerate.odmcp[--daemon-url<url>]RunastdioMCPserverthatproxiesprojecttoolcallstoarunningOpenDesigndaemon.Wireitintoacodingagent(ClaudeCode,Cursor,VSCode,Zed,Windsurf)inanotherrepotopullfilesfromalocalOpenDesignprojectandcreateproject-scopedartifactswithoutexportingazip.Options:--port<n>Porttolistenon(default:7456,env:OD_PORT).--host<addr>Interfaceaddresstobindto(default:127.0.0.1,env:OD_BIND_HOST).SettoaspecificIP(e.g.aTailscaleaddress)torestrictaccesstothatinterfaceonly.--no-openDonotopenthebrowserafterstart.Whatthedaemondoes:*scansPATHforinstalledcode-agentCLIs(claude,codex,devin,opencode,cursor-agent,...)*servesthechatUIathttp://<host>:<port>*proxiesmessages(text+images)totheselectedagentviachild-processspawn*exposesproject-scopedmediascaffold/generateAPIs—theunifiedpaththattheagentcallsvia`odmediascaffold`and`odmediagenerate`.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/home/zerwiz/firstmate/bin/fm-watch.sh
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/home/zerwiz/firstmate
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3526251
|