@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,28 @@
1
+ # Projects Inventory
2
+
3
+ ## Active Projects
4
+
5
+ ### Ymir Platform Development
6
+ - Status: Initial setup
7
+ - Description: Core development of the Ymir agent platform
8
+ - Owner: zerwiz (Allfather)
9
+ - Priority: High
10
+
11
+ ## Project Structure
12
+
13
+ Each project follows the naming convention:
14
+ {team}-{project-name}
15
+
16
+ Projects are tracked in svartalfaheim/{realm}/workspace/development/
17
+
18
+ ## Onboarding Process
19
+ 1. Define scope and requirements
20
+ 2. Establish team structure
21
+ 3. Set up monitoring and alerting
22
+ 4. Deploy initial configuration
23
+ 5. Validate integration
24
+
25
+ ## Resources
26
+ - Git repository: main Ymir platform repo
27
+ - CI/CD pipeline: configured via .github/workflows/
28
+ - Monitoring: integrated with Mimirsbrunn
package/data/realm.md ADDED
@@ -0,0 +1 @@
1
+ wayof
@@ -0,0 +1,27 @@
1
+ # Ymir baked image — an OPTIONAL alternative to bind-mounting the checkout.
2
+ #
3
+ # Build with either engine (the core resolves engines; this file does not care):
4
+ # podman build -f deploy/Containerfile -t ymir:local .
5
+ # docker build -f deploy/Containerfile -t ymir:local .
6
+ #
7
+ # The bind-mount examples in deploy/quadlet and deploy/compose are simpler for a
8
+ # self-host box (updates are `git pull`). Use this image when you want an
9
+ # immutable release: pin a tag, roll back by tag.
10
+ #
11
+ # Durable state still needs volumes: state/, workspace/, .agents/memory/,
12
+ # agents/, and apps/*/dist. The image bakes only code.
13
+
14
+ FROM docker.io/oven/bun:1
15
+
16
+ # The core needs git, python3 (the memory well/CLI), curl, and TLS roots.
17
+ RUN apt-get update \
18
+ && apt-get install -y --no-install-recommends \
19
+ git python3 python3-venv curl ca-certificates \
20
+ && rm -rf /var/lib/apt/lists/*
21
+
22
+ WORKDIR /opt/ymir
23
+ COPY . /opt/ymir
24
+ ENV YMIR_ROOT=/opt/ymir
25
+
26
+ EXPOSE 38888 38889 54370
27
+ CMD ["bash", "-lc", "cd /opt/ymir && bash scripts/start.sh"]
@@ -0,0 +1,104 @@
1
+ # Deploy — the agnostic deployment layer
2
+
3
+ Ymir's **core is host-agnostic**: one portable runtime, no provider assumptions.
4
+ A *deployment* is a thin host-managed layer **over** that core — never inside it.
5
+ This directory ships the neutral contract and example layers; adopt whichever
6
+ matches the host.
7
+
8
+ ## The neutral contract
9
+
10
+ Any deployment must provide exactly these; nothing more is expected of it:
11
+
12
+ ```
13
+ contract[6]{needs,example}:
14
+ "the checkout","the Ymir repo available at a path (bind-mount or baked image)"
15
+ "a runtime","git · python3 · curl · bun (the core runs on any of Docker/Podman/bare)"
16
+ "env","HLIDSKJALF_AUTH + realm/env from .env.local (never inline, never committed)"
17
+ "persistent state","state/, workspace/, .agents/memory/, agents/, apps/*/dist — writable and durable"
18
+ "ports","SPA :38888 · gate :38889 · Smíðja visualizer :54370 (5-digit ≤ 65535, env-driven: HLIDSKJALF_PORT · HLIDSKJALF_API_PORT · SMIDJA_VIZ_API_PORT) · well :4602 · Bifrost :4603 internal"
19
+ "a raise command","scripts/start.sh (lower with scripts/stop.sh)"
20
+ ```
21
+
22
+ The engine is resolved by the core (`bin/ymir-platform.sh` → `ymir_container_engine`),
23
+ not by the deployment. A layer never names `docker` or `podman`.
24
+
25
+ ## Shapes (pick one; they are equivalent)
26
+
27
+ | Shape | When | Path |
28
+ |---|---|---|
29
+ | **Bare** | a dedicated box, or a container you already manage | `scripts/start.sh` directly |
30
+ | **Quadlet** (Podman + systemd) | a Fedora/RHEL host running rootless Podman | `deploy/quadlet/ymir.container` |
31
+ | **Compose** (Docker or `podman-compose`) | a Docker host or mixed fleet | `deploy/compose/compose.yaml` |
32
+
33
+ ```
34
+ # bare
35
+ scripts/start.sh
36
+
37
+ # quadlet (rootless, per-user)
38
+ cp deploy/quadlet/ymir.container ~/.config/containers/systemd/
39
+ systemctl --user daemon-reload && systemctl --user start ymir.service
40
+
41
+ # compose
42
+ cp deploy/env.example .env # then edit; never commit
43
+ docker compose -f deploy/compose/compose.yaml up -d
44
+ # or: podman-compose -f deploy/compose/compose.yaml up -d
45
+ ```
46
+
47
+ ## Baked image (optional)
48
+
49
+ Prefer an immutable release to a bind-mounted checkout? Build `deploy/Containerfile`
50
+ with either engine and point the Quadlet/Compose `Image=` at your tag:
51
+
52
+ ```bash
53
+ podman build -f deploy/Containerfile -t ymir:0.1.0 . # or: docker build …
54
+ ```
55
+
56
+ Durable state still needs volumes (`state/`, `workspace/`, `.agents/memory/`,
57
+ `agents/`, `apps/*/dist`) — the image bakes only code. Validated: the Quadlet unit
58
+ passes Podman's own generator (`/usr/libexec/podman/quadlet -dryrun -user`).
59
+
60
+ ## Isolation on a **shared** server
61
+
62
+ When Ymir shares a machine with other services, the **container is the boundary**:
63
+ rootless Podman gives Ymir its own mount namespace, user namespace, cgroup limits,
64
+ SELinux labels, and no host root. That is what stops Ymir from disturbing the rest
65
+ of the box — not bwrap.
66
+
67
+ The confinement layers, from the outside in:
68
+
69
+ ```
70
+ isolation[3]{layer,boundary,when}:
71
+ "Host ↔ Ymir","the container (Quadlet/Compose): rootless, cap-drop ALL, no-new-privileges, :Z labels","always, on a shared host"
72
+ "Ymir ↔ agent command","bwrap — scopes a single model-generated command to one worktree","only when the probe passes; never required"
73
+ "Ymir ↔ untrusted code","Utgard (a nested container) or the container itself","for code the agent writes and runs"
74
+ ```
75
+
76
+ ### bwrap inside the Quadlet
77
+
78
+ bwrap needs to create a **nested user namespace**. Rootless Podman containers are
79
+ already inside a user namespace, and many hardened configs disallow nesting — then
80
+ bwrap fails with `Creating new namespace failed: Operation not permitted`.
81
+
82
+ So: **do not force it.** The core probes with `bin/ymir-isolation.sh probe` and falls
83
+ back to the container boundary when nested namespaces are unavailable. If you want
84
+ bwrap *inside* the Quadlet, the container must opt in (and that loosens it — weigh
85
+ it against the boundary you gain):
86
+
87
+ ```ini
88
+ # deploy/quadlet/ymir.container — enable ONLY if you want bwrap inside
89
+ UserNS=keep-id
90
+ AddCapability=SYS_ADMIN
91
+ # and, where the host's seccomp profile blocks clone3/unshare:
92
+ # SecurityOpt=seccomp=unconfined
93
+ ```
94
+
95
+ The recommended posture on a shared server is **no bwrap inside**: trust the
96
+ rootless container as the wall, and run untrusted code in Utgard. Enable the block
97
+ above only when you have a specific need to confine individual commands and accept
98
+ the looser container.
99
+
100
+ ## Portability (Rule 05)
101
+
102
+ A layer is gated on its host and reports a clean skip elsewhere — the Quadlet layer
103
+ is a no-op on macOS, and Compose is a no-op on a bare box. When the core changes,
104
+ every layer here is updated in the same change.
@@ -0,0 +1,45 @@
1
+ # Ymir via Compose — works with `docker compose` and `podman-compose`.
2
+ #
3
+ # cp deploy/env.example .env # then edit; never commit
4
+ # docker compose -f deploy/compose/compose.yaml up -d
5
+ # podman-compose -f deploy/compose/compose.yaml up -d
6
+ #
7
+ # YMIR_ROOT is the host path to the checkout (default: this repo). The core
8
+ # resolves the container engine itself; this file never names one beyond the
9
+ # compose driver you invoke.
10
+
11
+ services:
12
+ ymir:
13
+ image: docker.io/oven/bun:1
14
+ container_name: ymir
15
+ working_dir: /opt/ymir
16
+ command: ["bash", "-lc", "cd /opt/ymir && bash scripts/start.sh"]
17
+ volumes:
18
+ # `:Z` relabels for SELinux hosts; harmless elsewhere.
19
+ - ${YMIR_ROOT:-../..}:/opt/ymir:Z
20
+ ports:
21
+ # Loopback-only (127.0.0.1) so Ymir is never exposed externally; 5-digit to
22
+ # avoid collisions on a shared host. Keep in step with HLIDSKJALF_PORT /
23
+ # HLIDSKJALF_API_PORT / SMIDJA_VIZ_API_PORT.
24
+ - "127.0.0.1:38888:38888" # SPA
25
+ - "127.0.0.1:38889:38889" # gate API
26
+ - "127.0.0.1:54370:54370" # Smíðja visualizer
27
+ env_file:
28
+ - ${YMIR_ENV:-../../.env.local}
29
+ environment:
30
+ # Override durable state if you keep it outside the checkout.
31
+ YMIR_ROOT: /opt/ymir
32
+ security_opt:
33
+ - no-new-privileges:true
34
+ cap_drop:
35
+ - ALL
36
+ tmpfs:
37
+ - /tmp
38
+ # Podman rootless: keep the host user so the bind mount stays yours.
39
+ # Docker users: comment this out (Docker only accepts `host`/`private`).
40
+ userns_mode: keep-id
41
+ restart: unless-stopped
42
+
43
+ # --- bwrap inside the container (OPTIONAL; loosens the boundary) ----------
44
+ # cap_add: [SYS_ADMIN]
45
+ # security_opt: ["no-new-privileges:true", "seccomp=unconfined"]
@@ -0,0 +1,30 @@
1
+ # Ymir deployment environment — copy and edit, keep 0600, never commit.
2
+ # Referenced by deploy/quadlet/ymir.container (EnvironmentFile) and
3
+ # deploy/compose/compose.yaml (env_file).
4
+
5
+ # The operator's own credentials: user:password. Everyone else enters by invite.
6
+ # NEVER inline this in a committed file — this example is a reference only.
7
+ HLIDSKJALF_AUTH=
8
+
9
+ # The memory well's HTTP bridge (in-container default).
10
+ MIMIRSBRUNN_URL=http://127.0.0.1:4602
11
+
12
+ # GitHub sign-in (optional; the password door always works without it).
13
+ GITHUB_CLIENT_ID=
14
+ GITHUB_CLIENT_SECRET=
15
+
16
+ # --- container engine (only if you must force one) --------------------------
17
+ # The core auto-detects docker|podman; set this only to override.
18
+ # YMIR_CONTAINER_ENGINE=podman
19
+
20
+ # --- ports -------------------------------------------------------------------
21
+ # 5-digit by default so a shared host is unlikely to collide. The SPA, the gate
22
+ # API, and the visualizer each take one; keep the Quadlet/Compose PublishPort in
23
+ # step with these.
24
+ HLIDSKJALF_PORT=38888 # SPA
25
+ HLIDSKJALF_API_PORT=38889 # gate API
26
+ SMIDJA_VIZ_API_PORT=54370 # Smíðja visualizer
27
+ # Inside a container the SPA must bind all interfaces so the published (loopback)
28
+ # port can reach it; bare local dev keeps the 127.0.0.1 default.
29
+ HLIDSKJALF_HOST=0.0.0.0
30
+ # SMIDJA_VIZ_URL=http://127.0.0.1:54370
@@ -0,0 +1,57 @@
1
+ # Ymir as a rootless Podman Quadlet (systemd --user).
2
+ #
3
+ # Install (per-user, rootless):
4
+ # mkdir -p ~/.config/containers/systemd ~/.config/ymir
5
+ # cp deploy/quadlet/ymir.container ~/.config/containers/systemd/
6
+ # cp deploy/env.example ~/.config/ymir/ymir.env # then edit (0600)
7
+ # systemctl --user daemon-reload && systemctl --user start ymir.service
8
+ #
9
+ # The container is the isolation boundary against other services on the host.
10
+ # bwrap inside the container is OFF by default (see deploy/README.md).
11
+
12
+ [Unit]
13
+ Description=Ymir substrate — Hlidskjalf, gate API, memory well
14
+ Wants=network-online.target
15
+ After=network-online.target
16
+
17
+ [Container]
18
+ Image=docker.io/oven/bun:1
19
+ ContainerName=ymir
20
+
21
+ # The checkout, bind-mounted; state lives with it, so updates are `git pull`.
22
+ # `:Z` relabels for SELinux (harmless where SELinux is off).
23
+ Volume=%h/dev/Way-Of/ymir:/opt/ymir:Z
24
+
25
+ WorkingDir=/opt/ymir
26
+ EnvironmentFile=%h/.config/ymir/ymir.env
27
+
28
+ # Host ports, bound to LOOPBACK only (127.0.0.1) so Ymir is never exposed on the
29
+ # host's external interfaces — a shared server stays shared, not public. 5-digit
30
+ # so a shared host is unlikely to collide; keep in step with HLIDSKJALF_PORT /
31
+ # HLIDSKJALF_API_PORT / SMIDJA_VIZ_API_PORT. The well/Bifrost stay internal.
32
+ PublishPort=127.0.0.1:38889:38889
33
+ PublishPort=127.0.0.1:38888:38888
34
+ PublishPort=127.0.0.1:54370:54370
35
+
36
+ # Hardening: rootless, no new privileges, drop every capability. Ymir needs none.
37
+ NoNewPrivileges=true
38
+ DropCapability=ALL
39
+ Tmpfs=/tmp
40
+
41
+ # Map the host user so the bind-mounted checkout stays owned by you.
42
+ UserNS=keep-id
43
+
44
+ # --- bwrap inside the container (OPTIONAL; loosens the boundary) --------------
45
+ # Enable only if you want per-command bwrap confinement. Uncommenting grants the
46
+ # container the ability to create nested namespaces.
47
+ # AddCapability=SYS_ADMIN
48
+ # SecurityOpt=seccomp=unconfined
49
+
50
+ Exec=bash -lc 'cd /opt/ymir && bash scripts/start.sh'
51
+
52
+ [Service]
53
+ Restart=on-failure
54
+ TimeoutStartSec=0
55
+
56
+ [Install]
57
+ WantedBy=default.target
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerwiz/ymir",
3
- "version": "0.1.16",
3
+ "version": "0.1.18",
4
4
  "description": "Ymir \u2014 the single-tenant agent operating system. Omarchy-first, host-aware, self-healing.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/zerwiz/ymir",
@@ -43,7 +43,15 @@
43
43
  "!.agents/memory/well/*.jsonl",
44
44
  "!.agents/memory/*.db",
45
45
  "!**/__pycache__/",
46
- "!**/*.pyc"
46
+ "!**/*.pyc",
47
+ ".pi/",
48
+ ".opencode/",
49
+ ".claude/",
50
+ ".codex/",
51
+ ".cursor/",
52
+ "assets/",
53
+ "data/",
54
+ "deploy/"
47
55
  ],
48
56
  "engines": {
49
57
  "node": ">=20"
@@ -59,12 +67,6 @@
59
67
  "test": "bash .agents/skills/galdr-ymirsystem/scripts/compliance-check.sh",
60
68
  "compliance": "bash .agents/skills/galdr-ymirsystem/scripts/compliance-check.sh"
61
69
  },
62
- "optionalDependencies": {
63
- "@zerwiz/hlidskjalf": "0.1.1",
64
- "@zerwiz/odrerir": "0.1.1",
65
- "@zerwiz/sessrumnir": "0.1.9",
66
- "@zerwiz/smidja-factory": "^0.1.0"
67
- },
68
70
  "dependencies": {
69
71
  "@zerwiz/hlidskjalf": "^0.1.1",
70
72
  "@zerwiz/odrerir": "^0.1.1",