@zerwiz/ymir 0.1.3 → 0.1.5
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/README.md +291 -0
- package/.agents/agents/bragi-marketer.md +111 -0
- package/.agents/agents/brokk.md +352 -0
- package/.agents/agents/forseti-reviewer.md +93 -0
- package/.agents/agents/frigg-consent.md +77 -0
- package/.agents/agents/groa-update.md +77 -0
- package/.agents/agents/hnoss-designer.md +69 -0
- package/.agents/agents/huginn-researcher.md +99 -0
- package/.agents/agents/jord-projects.md +78 -0
- package/.agents/agents/kvasir-scout.md +91 -0
- package/.agents/agents/mimir-planner.md +92 -0
- package/.agents/agents/muninn-stow.md +77 -0
- package/.agents/agents/saga-bearings.md +78 -0
- package/.agents/agents/sindri-developer.md +114 -0
- package/.agents/agents/snotra-documenter.md +105 -0
- package/.agents/agents/syn-recovery.md +78 -0
- package/.agents/agents/tyr-check.md +78 -0
- package/.agents/agents/urdh-hold.md +77 -0
- package/.agents/agents/volundr-smith.md +80 -0
- package/.agents/agents/vor-diagnostics.md +77 -0
- package/.agents/assets/agents/naming.md +50 -0
- package/.agents/assets/agents/registry.md +93 -0
- package/.agents/assets/agents/runtime.md +36 -0
- package/.agents/assets/agents/toon-tasks-cli.md +42 -0
- package/.agents/assets/templates/company_entity.template.md +37 -0
- package/.agents/backend/backends/cmux.sh +649 -0
- package/.agents/backend/backends/herdr-eventwait.py +157 -0
- package/.agents/backend/backends/herdr-workspace-move.py +114 -0
- package/.agents/backend/backends/herdr.sh +3386 -0
- package/.agents/backend/backends/orca.sh +290 -0
- package/.agents/backend/backends/tmux.sh +357 -0
- package/.agents/backend/backends/zellij.sh +700 -0
- package/.agents/backend/fm-afk-launch.sh +654 -0
- package/.agents/backend/fm-afk-return.sh +241 -0
- package/.agents/backend/fm-afk-start.sh +172 -0
- package/.agents/backend/fm-arm-command-policy.mjs +960 -0
- package/.agents/backend/fm-arm-pretool-check.sh +200 -0
- package/.agents/backend/fm-backend-hometag-lib.sh +52 -0
- package/.agents/backend/fm-backend.sh +981 -0
- package/.agents/backend/fm-backlog-handoff.sh +909 -0
- package/.agents/backend/fm-backlog-receive.sh +187 -0
- package/.agents/backend/fm-backlog-transition-lib.sh +779 -0
- package/.agents/backend/fm-bearings-board.sh +204 -0
- package/.agents/backend/fm-bearings-snapshot.sh +546 -0
- package/.agents/backend/fm-bootstrap.sh +1568 -0
- package/.agents/backend/fm-branch-outcome.sh +203 -0
- package/.agents/backend/fm-branch-prompt.sh +101 -0
- package/.agents/backend/fm-brief.sh +452 -0
- package/.agents/backend/fm-busy-event.sh +234 -0
- package/.agents/backend/fm-busy-lib.sh +986 -0
- package/.agents/backend/fm-captain-hold.sh +1001 -0
- package/.agents/backend/fm-cd-command-policy.mjs +153 -0
- package/.agents/backend/fm-cd-pretool-check.sh +190 -0
- package/.agents/backend/fm-check-lib.sh +74 -0
- package/.agents/backend/fm-check-register.sh +42 -0
- package/.agents/backend/fm-check-unregister.sh +52 -0
- package/.agents/backend/fm-classify-lib.sh +1770 -0
- package/.agents/backend/fm-claude-stop-autoarm.sh +334 -0
- package/.agents/backend/fm-composer-lib.sh +1416 -0
- package/.agents/backend/fm-config-inherit-lib.sh +1202 -0
- package/.agents/backend/fm-config-push.sh +254 -0
- package/.agents/backend/fm-control-lib.sh +251 -0
- package/.agents/backend/fm-control.sh +878 -0
- package/.agents/backend/fm-crew-state.sh +625 -0
- package/.agents/backend/fm-cursor-lib.sh +243 -0
- package/.agents/backend/fm-decision-hold.sh +232 -0
- package/.agents/backend/fm-doc-audience-check.sh +269 -0
- package/.agents/backend/fm-dod-lib.sh +67 -0
- package/.agents/backend/fm-ensure-agents-md.sh +253 -0
- package/.agents/backend/fm-extension-launch-barrier.mjs +129 -0
- package/.agents/backend/fm-extension.mjs +2577 -0
- package/.agents/backend/fm-extension.sh +16 -0
- package/.agents/backend/fm-ff-lib.sh +420 -0
- package/.agents/backend/fm-fleet-snapshot.sh +1463 -0
- package/.agents/backend/fm-fleet-sync.sh +458 -0
- package/.agents/backend/fm-fleet-view.sh +96 -0
- package/.agents/backend/fm-gate-refuse-lib.sh +102 -0
- package/.agents/backend/fm-guard.sh +242 -0
- package/.agents/backend/fm-harness.sh +195 -0
- package/.agents/backend/fm-herdr-ci-cleanup.sh +115 -0
- package/.agents/backend/fm-herdr-lab.sh +346 -0
- package/.agents/backend/fm-herdr-session-cleanup.sh +337 -0
- package/.agents/backend/fm-home-seed.sh +984 -0
- package/.agents/backend/fm-home-summary-refresh.sh +255 -0
- package/.agents/backend/fm-hook-host-lib.sh +36 -0
- package/.agents/backend/fm-inactive-reconcile.sh +531 -0
- package/.agents/backend/fm-inbox.sh +399 -0
- package/.agents/backend/fm-install-actionlint.sh +84 -0
- package/.agents/backend/fm-install-herdr.sh +96 -0
- package/.agents/backend/fm-install-shellcheck.sh +84 -0
- package/.agents/backend/fm-install-treehouse.sh +95 -0
- package/.agents/backend/fm-kimi-turnend-hook.sh +276 -0
- package/.agents/backend/fm-lease-lib.sh +218 -0
- package/.agents/backend/fm-lease.sh +189 -0
- package/.agents/backend/fm-line-cap-lib.sh +51 -0
- package/.agents/backend/fm-lint-workflows.sh +137 -0
- package/.agents/backend/fm-lint.sh +591 -0
- package/.agents/backend/fm-lock-lib.sh +104 -0
- package/.agents/backend/fm-lock.sh +107 -0
- package/.agents/backend/fm-marker-lib.sh +12 -0
- package/.agents/backend/fm-merge-local.sh +74 -0
- package/.agents/backend/fm-merge-outcome-lib.sh +138 -0
- package/.agents/backend/fm-nm-run-lib.sh +124 -0
- package/.agents/backend/fm-on.sh +125 -0
- package/.agents/backend/fm-operational-input.sh +253 -0
- package/.agents/backend/fm-peek.sh +46 -0
- package/.agents/backend/fm-pending-reply-lib.sh +1409 -0
- package/.agents/backend/fm-pr-check.sh +135 -0
- package/.agents/backend/fm-pr-lib.sh +1016 -0
- package/.agents/backend/fm-pr-merge.sh +707 -0
- package/.agents/backend/fm-pr-poll.sh +110 -0
- package/.agents/backend/fm-primary-scope-lib.sh +33 -0
- package/.agents/backend/fm-procevent-extension-capture.pl +259 -0
- package/.agents/backend/fm-procevent-lavish.sh +628 -0
- package/.agents/backend/fm-procevent-lib.sh +892 -0
- package/.agents/backend/fm-procevent-quota.sh +290 -0
- package/.agents/backend/fm-procevent-remote-reply.sh +577 -0
- package/.agents/backend/fm-procevent-when.sh +504 -0
- package/.agents/backend/fm-procevent.sh +1466 -0
- package/.agents/backend/fm-project-mode.sh +92 -0
- package/.agents/backend/fm-project-origin-lib.sh +180 -0
- package/.agents/backend/fm-promote.sh +282 -0
- package/.agents/backend/fm-public-followup-emit.sh +260 -0
- package/.agents/backend/fm-public-followup-lib.sh +398 -0
- package/.agents/backend/fm-public-followup.sh +1330 -0
- package/.agents/backend/fm-push-transition-lib.sh +168 -0
- package/.agents/backend/fm-quota-axi-lib.sh +93 -0
- package/.agents/backend/fm-quota-choose.sh +384 -0
- package/.agents/backend/fm-remote-delta-read.sh +189 -0
- package/.agents/backend/fm-remote-doctor.sh +800 -0
- package/.agents/backend/fm-remote-entrypoint.sh +193 -0
- package/.agents/backend/fm-remote-file.sh +234 -0
- package/.agents/backend/fm-remote-home-provision.sh +259 -0
- package/.agents/backend/fm-remote-home-seed.sh +259 -0
- package/.agents/backend/fm-remote-inherit-push.sh +90 -0
- package/.agents/backend/fm-remote-inherit.sh +179 -0
- package/.agents/backend/fm-remote-job-lib.sh +1241 -0
- package/.agents/backend/fm-remote-job-reap-orphans.sh +137 -0
- package/.agents/backend/fm-remote-job-worker.sh +1124 -0
- package/.agents/backend/fm-remote-readiness-lib.sh +44 -0
- package/.agents/backend/fm-remote-secondmate-control.sh +340 -0
- package/.agents/backend/fm-review-diff.sh +158 -0
- package/.agents/backend/fm-secondmate-charter-lib.sh +44 -0
- package/.agents/backend/fm-secondmate-nudge-lib.sh +68 -0
- package/.agents/backend/fm-secondmate-parent-lib.sh +70 -0
- package/.agents/backend/fm-secondmate-reconcile.sh +371 -0
- package/.agents/backend/fm-secondmate-registry-lib.sh +311 -0
- package/.agents/backend/fm-secondmate-report.sh +88 -0
- package/.agents/backend/fm-send.sh +1059 -0
- package/.agents/backend/fm-session-lock-lib.sh +176 -0
- package/.agents/backend/fm-session-start.sh +970 -0
- package/.agents/backend/fm-sessionstart-cursor.sh +40 -0
- package/.agents/backend/fm-sessionstart-nudge.sh +45 -0
- package/.agents/backend/fm-sessionstart-run.sh +145 -0
- package/.agents/backend/fm-spawn.sh +3153 -0
- package/.agents/backend/fm-startup-memory-budget-lib.sh +224 -0
- package/.agents/backend/fm-startup-memory-budget.sh +94 -0
- package/.agents/backend/fm-startup-network.sh +642 -0
- package/.agents/backend/fm-stow-cascade.sh +251 -0
- package/.agents/backend/fm-subagent-pretool-check.sh +207 -0
- package/.agents/backend/fm-supervise-daemon.sh +1732 -0
- package/.agents/backend/fm-supervision-instructions.sh +215 -0
- package/.agents/backend/fm-supervision-lib.sh +90 -0
- package/.agents/backend/fm-supervisor-target-lib.sh +78 -0
- package/.agents/backend/fm-tangle-lib.sh +53 -0
- package/.agents/backend/fm-task-inbox-lib.sh +402 -0
- package/.agents/backend/fm-tasks-axi-lib.sh +123 -0
- package/.agents/backend/fm-teardown.sh +2922 -0
- package/.agents/backend/fm-test-isolation-proof.sh +588 -0
- package/.agents/backend/fm-test-run.sh +2191 -0
- package/.agents/backend/fm-timeout-lib.sh +141 -0
- package/.agents/backend/fm-timing-lib.sh +179 -0
- package/.agents/backend/fm-tmux-lib.sh +291 -0
- package/.agents/backend/fm-tool-update-check.sh +898 -0
- package/.agents/backend/fm-trace-context-lib.sh +227 -0
- package/.agents/backend/fm-transition-lib.sh +103 -0
- package/.agents/backend/fm-turnend-guard-cursor.sh +391 -0
- package/.agents/backend/fm-turnend-guard-grok.sh +90 -0
- package/.agents/backend/fm-turnend-guard.sh +432 -0
- package/.agents/backend/fm-update.sh +110 -0
- package/.agents/backend/fm-vendor-auth-probe.sh +190 -0
- package/.agents/backend/fm-voice-client.py +1373 -0
- package/.agents/backend/fm-voice-relay.py +1256 -0
- package/.agents/backend/fm-wake-drain.sh +592 -0
- package/.agents/backend/fm-wake-grant.sh +127 -0
- package/.agents/backend/fm-wake-lib.sh +1849 -0
- package/.agents/backend/fm-watch-arm.sh +602 -0
- package/.agents/backend/fm-watch-checkpoint.sh +109 -0
- package/.agents/backend/fm-watch.sh +1962 -0
- package/.agents/backend/fm-x-dismiss.sh +116 -0
- package/.agents/backend/fm-x-followup.sh +286 -0
- package/.agents/backend/fm-x-lib.sh +1000 -0
- package/.agents/backend/fm-x-link.sh +234 -0
- package/.agents/backend/fm-x-poll.sh +185 -0
- package/.agents/backend/fm-x-reply.sh +385 -0
- package/.agents/backend/fm_voice_frame.py +166 -0
- package/.agents/backend/fm_voice_records.py +574 -0
- package/.agents/backend/model-bridge.py +290 -0
- package/.agents/backend/opencode-go-bridge.py +30 -0
- package/.agents/bus/README.md +12 -0
- package/.agents/bus/messages.json +1 -0
- package/.agents/config/agents.machine.example.yaml +16 -0
- package/.agents/config/agents.yaml +50 -0
- package/.agents/config/agents.yaml.example +72 -0
- package/.agents/config/crew-dispatch.json +22 -0
- package/.agents/config/cron.yaml +9 -0
- package/.agents/config/eindri-dispatch.json +67 -0
- package/.agents/config/eindri-harness +1 -0
- package/.agents/config/startup-memory-budget +1 -0
- package/.agents/config/tailscale-sync.yaml +27 -0
- package/.agents/filebrowser/.filebrowser.json +6 -0
- package/.agents/filebrowser/README.md +11 -0
- package/.agents/gateway/README.md +12 -0
- package/.agents/github/README.md +15 -0
- package/.agents/github/webhooks/.gitkeep +0 -0
- package/.agents/github/workflows/.gitkeep +0 -0
- package/.agents/harness/opencode/plugins/lib/rodd-operational-input.js +37 -0
- package/.agents/harness/opencode/plugins/package.json +4 -0
- package/.agents/harness/opencode/plugins/saga-sessionstart.js +77 -0
- package/.agents/harness/opencode/plugins/syn-cd-check.js +61 -0
- package/.agents/harness/opencode/plugins/syn-pretool-check.js +68 -0
- package/.agents/harness/opencode/plugins/syn-turnend-guard.js +105 -0
- package/.agents/harness/opencode/plugins/syn-watch-arm.js +521 -0
- package/.agents/memory/README.md +46 -0
- package/.agents/memory/kaia.engram +0 -0
- package/.agents/memory/kaia.engram-shm +0 -0
- package/.agents/memory/kaia.engram-wal +0 -0
- package/.agents/memory/runes_audit.md +5 -0
- package/.agents/memory/well/episodes.jsonl +367 -0
- package/.agents/memory/well/workspace.jsonl +27 -0
- package/.agents/migrations/0001-hodd-layout.sh +38 -0
- package/.agents/migrations/0002-a2a-mcp.sh +27 -0
- package/.agents/migrations/0003-private-data-separation.sh +111 -0
- package/.agents/migrations/0004-hoard-and-realms.sh +104 -0
- package/.agents/sandbox/Dockerfile.utgard +19 -0
- package/.agents/sandbox/README.md +14 -0
- package/.agents/sandbox/utgard.config.json +14 -0
- package/.agents/skills/README.md +59 -0
- package/.agents/skills/bragi-marketing/README.md +3 -0
- package/.agents/skills/bragi-marketing/SKILL.md +82 -0
- package/.agents/skills/eindri-homes/README.md +3 -0
- package/.agents/skills/eindri-homes/SKILL.md +291 -0
- package/.agents/skills/eindri-homes/assets/control-plane.md +122 -0
- package/.agents/skills/eindri-homes/assets/dispatch.md +80 -0
- package/.agents/skills/frigg-consent/README.md +3 -0
- package/.agents/skills/frigg-consent/SKILL.md +56 -0
- package/.agents/skills/galdr-ymirsystem/README.md +3 -0
- package/.agents/skills/galdr-ymirsystem/SKILL.md +158 -0
- package/.agents/skills/galdr-ymirsystem/assets/README.md +74 -0
- package/.agents/skills/galdr-ymirsystem/assets/brokk-distro-runtime.md +390 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-method.md +113 -0
- package/.agents/skills/galdr-ymirsystem/assets/build-tool-categories.md +178 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-orchestration.md +518 -0
- package/.agents/skills/galdr-ymirsystem/assets/eindri-profiles.md +136 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/README.md +673 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/claude-code.md +197 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/codex.md +191 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/cursor.md +193 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/opencode.md +262 -0
- package/.agents/skills/galdr-ymirsystem/assets/harness-integration/pi.md +295 -0
- package/.agents/skills/galdr-ymirsystem/assets/hlidskjalf-ui.md +496 -0
- package/.agents/skills/galdr-ymirsystem/assets/installation.md +571 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models/HOST-DATA.example.md +72 -0
- package/.agents/skills/galdr-ymirsystem/assets/local-models.md +274 -0
- package/.agents/skills/galdr-ymirsystem/assets/memory-well.md +161 -0
- package/.agents/skills/galdr-ymirsystem/assets/nornir-jobs.md +377 -0
- package/.agents/skills/galdr-ymirsystem/assets/norse-naming.md +325 -0
- package/.agents/skills/galdr-ymirsystem/assets/odrerir-hall.md +129 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/einherjar-spawn.schema.json +81 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/herdr-profile.toml +75 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/pi-profile.yml +96 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot/supervision-tree.yml +163 -0
- package/.agents/skills/galdr-ymirsystem/assets/pi-boot-guide.md +58 -0
- package/.agents/skills/galdr-ymirsystem/assets/porting-upstream-to-norse.md +301 -0
- package/.agents/skills/galdr-ymirsystem/assets/principles.md +385 -0
- package/.agents/skills/galdr-ymirsystem/assets/reference-adoption.md +99 -0
- package/.agents/skills/galdr-ymirsystem/assets/registry.md +379 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-compliance.md +463 -0
- package/.agents/skills/galdr-ymirsystem/assets/runtime-components.md +553 -0
- package/.agents/skills/galdr-ymirsystem/assets/smidja.md +175 -0
- package/.agents/skills/galdr-ymirsystem/schemas/toon-schemas.md +190 -0
- package/.agents/skills/galdr-ymirsystem/scripts/README.md +45 -0
- package/.agents/skills/galdr-ymirsystem/scripts/bench-one.sh +248 -0
- package/.agents/skills/galdr-ymirsystem/scripts/compliance-check.sh +360 -0
- package/.agents/skills/galdr-ymirsystem/scripts/gpu-sample.sh +43 -0
- package/.agents/skills/galdr-ymirsystem/scripts/stop-all.sh +34 -0
- package/.agents/skills/galdr-ymirsystem/scripts/toon-check.py +188 -0
- package/.agents/skills/gjallarhorn-relay/README.md +3 -0
- package/.agents/skills/gjallarhorn-relay/SKILL.md +283 -0
- package/.agents/skills/groa-update/SKILL.md +70 -0
- package/.agents/skills/hamr-adapters/README.md +3 -0
- package/.agents/skills/hamr-adapters/SKILL.md +123 -0
- package/.agents/skills/hamr-adapters/references/common/control-and-recovery.md +37 -0
- package/.agents/skills/hamr-adapters/references/common/dispatch.md +32 -0
- package/.agents/skills/hamr-adapters/references/common/model-and-effort.md +42 -0
- package/.agents/skills/hamr-adapters/references/common/primary-hooks.md +40 -0
- package/.agents/skills/hamr-adapters/references/harness/claude.md +55 -0
- package/.agents/skills/hamr-adapters/references/harness/codex.md +43 -0
- package/.agents/skills/hamr-adapters/references/harness/cursor.md +75 -0
- package/.agents/skills/hamr-adapters/references/harness/grok.md +69 -0
- package/.agents/skills/hamr-adapters/references/harness/kimi.md +51 -0
- package/.agents/skills/hamr-adapters/references/harness/muse.md +70 -0
- package/.agents/skills/hamr-adapters/references/harness/opencode.md +42 -0
- package/.agents/skills/hamr-adapters/references/harness/pi.md +56 -0
- package/.agents/skills/herdr-panes/README.md +3 -0
- package/.agents/skills/herdr-panes/SKILL.md +92 -0
- package/.agents/skills/herdr-panes/assets/herdr-backend.md +346 -0
- package/.agents/skills/herdr-panes/assets/tmux-backend.md +115 -0
- package/.agents/skills/hnoss-design/DESIGN.md +19 -0
- package/.agents/skills/hnoss-design/README.md +3 -0
- package/.agents/skills/hnoss-design/SKILL.md +83 -0
- package/.agents/skills/hvild-afk/README.md +3 -0
- package/.agents/skills/hvild-afk/SKILL.md +241 -0
- package/.agents/skills/jord-projects/README.md +3 -0
- package/.agents/skills/jord-projects/SKILL.md +92 -0
- package/.agents/skills/lifecycle/SKILL.md +56 -0
- package/.agents/skills/lifecycle/smoke_test.sh +52 -0
- package/.agents/skills/lifecycle/start.sh +21 -0
- package/.agents/skills/lifecycle/status.sh +35 -0
- package/.agents/skills/lifecycle/stop.sh +16 -0
- package/.agents/skills/muninn-stow/README.md +3 -0
- package/.agents/skills/muninn-stow/SKILL.md +309 -0
- package/.agents/skills/no-mistakes/SKILL.md +379 -0
- package/.agents/skills/nornir-schedule/README.md +3 -0
- package/.agents/skills/nornir-schedule/SKILL.md +25 -0
- package/.agents/skills/nornir-schedule/assets/events.md +137 -0
- package/.agents/skills/nornir-schedule/assets/quota.md +131 -0
- package/.agents/skills/nsr-compliance/README.md +3 -0
- package/.agents/skills/nsr-compliance/SKILL.md +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/README.md +40 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/git-workflow.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/security.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/RULES/tech-stack.md +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/NSRcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/README.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/README.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/features/SKILL-template.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/SKILL.md +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/create_branch.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/safe_commit.sh +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/git_ops/sync_upstream.sh +6 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/README.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/SKILL.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/smoke_test.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/start.sh +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/status.sh +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/agents_skills/lifecycle/stop.sh +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/config/core_four.yaml +13 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/compliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/README.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/api.md +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/compliance-wiring.md +155 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/BEST_PRACTICES/frontend.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/README.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/clients/template-README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/deploy.sh +49 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/development.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/production.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/envs/staging.env.example +17 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/CI_CD/deployment/tenants/template.env.example +8 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/README.md +26 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/agent.md +7 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/developers/dev-1.md +20 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/linux.md +9 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/macos.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/shared.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/DEVELOPER_SETUP/windows.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/README.md +25 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/_template.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/HOSTING/hosting-1.md +41 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/README.md +21 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/README.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/deployment.md +19 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/disaster-recovery.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/RUNBOOK/ops-tasks.md +14 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/features/README.md +16 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/project-skills.md +146 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/research/software-compliance-research.md +269 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/docs/working-with-agents.md +260 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/AGENTS.md +38 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/ARCHITECTURE.md +36 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/BEST_PRACTICES.md +27 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/CI_CD.md +23 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/FEATURES.md +15 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/README.md +22 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/RULES.md +37 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/STRUCTURE.md +45 -0
- package/.agents/skills/nsr-compliance/assets/nsr/assets/root/TECH_STACK.md +28 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scaffold-spec.md +63 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/scaffold.sh +103 -0
- package/.agents/skills/nsr-compliance/assets/nsr/scripts/validate.sh +52 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/SKILL.md +71 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/config/core_four.yaml +16 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_danger.sh +102 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/check_wiring.sh +69 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/validate_code.sh +29 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/gates/verify_docs.py +66 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/generate.sh +109 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/result_envelope.json +14 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/envelopes/task_envelope.json +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/harness/runner.py +303 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/telemetry/logger.py +112 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/README.md +18 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/config/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/README.md +12 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_env.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_paths.sh +20 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/gates/check_platform.sh +23 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/README.md +11 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/harness/envelopes/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/README.md +10 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/installer/install.sh +125 -0
- package/.agents/skills/nsr-compliance/assets/nsrcompliance/templates/compliance/telemetry/README.md +11 -0
- package/.agents/skills/pr-ops/README.md +3 -0
- package/.agents/skills/pr-ops/SKILL.md +109 -0
- package/.agents/skills/ratatoskr-a2a/README.md +3 -0
- package/.agents/skills/ratatoskr-a2a/SKILL.md +148 -0
- package/.agents/skills/rules-check-drift/SKILL.md +81 -0
- package/.agents/skills/saga-bearings/README.md +3 -0
- package/.agents/skills/saga-bearings/SKILL.md +26 -0
- package/.agents/skills/saga-bearings/assets/bearings.md +161 -0
- package/.agents/skills/saga-bearings/assets/board-template.html +731 -0
- package/.agents/skills/saga-bearings/assets/recap.md +56 -0
- package/.agents/skills/syn-recovery/README.md +3 -0
- package/.agents/skills/syn-recovery/SKILL.md +54 -0
- package/.agents/skills/tyr-check/README.md +3 -0
- package/.agents/skills/tyr-check/SKILL.md +218 -0
- package/.agents/skills/urdh-hold/README.md +3 -0
- package/.agents/skills/urdh-hold/SKILL.md +25 -0
- package/.agents/skills/urdh-hold/assets/decisions.md +15 -0
- package/.agents/skills/urdh-hold/assets/hold.md +54 -0
- package/.agents/skills/vor-diagnostics/README.md +3 -0
- package/.agents/skills/vor-diagnostics/SKILL.md +68 -0
- package/.agents/skills/ymir-host/README.md +3 -0
- package/.agents/skills/ymir-host/SKILL.md +34 -0
- package/.agents/skills/ymir-host/assets/desktop.md +36 -0
- package/.agents/skills/ymir-host/assets/omarchy.md +297 -0
- package/.agents/skills/ymir-host/assets/runbooks.md +15 -0
- package/.agents/skills/ymir-host/assets/thjazi.md +220 -0
- package/.agents/skills/ymir-host/assets/update.md +64 -0
- package/.agents/tests/assets/board-render-harness.mjs +117 -0
- package/.agents/tests/cmux-test-safety.sh +51 -0
- package/.agents/tests/fixtures.sh +291 -0
- package/.agents/tests/fm-afk-inject-e2e.test.sh +428 -0
- package/.agents/tests/fm-afk-inject-herdr-e2e.test.sh +536 -0
- package/.agents/tests/fm-afk-launch.test.sh +961 -0
- package/.agents/tests/fm-afk-pi-herdr-return-e2e.test.sh +297 -0
- package/.agents/tests/fm-afk-return.test.sh +283 -0
- package/.agents/tests/fm-arm-pretool-check.test.sh +482 -0
- package/.agents/tests/fm-ask-user-authority.test.sh +42 -0
- package/.agents/tests/fm-backend-autodetect-smoke.test.sh +176 -0
- package/.agents/tests/fm-backend-cmux-smoke.test.sh +188 -0
- package/.agents/tests/fm-backend-cmux.test.sh +1166 -0
- package/.agents/tests/fm-backend-herdr-eventwait-smoke.test.sh +136 -0
- package/.agents/tests/fm-backend-herdr-eventwait.test.py +106 -0
- package/.agents/tests/fm-backend-herdr-focus-flash-e2e.test.sh +409 -0
- package/.agents/tests/fm-backend-herdr-launcher-workspace-e2e.test.sh +437 -0
- package/.agents/tests/fm-backend-herdr-presentation-e2e.test.sh +1424 -0
- package/.agents/tests/fm-backend-herdr-prune-safety-e2e.test.sh +180 -0
- package/.agents/tests/fm-backend-herdr-respawn-idem-e2e.test.sh +182 -0
- package/.agents/tests/fm-backend-herdr-smoke.test.sh +355 -0
- package/.agents/tests/fm-backend-herdr-workspace-per-home-e2e.test.sh +251 -0
- package/.agents/tests/fm-backend-herdr.test.sh +4606 -0
- package/.agents/tests/fm-backend-orca.test.sh +1357 -0
- package/.agents/tests/fm-backend-tmux-smoke.test.sh +173 -0
- package/.agents/tests/fm-backend-zellij-smoke.test.sh +205 -0
- package/.agents/tests/fm-backend-zellij.test.sh +1360 -0
- package/.agents/tests/fm-backend.test.sh +1142 -0
- package/.agents/tests/fm-backlog-atomicity.test.sh +2302 -0
- package/.agents/tests/fm-backlog-handoff.test.sh +1360 -0
- package/.agents/tests/fm-bearings-board-render.test.sh +135 -0
- package/.agents/tests/fm-bearings-board.test.sh +414 -0
- package/.agents/tests/fm-bearings-snapshot.test.sh +1990 -0
- package/.agents/tests/fm-bootstrap-network-parallel.test.sh +316 -0
- package/.agents/tests/fm-bootstrap.test.sh +1178 -0
- package/.agents/tests/fm-branch-supervision.test.sh +552 -0
- package/.agents/tests/fm-brief.test.sh +785 -0
- package/.agents/tests/fm-busy-adapter-wiring.test.sh +324 -0
- package/.agents/tests/fm-busy-state.test.sh +465 -0
- package/.agents/tests/fm-calm-pi-extension.test.sh +3979 -0
- package/.agents/tests/fm-captain-hold-lifecycle.test.sh +1187 -0
- package/.agents/tests/fm-cd-pretool-check.test.sh +400 -0
- package/.agents/tests/fm-check-unregister.test.sh +198 -0
- package/.agents/tests/fm-classify-corr-token.test.sh +543 -0
- package/.agents/tests/fm-classify-decision-key.test.sh +340 -0
- package/.agents/tests/fm-claude-stop-autoarm-live-e2e.test.sh +164 -0
- package/.agents/tests/fm-claude-stop-autoarm.test.sh +1190 -0
- package/.agents/tests/fm-cmux-claude-composer-live-e2e.test.sh +110 -0
- package/.agents/tests/fm-codex-continuity-live-e2e.test.sh +55 -0
- package/.agents/tests/fm-composer-ghost.test.sh +716 -0
- package/.agents/tests/fm-composer-lib.test.sh +666 -0
- package/.agents/tests/fm-composer-matrix-live-e2e.test.sh +220 -0
- package/.agents/tests/fm-control-herdr-smoke.test.sh +149 -0
- package/.agents/tests/fm-control-relaunch.test.sh +1530 -0
- package/.agents/tests/fm-control.test.sh +910 -0
- package/.agents/tests/fm-crew-state.test.sh +1610 -0
- package/.agents/tests/fm-cursor-harness.test.sh +404 -0
- package/.agents/tests/fm-cursor-primary-live-e2e.test.sh +217 -0
- package/.agents/tests/fm-cursor-primary.test.sh +708 -0
- package/.agents/tests/fm-daemon.test.sh +2740 -0
- package/.agents/tests/fm-documentation-audiences.test.sh +141 -0
- package/.agents/tests/fm-ensure-agents-md.test.sh +371 -0
- package/.agents/tests/fm-extension-binding.test.sh +2187 -0
- package/.agents/tests/fm-fleet-snapshot-view.test.sh +816 -0
- package/.agents/tests/fm-fleet-sync.test.sh +721 -0
- package/.agents/tests/fm-gate-refuse.test.sh +356 -0
- package/.agents/tests/fm-gitignore-config.test.sh +89 -0
- package/.agents/tests/fm-gotmp.test.sh +230 -0
- package/.agents/tests/fm-grok-continuity-live-e2e.test.sh +112 -0
- package/.agents/tests/fm-grok-harness.test.sh +117 -0
- package/.agents/tests/fm-grok-stop-live-e2e.test.sh +219 -0
- package/.agents/tests/fm-guard-stale-banner.test.sh +709 -0
- package/.agents/tests/fm-harness-adapter-instructions-live-e2e.test.sh +134 -0
- package/.agents/tests/fm-harness-adapter-references.test.sh +30 -0
- package/.agents/tests/fm-harness-liveness-drift-live-e2e.test.sh +151 -0
- package/.agents/tests/fm-herdr-lab.test.sh +243 -0
- package/.agents/tests/fm-herdr-session-cleanup-e2e.test.sh +146 -0
- package/.agents/tests/fm-herdr-session-cleanup.test.sh +329 -0
- package/.agents/tests/fm-herdr-submit-confirm-live-e2e.test.sh +125 -0
- package/.agents/tests/fm-herdr-version-floor-live-e2e.test.sh +144 -0
- package/.agents/tests/fm-home-summary-refresh.test.sh +971 -0
- package/.agents/tests/fm-inactive-reconcile.test.sh +485 -0
- package/.agents/tests/fm-kimi-harness.test.sh +687 -0
- package/.agents/tests/fm-lint-workflows.test.sh +532 -0
- package/.agents/tests/fm-lint.test.sh +1023 -0
- package/.agents/tests/fm-muse-harness.test.sh +932 -0
- package/.agents/tests/fm-muse-signals-live-e2e.test.sh +205 -0
- package/.agents/tests/fm-no-mistakes-required.test.sh +72 -0
- package/.agents/tests/fm-on.test.sh +507 -0
- package/.agents/tests/fm-opencode-primary-live-e2e.test.sh +357 -0
- package/.agents/tests/fm-operational-input.test.sh +160 -0
- package/.agents/tests/fm-peek-remote.test.sh +110 -0
- package/.agents/tests/fm-pending-reply.test.sh +1288 -0
- package/.agents/tests/fm-pi-branch-extension.test.sh +3182 -0
- package/.agents/tests/fm-pi-branch-live-e2e.test.sh +527 -0
- package/.agents/tests/fm-pi-primary-live-e2e.test.sh +345 -0
- package/.agents/tests/fm-pi-primary-types.test.sh +68 -0
- package/.agents/tests/fm-pi-watch-extension.test.sh +2843 -0
- package/.agents/tests/fm-pr-check-security.test.sh +2140 -0
- package/.agents/tests/fm-pr-merge.test.sh +2135 -0
- package/.agents/tests/fm-procevent-quota.test.sh +225 -0
- package/.agents/tests/fm-procevent-when.test.sh +406 -0
- package/.agents/tests/fm-procevent.test.sh +1745 -0
- package/.agents/tests/fm-project-origin.test.sh +110 -0
- package/.agents/tests/fm-public-followup.test.sh +2272 -0
- package/.agents/tests/fm-quota-array-dispatch-live-e2e.test.sh +526 -0
- package/.agents/tests/fm-quota-choose.test.sh +626 -0
- package/.agents/tests/fm-remote-backlog-handoff.test.sh +453 -0
- package/.agents/tests/fm-remote-doctor.test.sh +625 -0
- package/.agents/tests/fm-remote-entrypoint.test.sh +59 -0
- package/.agents/tests/fm-remote-job-orphan-reap.test.sh +205 -0
- package/.agents/tests/fm-remote-job.test.sh +768 -0
- package/.agents/tests/fm-remote-reply.test.sh +520 -0
- package/.agents/tests/fm-remote-secondmate-lifecycle-e2e.test.sh +1256 -0
- package/.agents/tests/fm-remote-secondmate-parent-binding.test.sh +326 -0
- package/.agents/tests/fm-remote-secondmate-trace-context.test.sh +310 -0
- package/.agents/tests/fm-remote-transport-lanes.test.sh +431 -0
- package/.agents/tests/fm-review-diff.test.sh +176 -0
- package/.agents/tests/fm-secondmate-harness.test.sh +2600 -0
- package/.agents/tests/fm-secondmate-lifecycle-e2e.test.sh +259 -0
- package/.agents/tests/fm-secondmate-liveness.test.sh +559 -0
- package/.agents/tests/fm-secondmate-reconcile.test.sh +732 -0
- package/.agents/tests/fm-secondmate-safety.test.sh +2972 -0
- package/.agents/tests/fm-secondmate-sync.test.sh +913 -0
- package/.agents/tests/fm-send-inbox-doorbell-live-e2e.test.sh +206 -0
- package/.agents/tests/fm-send-inbox.test.sh +352 -0
- package/.agents/tests/fm-send-popup-settle.test.sh +167 -0
- package/.agents/tests/fm-send-remote-delivery.test.sh +796 -0
- package/.agents/tests/fm-send-resolve-key.test.sh +551 -0
- package/.agents/tests/fm-send-secondmate-marker-herdr-e2e.test.sh +187 -0
- package/.agents/tests/fm-send-secondmate-marker.test.sh +278 -0
- package/.agents/tests/fm-send-settle.test.sh +147 -0
- package/.agents/tests/fm-send-strict.test.sh +241 -0
- package/.agents/tests/fm-session-lock-ancestry.test.sh +365 -0
- package/.agents/tests/fm-session-start.test.sh +2515 -0
- package/.agents/tests/fm-sessionstart-hook-live-e2e.test.sh +631 -0
- package/.agents/tests/fm-sessionstart-instruction-refresh-live-e2e.test.sh +230 -0
- package/.agents/tests/fm-sessionstart-nudge.test.sh +1039 -0
- package/.agents/tests/fm-shared-captain-inheritance.test.sh +404 -0
- package/.agents/tests/fm-spawn-batch.test.sh +148 -0
- package/.agents/tests/fm-spawn-dispatch-profile.test.sh +827 -0
- package/.agents/tests/fm-spawn-pool-base-freshen.test.sh +440 -0
- package/.agents/tests/fm-spawn-worktree-settle.test.sh +147 -0
- package/.agents/tests/fm-startup-memory-budget.test.sh +333 -0
- package/.agents/tests/fm-startup-network.test.sh +712 -0
- package/.agents/tests/fm-stow-cascade.test.sh +370 -0
- package/.agents/tests/fm-subagent-pretool-check.test.sh +291 -0
- package/.agents/tests/fm-supervision-events.test.sh +156 -0
- package/.agents/tests/fm-supervision-instructions.test.sh +189 -0
- package/.agents/tests/fm-tangle-guard.test.sh +277 -0
- package/.agents/tests/fm-task-delivery.test.sh +420 -0
- package/.agents/tests/fm-task-inbox.test.sh +513 -0
- package/.agents/tests/fm-teardown-endpoint-safety.test.sh +374 -0
- package/.agents/tests/fm-teardown.test.sh +2665 -0
- package/.agents/tests/fm-test-fixture-cleanup.test.sh +172 -0
- package/.agents/tests/fm-test-fixtures.test.sh +132 -0
- package/.agents/tests/fm-test-isolation-proof.test.sh +278 -0
- package/.agents/tests/fm-test-run.test.sh +1196 -0
- package/.agents/tests/fm-tmux-agent-liveness.test.sh +354 -0
- package/.agents/tests/fm-tmux-submit-busy.test.sh +340 -0
- package/.agents/tests/fm-tool-update-check.test.sh +1044 -0
- package/.agents/tests/fm-trace-context-lib.test.sh +253 -0
- package/.agents/tests/fm-trace-context-spawn.test.sh +581 -0
- package/.agents/tests/fm-transition-lib.test.sh +54 -0
- package/.agents/tests/fm-turnend-guard.test.sh +1822 -0
- package/.agents/tests/fm-update.test.sh +304 -0
- package/.agents/tests/fm-vendor-auth-probe.test.sh +395 -0
- package/.agents/tests/fm-voice-relay.test.sh +4741 -0
- package/.agents/tests/fm-wake-daemon-lifecycle-e2e.test.sh +171 -0
- package/.agents/tests/fm-wake-drain-open-decisions-cursor.test.sh +356 -0
- package/.agents/tests/fm-wake-drain-open-decisions.test.sh +226 -0
- package/.agents/tests/fm-wake-drain-unread-status.test.sh +379 -0
- package/.agents/tests/fm-wake-queue.test.sh +1224 -0
- package/.agents/tests/fm-watch-arm.test.sh +821 -0
- package/.agents/tests/fm-watch-checkpoint.test.sh +87 -0
- package/.agents/tests/fm-watch-recovery-loop.test.sh +223 -0
- package/.agents/tests/fm-watch-triage.test.sh +3889 -0
- package/.agents/tests/fm-watcher-lock.test.sh +1133 -0
- package/.agents/tests/fm-x-mode.test.sh +3042 -0
- package/.agents/tests/gleipnir-guard-pretool-check.test.sh +51 -0
- package/.agents/tests/gleipnir-machine-lock.test.sh +130 -0
- package/.agents/tests/herdr-test-safety.sh +42 -0
- package/.agents/tests/lib.sh +315 -0
- package/.agents/tests/remote-herdr-fixture.sh +125 -0
- package/.agents/tests/secondmate-helpers.sh +193 -0
- package/.agents/tests/smoke.test.sh +93 -0
- package/.agents/tests/wake-helpers.sh +338 -0
- package/.agents/tests/zellij-test-safety.sh +60 -0
- package/.agents/tools/README.md +10 -0
- package/.agents/tools/bin/tasks-cli +267 -0
- package/.agents/tools/tasks-cli.ts +216 -0
- package/AGENTS.md +454 -0
- package/CHANGELOG.md +881 -0
- package/LICENSE +1 -1
- package/NOTICE +63 -0
- package/README.md +113 -39
- package/RULES/01-domains.md +51 -0
- package/RULES/02-agents.md +78 -0
- package/RULES/03-houses.md +61 -0
- package/RULES/04-hoard.md +65 -0
- package/RULES/05-platforms.md +67 -0
- package/RULES/06-append-only.md +58 -0
- package/RULES/07-config.md +45 -0
- package/RULES/08-delivery-gate.md +75 -0
- package/RULES/README.md +20 -0
- package/bin/README.md +107 -0
- package/bin/a2a-mcp.sh +98 -0
- package/bin/a2a-serve.py +103 -0
- package/bin/a2a-serve.sh +8 -0
- package/bin/a2a-talk.sh +50 -0
- package/bin/a2abridge-ensure.sh +108 -0
- package/bin/agent-run.sh +43 -0
- package/bin/agents-config.sh +233 -0
- package/bin/apodex-smoke-test.sh +92 -0
- package/bin/bifrost-bridge.sh +112 -0
- package/bin/bifrost-ingress.sh +77 -0
- package/bin/bootstrap-macos.sh +107 -0
- package/bin/bootstrap-windows.ps1 +112 -0
- package/bin/branch-guard.sh +64 -0
- package/bin/brokk +73 -0
- package/bin/brokk-classify-lib.sh +1770 -0
- package/bin/brokk-lease-lib.sh +222 -0
- package/bin/brokk-lease.sh +193 -0
- package/bin/brokk-lint.sh +65 -0
- package/bin/brokk-send.sh +38 -0
- package/bin/brokk-update.sh +9 -0
- package/bin/brokk-wake-grant.sh +127 -0
- package/bin/brokk-wake-lib.sh +1849 -0
- package/bin/changelog-guard.sh +165 -0
- package/bin/crash-sense.sh +160 -0
- package/bin/desktop-place.sh +224 -0
- package/bin/docs-guard.sh +39 -0
- package/bin/editor-place.sh +207 -0
- package/bin/eindri-acclaim.sh +34 -0
- package/bin/eindri-control.sh +28 -0
- package/bin/eindri-role.sh +83 -0
- package/bin/eindri-seen.sh +41 -0
- package/bin/eindri-send.sh +15 -0
- package/bin/eindri-start.sh +85 -0
- package/bin/eindri-watch.sh +57 -0
- package/bin/einherjar-spawn.sh +576 -0
- package/bin/eir-doctor.sh +112 -0
- package/bin/erindi-brief.sh +271 -0
- package/bin/fleet-apply.sh +68 -0
- package/bin/github-deploy.sh +81 -0
- package/bin/gjallarhorn-expose.sh +102 -0
- package/bin/gjallarhorn-notify.sh +58 -0
- package/bin/gjallarhorn-purge.sh +54 -0
- package/bin/gjallarhorn-tunnel.sh +72 -0
- package/bin/gleipnir-lock-lib.sh +284 -0
- package/bin/groa-update.sh +122 -0
- package/bin/hall-snapshot.sh +92 -0
- package/bin/hamr-harness.sh +246 -0
- package/bin/heimdall-ssh-keys.sh +374 -0
- package/bin/herdr-agents.py +44 -0
- package/bin/herdr-ensure.sh +104 -0
- package/bin/herdr-run.sh +431 -0
- package/bin/hermes-ensure.sh +88 -0
- package/bin/hoard-lib.sh +25 -0
- package/bin/hodd.sh +78 -0
- package/bin/host-sense.sh +199 -0
- package/bin/huginn-research-worker.sh +108 -0
- package/bin/local-model-lock.sh +51 -0
- package/bin/mimir-bridge.py +226 -0
- package/bin/mimir-bridge.sh +87 -0
- package/bin/mimir-ingest.sh +131 -0
- package/bin/mimir.sh +113 -0
- package/bin/mjollnir-webhook.sh +59 -0
- package/bin/mjollnir.sh +85 -0
- package/bin/model-hardware.sh +82 -0
- package/bin/model-resolve.sh +147 -0
- package/bin/models-detect.sh +178 -0
- package/bin/nornir-cron-start.sh +162 -0
- package/bin/nornir-job-daily-briefing.sh +191 -0
- package/bin/nornir-job-git-sync.sh +152 -0
- package/bin/nornir-job-memory-housekeeping.sh +114 -0
- package/bin/nornir-job-observer.sh +166 -0
- package/bin/nornir-job-skillopt-sleep.sh +76 -0
- package/bin/omarchy-hook-install.sh +60 -0
- package/bin/omarchy-install.sh +148 -0
- package/bin/omarchy-plugins.sh +174 -0
- package/bin/omarchy-sense.sh +149 -0
- package/bin/perm-guard.sh +30 -0
- package/bin/pi-agent.sh +68 -0
- package/bin/pi-ensure.sh +77 -0
- package/bin/pi-local.sh +37 -0
- package/bin/pi-seat.sh +63 -0
- package/bin/prereq-ensure.sh +166 -0
- package/bin/private-guard.sh +38 -0
- package/bin/project-git.sh +55 -0
- package/bin/public-guard.sh +70 -0
- package/bin/ratatoskr.sh +49 -0
- package/bin/realm-lib.sh +32 -0
- package/bin/repo-scrub.sh +62 -0
- package/bin/rodd-operational-input.sh +250 -0
- package/bin/runes-append.sh +198 -0
- package/bin/saga-session-start.sh +172 -0
- package/bin/saga-sessionstart-run.sh +79 -0
- package/bin/saga-wake-drain.sh +41 -0
- package/bin/secret-guard.sh +63 -0
- package/bin/sessrumnir-ensure.sh +100 -0
- package/bin/sessrumnir-sync.sh +237 -0
- package/bin/sessrumnir.sh +91 -0
- package/bin/skillopt-setup.sh +76 -0
- package/bin/skuld-branch-outcome.sh +203 -0
- package/bin/skuld-branch-prompt.sh +101 -0
- package/bin/smidja-bootstrap.sh +90 -0
- package/bin/smidja-observe.sh +86 -0
- package/bin/syn-arm-pretool-check.sh +57 -0
- package/bin/syn-asset-pretool-check.sh +76 -0
- package/bin/syn-cd-pretool-check.sh +28 -0
- package/bin/syn-guard-pretool-check.sh +83 -0
- package/bin/syn-turnend-guard.sh +36 -0
- package/bin/syn-watch-arm.sh +99 -0
- package/bin/tailscale-sync.sh +190 -0
- package/bin/telegram-bot.sh +69 -0
- package/bin/toolchain.sh +74 -0
- package/bin/utgard.sh +111 -0
- package/bin/valhalla.sh +115 -0
- package/bin/valknut-load.sh +260 -0
- package/bin/vor-crew-state.sh +124 -0
- package/bin/wedge-notify.sh +47 -0
- package/bin/workspace-provision.sh +80 -0
- package/bin/workspace-rag.sh +150 -0
- package/bin/wyrd-db.sh +47 -0
- package/bin/yggdrasil.sh +152 -0
- package/bin/ymir-edit.sh +145 -0
- package/bin/ymir-install.sh +641 -0
- package/bin/ymir-invite.sh +93 -0
- package/bin/ymir-isolation.sh +88 -0
- package/bin/ymir-migrate.sh +61 -0
- package/bin/ymir-platform.sh +348 -0
- package/bin/ymir-say.sh +97 -0
- package/bin/ymir-setup-auth.sh +108 -0
- package/bin/ymir-validate.sh +173 -0
- package/bin/ymir.js +74 -16
- package/docs/Architecture.md +339 -0
- package/docs/design.md +351 -0
- package/docs/installations/README.md +63 -0
- package/docs/installations/ymir-home.md +93 -0
- package/docs/integration.md +105 -0
- package/docs/lore.md +1056 -0
- package/docs/research/agent-harnesses.md +290 -0
- package/docs/runbooks/README.md +19 -0
- package/docs/runbooks/a2a.md +91 -0
- package/docs/runbooks/agent-permissions.md +99 -0
- package/docs/runbooks/agents.md +57 -0
- package/docs/runbooks/models.md +69 -0
- package/docs/runbooks/realm-onboarding.md +60 -0
- package/docs/runbooks/secrets-and-hoard.md +60 -0
- package/docs/runbooks/updates-and-migrations.md +110 -0
- package/docs/runbooks/worktrees-isolation.md +72 -0
- package/docs/session-start.md +105 -0
- package/docs/skillopt-integration.md +321 -0
- package/docs/sync-system.md +66 -0
- package/docs/workspaces.md +104 -0
- package/docs/ymir-rut.md +260 -0
- package/package.json +44 -14
- package/packaging/build.sh +74 -0
- package/packaging/macos/Ymir Installer.command +43 -0
- package/packaging/windows/ymir-setup.nsi +74 -0
- package/scripts/README.md +22 -0
- package/scripts/electron.sh +210 -0
- package/scripts/start.sh +167 -0
- package/scripts/stop.sh +113 -0
- package/install.sh +0 -35
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{"timestamp": "2026-09-11T17:45:31Z", "source": "midgard/design-system/icons.md", "tags": ["workspace", "way-of"], "content": "Rune-Glyph Icon Map\n**Runecoded, not emoji.** Every icon in Ymir is an Elder Futhark rune drawn as a\n24px stroke glyph, colored by `currentColor`. Emoji are never used as icons.", "hash": "76791e6b55cf375518199a58eeaeb301d8511b296a16d4bf3bd82b9bc3048511"}
|
|
2
|
+
{"timestamp": "2026-09-11T17:45:31Z", "source": "midgard/design-system/icons.md", "tags": ["workspace", "way-of"], "content": "Set\nThe glyphs live in `midgard/design-system/icons/*.svg` (24\u00d724 viewBox; render at\n16px or 24px). Stroke uses `currentColor`, square caps, miter joins \u2014 the chisel\nbevel. The primary seat may add a 1px inner bevel via the `--ymir-bevel` token.\n\n```\nicons[21]{glyph,name,unicode,figure,used_for}:\n \"fehu\",\"Fehu\",\"\u16a0\",\"Ymir (cattle/wealth)\",\"Fleet \u2014 the herd of agents\"\n \"tiwaz\",\"Tiwaz\",\"\u16cf\",\"T\u00fdr (justice)\",\"Tasks \u2014 the A2A lifecycle board\"\n \"ingwaz\",\"Ingwaz\",\"\u16dc\",\"Ing (the well)\",\"Well \u2014 Mimirsbrunn recall\"\n \"raidho\",\"Raidho\",\"\u16b1\",\"ride/journey\",\"Runes \u2014 the ledger (a road carved)\"\n \"algiz\",\"Algiz\",\"\u16c9\",\"protection\",\"Reviews / Glitnir \u2014 the protective gate; the Ymir emblem\"\n \"dagaz\",\"Dagaz\",\"\u16de\",\"day/dawn\",\"Processes \u2014 Valhalla supervision\"\n \"sowilo\",\"Sowilo\",\"\u16ca\",\"sun\",\"Files \u2014 Skrymir (light on the tree)\"\n \"kaunan\",\"Kaunan\",\"\u16b4\",\"torch\",\"OmniChat \u2014 Kaia's flame\"\n \"ansuz\",\"Ansuz\",\"\u16a8\",\"Odin's breath\",\"Forge \u2014 creation\"\n \"ehwaz\",\"Ehwaz\",\"\u16d6\",\"horse/journey\",\"Runtime \u2014 the seat and its transit\"\n \"jera\",\"Jera\",\"\u16c3\",\"year/harvest\",\"Cron \u2014 the Nornir's seasons\"\n \"berkana\",\"Berkanan\",\"\u16d2\",\"birch\",\"Profile \u2014 the self\"\n \"midgard\",\"Midgard\",\"\u2014\",\"the shared world\",\"shared workspace / cross-tenant assets\"\n \"utgard\",\"Utgard\",\"\u16a2\",\"the outer realm\",\"Utgard \u2014 the sandbox barrier\"\n \"yggdrasil\",\"Yggdrasil\",\"\u16c3\",\"the world-tree\",\"Yggdrasil \u2014 worktrees\"\n \"ratatoskr\",\"Ratatoskr\",\"\u16d2\",\"the squirrel\",\"Ratatoskr \u2014 the A2A bus\"\n \"mimirsbrunn\",\"Mimirsbrunn\",\"\u16dc\",\"the well of wisdom\",\"Mimirsbrunn \u2014 memory\"\n \"valhalla\",\"Valhalla\",\"\u16b9\",\"the hall of the slain\",\"Valhalla \u2014 process health\"\n \"gungnir\",\"Gungnir\",\"\u16b7\",\"Odin's spear\",\"Gungnir \u2014 skill synthesis\"\n \"heimdall\",\"Heimdall\",\"\u16ba\",\"the watchman\",\"Heimdall \u2014 auth / the gate\"\n \"gjallarhorn\",\"Gjallarhorn\",\"\u16b7\",\"the horn\",\"Gjallarhorn \u2014 the tunnel and its call\"\n```", "hash": "96b259ffc2df0be3c837f937bb244feb4b33c5fd963b6090bca51412a2c8d32f"}
|
|
3
|
+
{"timestamp": "2026-09-11T17:45:31Z", "source": "midgard/design-system/icons.md", "tags": ["workspace", "way-of"], "content": "Usage\n- Reference a glyph as an inline `<svg>` (copy the path) or `<img src>`; stroke\n with `currentColor`, never a raw hex.\n- Render at **24px** in panels, **16px** inline in tables and chips.\n- A status glyph is always paired with **glyph + colour + text** \u2014 never\n colour-only state.\n- The active realm/accent may tint glyphs via `--realm-tint`.", "hash": "c6eadb628c590de83cdcd1312e220c851bd80134e7931786f3477b416b1cf71d"}
|
|
4
|
+
{"timestamp": "2026-09-11T17:45:31Z", "source": "midgard/design-system/icons.md", "tags": ["workspace", "way-of"], "content": "Verification\n```bash\nls midgard/design-system/icons/*.svg | wc -l # 21", "hash": "d062ad476d08435118fd8775e2219c99aaeb9195f79ecf274703a8b327a65661"}
|
|
5
|
+
{"timestamp": "2026-09-11T17:45:31Z", "source": "midgard/design-system/icons.md", "tags": ["workspace", "way-of"], "content": "no emoji used as icons in the UI:\nrg -n \"[\\x{1F300}-\\x{1FAFF}\\x{2600}-\\x{27BF}]\" apps/hlidskjalf/src || echo \"no emoji icons\"\n```", "hash": "57de454e7ca077533dd4043b5a1b9af8ddaf7df6052c7fc31ad953039fc0902e"}
|
|
6
|
+
{"timestamp": "2026-09-11T17:45:31Z", "source": "midgard/design-system/icons.md", "tags": ["workspace", "way-of"], "content": "Maintaining this\n- **Owner:** Brokk. **Tokens:** `midgard/design-system/tokens.css`.\n- Add a rune here and its glyph in `icons/` in the same pass; keep the count in the\n `icons[N]` block true (Galdr TOON check: `.agents/skills/galdr/scripts/toon-check.py`).", "hash": "aa5b8b86b426462f68634bee9858ba79ae5d75600a2b0d340625279b210703e2"}
|
|
7
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "midgard/README.md", "tags": ["workspace", "way-of"], "content": "MIDGARD \u2014 Global Shared Workspace\nCross-tenant shared assets, repositories, and documentation.", "hash": "b045ed2401295b1d8407c2138241e980f5e320b35939a9b9d8e345f3a2ec6645"}
|
|
8
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "midgard/README.md", "tags": ["workspace", "way-of"], "content": "Contents\n- `design-system/` \u2014 shared UI components & design assets\n- `shared-packages/` \u2014 internal npm/cargo/python libraries\n- `infrastructure/` \u2014 shared Terraform / Docker / Kubernetes configs\n- `company_wiki/` \u2014 company policies, vision, specs\n- `github_org_repos/` \u2014 central company repositories\n - `shared-core-api/` \u2014 example shared repo (with `.yggdrasil/` worktrees)", "hash": "a37257a91953cc85880337f8dd52f44431390bfd312d6194180eedc8e15dc91d"}
|
|
9
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "svartalfaheim/way-of/workspace/memory/daily/2026-09-11.md", "tags": ["workspace", "way-of"], "content": "Daily Briefing \u2014 2026-09-11\nRealm: `way-of` \u00b7 Home: `/home/zerwiz/Ymir` \u00b7 Generated by S\u00e1ga (Nornir 07:00, deterministic)", "hash": "50c0f685ecff2925dfb783f2ea589aca97dde70b131a5c59f635cb117ad3e4f6"}
|
|
10
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "svartalfaheim/way-of/workspace/memory/daily/2026-09-11.md", "tags": ["workspace", "way-of"], "content": "1. Open Forge Orders\nCounts: total=102 added=101 working=0 blocked=1\n\n| Order | Status | Title |\n|---|---|---|\n| W0001 | ADDED | Yggdrasil worktree manager daemon |\n| W0002 | ADDED | Utgard rootless sandbox (execution barrier) |\n| W0003 | ADDED | Brokk spawn CLI + worktree lifecycle DX |\n| W0004 | ADDED | Mimirsbrunn: engram bridge adoption (memory) |\n| W0005 | ADDED | Runes: append-only audit ledger |\n| W0006 | ADDED | Pre-dispatch context injection (drink before act) |\n| W0007 | ADDED | Gungnir skill synthesis + validation |\n| W0008 | ADDED | Ratatoskr: A2A 1.0 backbone |\n| W0009 | ADDED | Redis task queue under the A2A model |\n| W0010 | ADDED | Inter-agent message schema + lifecycle machine |\n| W0011 | ADDED | Cron schedule spine |\n| W0012 | ADDED | Ymir \u2194 Command observer spine |\n| W0013 | ADDED | Realms & house activation |\n| W0014 | ADDED | Hlidskjalf portal (React/Vue, token-driven) |\n| W0015 | ADDED | Rune-glyph icon map |\n\n_(truncated \u2014 102 open orders total; see docs/masterplan.md \u00a73)_", "hash": "9207da51ba0cfbf3121c5cd850a93ec0ca9822451c382a19c5686e1ef666bbe3"}
|
|
11
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "svartalfaheim/way-of/workspace/memory/daily/2026-09-11.md", "tags": ["workspace", "way-of"], "content": "Active Queue\n- **W0026** \u2014 AXI CI/CD workflow port (ymir-sdk-ci, ymir-release-please, ymir-docs-check, ymir-guard-generated-files)\n- **W0028** \u2014 Eindri spawn/monitor/merge CI (Yggdrasil + Valhalla + Glitnir)\n- **W0027** \u2014 Norse-named skill family (tyr-check, brokk-craft)\n- **W0022** \u2014 Plan 21 execution: per-tenant `companies/` + `projects/` + `company_entity.template.md` *(approved; awaiting human \"go\")*\n- **W0001** \u2014 Yggdrasil worktree manager daemon (TS)\n- **W0002** \u2014 Utgard rootless sandbox recipes + enforcement\n- **W0004** \u2014 Mimirsbrunn: adopt Kaia's engram bridge (`:4602`) for recall/observe\n- **W0015** \u2014 `midgard/design-system/icons.md` rune-glyph map\n- **W0021** \u2014 write individual plan docs 01\u201320 (currently index rows only)", "hash": "d6ead9d52cb63e2f6c4db24fc97406bc2482485172eb197fe26229ab268e62ab"}
|
|
12
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "svartalfaheim/way-of/workspace/memory/daily/2026-09-11.md", "tags": ["workspace", "way-of"], "content": "2. Fleet & State\n- cron: running pid=2653889 jobs=4\n- session lock: stale pid 2651493\n- task metadata records: 0\n- status records: 0\n- realm env: ABSENT (svartalfaheim/way-of/.env.realm)", "hash": "2bce8d0a954fb41596c4c30fd31a05b20cbc8372bcb3f10d3bf489257ff44e84"}
|
|
13
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "svartalfaheim/way-of/workspace/memory/daily/2026-09-11.md", "tags": ["workspace", "way-of"], "content": "3. Active Plan Status\n- `21-company-houses` \u2014 approved (ENTRY 2026-09-11-004/005) \u00b7 **Realm:** company (way-of)\n- `22-hlidskjalf-portal` \u2014 proposed \u00b7 **Realm:** platform \u00b7 **Owner:** Brokk/Kaia\n- `23-ymir-command-observer` \u2014 proposed \u00b7 **Realm:** platform \u00b7 **Owner:** Brokk\n- `24-cron-schedule` \u2014 proposed \u00b7 **Realm:** platform \u00b7 **Owner:** Brokk\n- `25-ratatoskr-a2a` \u2014 proposed \u2192 approved (ENTRY 2026-09-11-008)\n- `26-a2a-planning` \u2014 proposed\n- `26-firstmate-four-layer` \u2014 active\n- `27-firstmate-context-budget` \u2014 active\n- `27-hermod-mcp-a2a-composition` \u2014 proposed\n- `28-frontend-backend-build` \u2014 DRAFT (proposed) \u00b7 **Owner:** Brokk \u00b7 **Stamp:** `traceability_target: 0.984`\n- `29-brokk-distro-runtime` \u2014 proposed \u00b7 **Realm:** platform \u00b7 **Owner:** Brokk", "hash": "93d97cf810d0e55a9cab110bf038aa3f5a45b82a8c1156c4a262d95427d4c8cb"}
|
|
14
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "svartalfaheim/way-of/workspace/memory/daily/2026-09-11.md", "tags": ["workspace", "way-of"], "content": "4. Today's Runes (2026-09-11)\n```jsonl\n{\"timestamp\":\"2026-09-11T13:47:00Z\",\"actor\":\"yggdrasil\",\"order\":\"\",\"realm\":\"way-of\",\"event\":\"git.sync\",\"message\":\"no git targets found under /home/zerwiz/Ymir (mode=fetch)\",\"prev\":\"\",\"checksum\":\"3fe78cd4851245fa2b2e5bcc676af6f3a3844b0f46839840b0e877c7541ec01a\"}\n{\"timestamp\":\"2026-09-11T13:47:00Z\",\"actor\":\"muninn\",\"order\":\"\",\"realm\":\"way-of\",\"event\":\"memory.housekeeping\",\"message\":\"engram=absent backup=/home/zerwiz/Ymir/state/backups/memory-2026-09-11.tar.gz pruned=0\",\"prev\":\"3fe78cd4851245fa2b2e5bcc676af6f3a3844b0f46839840b0e877c7541ec01a\",\"checksum\":\"d9eae453a45ec94288bec58bbaa5829e6a2adfd112590ab9b4ba594b70e88ff1\"}\n{\"timestamp\":\"2026-09-11T13:47:00Z\",\"actor\":\"huginn\",\"order\":\"\",\"realm\":\"\",\"event\":\"observer.command.features\",\"message\":\"FEATURES.md registry readable; projects=38\",\"prev\":\"d9eae453a45ec94288bec58bbaa5829e6a2adfd112590ab9b4ba594b70e88ff1\",\"checksum\":\"a4b5180ff26dcbeaeaf30d95d096b36f7a522ed946e0e55c6937976c30f6b8b2\"}\n{\"timestamp\":\"2026-09-11T13:47:00Z\",\"actor\":\"huginn\",\"order\":\"\",\"realm\":\"\",\"event\":\"observer.command.compliance\",\"message\":\".compliance present; gates=5 [check_platform.sh check_env.sh check_danger.sh check_wiring.sh check_paths.sh] core_four=present\",\"prev\":\"a4b5180ff26dcbeaeaf30d95d096b36f7a522ed946e0e55c6937976c30f6b8b2\",\"checksum\":\"62c77d96ba90d4faff79e0bf6ffa3f7bd926e57fee9db8a5c679af45b60c7606\"}\n{\"timestamp\":\"2026-09-11T13:47:00Z\",\"actor\":\"huginn\",\"order\":\"\",\"realm\":\"\",\"event\":\"observer.command.factory\",\"message\":\"factory.db read-only: sessions=161 phases=437 gates=67 gate_fail=1\",\"prev\":\"62c77d96ba90d4faff79e0bf6ffa3f7bd926e57fee9db8a5c679af45b60c7606\",\"checksum\":\"3726c03833e0693eb5c73d7db42562c55a30dcdbdfcd9ce7ce11f1832878a6d7\"}\n{\"timestamp\":\"2026-09-11T13:47:00Z\",\"actor\":\"huginn\",\"order\":\"\",\"realm\":\"\",\"event\":\"observer.command.engram\",\"message\":\"kaia.engram size=610304B wal=present mtime=2026-09-05 20:14:25\",\"prev\":\"3726c03833e0693eb5c73d7db42562c55a30dcdbdfcd9ce7ce11f1832878a6d7\",\"checksum\":\"", "hash": "da287fd27ea661acd08a9cf7983ca84ee658fb26dac16f1ed47facb8929bcf60"}
|
|
15
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "svartalfaheim/way-of/workspace/memory/daily/2026-09-11.md", "tags": ["workspace", "way-of"], "content": "Next\nBegin from the Active Queue above. Frontend gate stays ahead of backend (plan 29 \u00a70).", "hash": "bc96c758629fe519ec0bda52d5a31d2157030adffff0bba3a5e798c20d6b6d3e"}
|
|
16
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "svartalfaheim/way-of/workspace/README.md", "tags": ["workspace", "way-of"], "content": "Way-Of \u2014 Workspace (Company Tenant)\nScoped operational memory for the way-of company realm.\n\n- `company/` \u2014 Way-Of brand identity, mission, offers, strategy\n- `marketing/` \u2014 copy, social calendars, campaigns, analytics\n- `development/` \u2014 product specs, active repos (WOMONO, WOW, OPT), architectural docs\n- `life/` \u2014 company-side scheduling\n- `memory/daily/` \u2014 auto-generated daily logs `YYYY-MM-DD.md`\n- `memory/entity_graph/` \u2014 key entity relationship notes", "hash": "615dcef83876d0d9ba529cbeafebcd766ae7800f662b55b87e9e7974f74820ed"}
|
|
17
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "workspace/config/portfolio.md", "tags": ["workspace", "way-of"], "content": "Projects\n_No projects registered yet. Use `register_foreign_app` skill to onboard repos._", "hash": "cf8465546b79e276300e1587c2aac0ffa25501dc67a7e4fd95dd33f80ae63c06"}
|
|
18
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "workspace/config/portfolio.md", "tags": ["workspace", "way-of"], "content": "Running Processes\n_None tracked. Use `process_controller` skill to manage services._", "hash": "d4bfe35df8eb2688d8db49a75345d63e2fd60d949c35bc0fc11552614392d24b"}
|
|
19
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "workspace/config/portfolio.md", "tags": ["workspace", "way-of"], "content": "Deploy Pipelines\n_None configured. Use `github_deploy` skill to set up CI/CD._", "hash": "70102e751942c96e9d420271cc498bb8fd19d2ff7565f34ef189cc85d32da567"}
|
|
20
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "workspace/config/toolchain.md", "tags": ["workspace", "way-of"], "content": "Toolchain Registry\nThe validated engines Ymir adopts rather than rebuilds (AGENTS.md law 8 \u2014 open\nsource first). Ymir owns only the UI, the runtime, and A2A collaboration; everything\nbelow wears a Norse name over a proven engine. Wrappers live in `bin/`; secrets come\nfrom `.env.local` / `.env.realm`, never here.\n\n```\ntoolchain[16]{domain,engine,norse,wrapper,auth_env}:\n \"memory\",\"engram/engdbram\",\"Mimirsbrunn\",\"bin/mimir.sh\",\"MIMIRSBRUNN_URL\"\n \"memory bridge\",\"Kaia engram bridge (:4602)\",\"Mimirsbrunn\",\"bin/mimir.sh\",\"MIMIRSBRUNN_URL\"\n \"queue\",\"Redis\",\"Ratatoskr's nest\",\"(a2a-bus)\",\"REDIS_URL\"\n \"protocol\",\"a2aproject/a2a\",\"Ratatoskr\",\"(a2a-bus)\",\"\u2014\"\n \"gateway\",\"Traefik / Caddy\",\"Bifrost\",\"(deploy)\",\"BIFROST_PORT\"\n \"auth\",\"OAuth2-proxy / Authentik + JWS\",\"Heimdall\",\"(deploy)\",\"HEIMDALL_OAUTH_CLIENT_ID\"\n \"tunnel\",\"cloudflared\",\"Gjallarhorn\",\"(deploy)\",\"CLOUDFLARE_TUNNEL_TOKEN\"\n \"sandbox\",\"Docker (rootless)\",\"Utgard\",\"bin/utgard.sh\",\"\u2014\"\n \"files\",\"MinIO / FileBrowser\",\"Skrymir\",\"(deploy)\",\"\u2014\"\n \"process supervisor\",\"PM2 / Docker\",\"Valhalla\",\"(valhalla)\",\"\u2014\"\n \"SCM\",\"git + gh CLI\",\"Yggdrasil\",\"bin/yggdrasil.sh\",\"GITHUB_TOKEN\"\n \"local models\",\"llama-server / LM Studio\",\"\u2014\",\"bin/bifrost-bridge.sh\",\"LM_STUDIO_URL\"\n \"cloud models\",\"opencode-go bridge\",\"Bifrost bridge\",\"bin/bifrost-bridge.sh\",\"OPENCODE_GO_API_KEY\"\n \"harnesses\",\"OpenCode / Pi / Claude / Codex / Cursor\",\"Hamr\",\"bin/hamr-harness.sh\",\"\u2014\"\n \"backlog\",\"tasks-axi\",\"Nornir\",\"(.agents/config/cron.yaml)\",\"\u2014\"\n \"library of the halls\",\"command-factory / firstmate / .compliance\",\"\u2014\",\"\u2014\",\"\u2014\"\n```", "hash": "a3879d67c63bfd4f9e88999db104ee1eb9ed01b26e85bc7781adc8d7f14b297a"}
|
|
21
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "workspace/config/toolchain.md", "tags": ["workspace", "way-of"], "content": "Auth status\n```\nauth[6]{engine,env,checked}:\n \"opencode-go bridge\",\"OPENCODE_GO_API_KEY (in .env.local)\",\"bin/bifrost-bridge.sh --status\"\n \"GitHub\",\"GITHUB_TOKEN\",\"gh auth status\"\n \"LM Studio / llama-server\",\"LM_STUDIO_URL\",\"curl :8080/v1/models\"\n \"Redis\",\"REDIS_URL\",\"redis-cli ping\"\n \"engram bridge\",\"MIMIRSBRUNN_URL (:4602)\",\"bin/mimir.sh health\"\n \"Docker\",\"(socket)\",\"docker info\"\n```", "hash": "877b71bf39cc3d413789680ae0bcff5e7f6aa37873a4995917824573173572bc"}
|
|
22
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "workspace/config/toolchain.md", "tags": ["workspace", "way-of"], "content": "Rules\n- Before synthesizing a feature, ask: *does a validated engine already do this?*\n If yes, adopt it and Norse-name the wrapper; do not rebuild.\n- One wrapper per domain in `bin/`; it is the only interface agents use.\n- Secrets only from env; the registry names the variable, never the value.\n- Never claim a tool is present without a `--status` check.", "hash": "d1ca9c0ef12d6adad694ad9f93047d0777e826758a4755872d88dd4db994995e"}
|
|
23
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "workspace/config/toolchain.md", "tags": ["workspace", "way-of"], "content": "Maintaining this\n- **Owner:** Brokk. Add a row when an engine is adopted; update its `auth` row when\n the check path changes.", "hash": "769f1d684e2c429a167afa0d1a0276175f5be225cc0adb2d33175e333c5292f5"}
|
|
24
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "workspace/memory/runes_audit.md", "tags": ["workspace", "way-of"], "content": "YGGDRASIL Audit Trail\n> Append-only log of all significant system actions across Ymir\n\n---\n\n{\"timestamp\":\"2026-09-11T13:47:00Z\",\"actor\":\"yggdrasil\",\"order\":\"\",\"realm\":\"way-of\",\"event\":\"git.sync\",\"message\":\"no git targets found under /home/zerwiz/Ymir (mode=fetch)\",\"prev\":\"\",\"checksum\":\"3fe78cd4851245fa2b2e5bcc676af6f3a3844b0f46839840b0e877c7541ec01a\"}\n{\"timestamp\":\"2026-09-11T13:47:00Z\",\"actor\":\"muninn\",\"order\":\"\",\"realm\":\"way-of\",\"event\":\"memory.housekeeping\",\"message\":\"engram=absent backup=/home/zerwiz/Ymir/state/backups/memory-2026-09-11.tar.gz pruned=0\",\"prev\":\"3fe78cd4851245fa2b2e5bcc676af6f3a3844b0f46839840b0e877c7541ec01a\",\"checksum\":\"d9eae453a45ec94288bec58bbaa5829e6a2adfd112590ab9b4ba594b70e88ff1\"}\n{\"timestamp\":\"2026-09-11T13:47:00Z\",\"actor\":\"huginn\",\"order\":\"\",\"realm\":\"\",\"event\":\"observer.command.features\",\"message\":\"FEATURES.md registry readable; projects=38\",\"prev\":\"d9eae453a45ec94288bec58bbaa5829e6a2adfd112590ab9b4ba594b70e88ff1\",\"checksum\":\"a4b5180ff26dcbeaeaf30d95d096b36f7a522ed946e0e55c6937976c30f6b8b2\"}\n{\"timestamp\":\"2026-09-11T13:47:00Z\",\"actor\":\"huginn\",\"order\":\"\",\"realm\":\"\",\"event\":\"observer.command.compliance\",\"message\":\".compliance present; gates=5 [check_platform.sh check_env.sh check_danger.sh check_wiring.sh check_paths.sh] core_four=present\",\"prev\":\"a4b5180ff26dcbeaeaf30d95d096b36f7a522ed946e0e55c6937976c30f6b8b2\",\"checksum\":\"62c77d96ba90d4faff79e0bf6ffa3f7bd926e57fee9db8a5c679af45b60c7606\"}\n{\"timestamp\":\"2026-09-11T13:47:00Z\",\"actor\":\"huginn\",\"order\":\"\",\"realm\":\"\",\"event\":\"observer.command.factory\",\"message\":\"factory.db read-only: sessions=161 phases=437 gates=67 gate_fail=1\",\"prev\":\"62c77d96ba90d4faff79e0bf6ffa3f7bd926e57fee9db8a5c679af45b60c7606\",\"checksum\":\"3726c03833e0693eb5c73d7db42562c55a30dcdbdfcd9ce7ce11f1832878a6d7\"}\n{\"timestamp\":\"2026-09-11T13:47:00Z\",\"actor\":\"huginn\",\"order\":\"\",\"realm\":\"\",\"event\":\"observer.command.engram\",\"message\":\"kaia.engram size=610304B wal=present mtime=2026-09-05 20:14:25\",\"prev\":\"3726c03833e0693eb5c73d7db", "hash": "93b9bb597402502e16983c19f305a5aca075a1e00a7a0401e53e19f33b9da467"}
|
|
25
|
+
{"timestamp": "2026-09-11T17:45:32Z", "source": "workspace/README.md", "tags": ["workspace", "way-of"], "content": "Ymir \u2014 Global / Personal Workspace & Audit Trails\n- `config/` \u2014 platform configuration, `portfolio.md` (project registry)\n- `memory/` \u2014 global audit trail, `runes_audit.md`\n\nGlobal (non-realm-scoped) state lives here. Realm-scoped data lives under `svartalfaheim/<realm>/`.", "hash": "d38072d34412a649576ba220d0fe0f929e1e9e250087ace54a77981e707f9ea6"}
|
|
26
|
+
{"timestamp": "2026-09-11T17:47:50Z", "source": "svartalfaheim/way-of/workspace/memory/entity_graph/README.md", "tags": ["workspace", "way-of"], "content": "Entity Graph\nRelationship notes for the realm's workspace. `bin/workspace-rag.sh entities|graph`\nreads these files; each `[[Entity]]` is a node, and `[[A]] -> [[B]]` is a directed\nedge. Keep entries short and grounded; this is the realm's memory of *how things\nrelate*, not a copy of the documents.", "hash": "90e9ff46a3592fd996d44e33f491d59d3708401fce9e3c7a42f12813f3597493"}
|
|
27
|
+
{"timestamp": "2026-09-11T17:47:50Z", "source": "svartalfaheim/way-of/workspace/memory/entity_graph/README.md", "tags": ["workspace", "way-of"], "content": "Format\n```\n[[hlidskjalf]] -> [[gate-api]]\n[[gate-api]] -> [[runes]]\n[[brokk]] -> [[eindri]]\n```\n\nPlain Markdown with `[[wiki-links]]` and `->` edges. Index the prose docs with\n`bin/workspace-rag.sh index`; index the relationships here.", "hash": "c3a7d455361a9be44376e161c7ee66f09c06988e4a9cff1160261aa3e1034f1e"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# 0001-hodd-layout — consolidate private material into hodd/ for homes that
|
|
3
|
+
# predate the Hoard (RULES/04-hoard.md). Idempotent: safe to run repeatedly.
|
|
4
|
+
set -u
|
|
5
|
+
|
|
6
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
7
|
+
HOARD="${YMIR_HOARD:-$ROOT/hodd}"
|
|
8
|
+
|
|
9
|
+
mkdir -p "$HOARD/secrets" "$HOARD/docs" "$HOARD/tenants" "$HOARD/identity"
|
|
10
|
+
|
|
11
|
+
move() { # <src> <dest-dir>
|
|
12
|
+
[ -e "$1" ] || return 0
|
|
13
|
+
mkdir -p "$2" || return 0
|
|
14
|
+
if [ -e "$2/$(basename "$1")" ]; then return 0; fi
|
|
15
|
+
mv -n "$1" "$2/$(basename "$1")" 2>/dev/null && printf ' moved %s\n' "${1#$ROOT/}"
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
# Private documents
|
|
19
|
+
for f in masterplan.md append-only-log.md; do move "$ROOT/docs/$f" "$HOARD/docs"; done
|
|
20
|
+
move "$ROOT/docs/plans" "$HOARD/docs"
|
|
21
|
+
|
|
22
|
+
# Private project data
|
|
23
|
+
for f in "$ROOT"/assets/data/aigf-*.md; do [ -e "$f" ] && move "$f" "$HOARD/docs/aigf"; done
|
|
24
|
+
|
|
25
|
+
# Business identity
|
|
26
|
+
move "$ROOT/svartalfaheim/wayof/AGENTS.md" "$HOARD/identity/svartalfaheim/wayof"
|
|
27
|
+
move "$ROOT/svartalfaheim/wayof/companies/wayof/entity.md" "$HOARD/identity/svartalfaheim/wayof/companies/wayof"
|
|
28
|
+
for f in "$ROOT"/svartalfaheim/wayof/domains/*/entity.md; do
|
|
29
|
+
[ -e "$f" ] || continue
|
|
30
|
+
d="$(basename "$(dirname "$f")")"
|
|
31
|
+
move "$f" "$HOARD/identity/svartalfaheim/wayof/domains/$d"
|
|
32
|
+
done
|
|
33
|
+
|
|
34
|
+
# Registries (leave the tracked *.example scaffold behind)
|
|
35
|
+
move "$ROOT/workspace/projects.yaml" "$HOARD/identity"
|
|
36
|
+
move "$ROOT/workspace/workspaces.yaml" "$HOARD/identity"
|
|
37
|
+
|
|
38
|
+
echo "0001-hodd-layout: done"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# 0002-a2a-mcp — install the A2A MCP servers (a2abridge + wayofteams) into the
|
|
3
|
+
# harnesses for homes that predate the wiring. Idempotent. Also drops the
|
|
4
|
+
# a2a-sdk server into the runtime so any home can serve an Eindri over A2A.
|
|
5
|
+
set -u
|
|
6
|
+
|
|
7
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
8
|
+
|
|
9
|
+
# 0. Ensure the engine binary + directory daemon exist BEFORE wiring MCP, so
|
|
10
|
+
# no harness ever points at a dangling path.
|
|
11
|
+
if [ -x "$ROOT/bin/a2abridge-ensure.sh" ]; then
|
|
12
|
+
"$ROOT/bin/a2abridge-ensure.sh" ensure --install >/dev/null 2>&1 \
|
|
13
|
+
&& echo " a2abridge: engine present + directory up" \
|
|
14
|
+
|| echo " a2abridge: SKIP (offline? re-run bin/a2abridge-ensure.sh ensure --install)"
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# 1. Wire the MCP servers into pi + opencode (a2abridge; wayofteams if present).
|
|
18
|
+
if [ -x "$ROOT/bin/a2a-mcp.sh" ]; then
|
|
19
|
+
"$ROOT/bin/a2a-mcp.sh" install >/dev/null 2>&1 && echo " a2a-mcp: wired"
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
# 2. Ensure the a2a-sdk server can run (best effort; skip cleanly if offline).
|
|
23
|
+
python3 -c "import a2a, uvicorn, starlette" >/dev/null 2>&1 \
|
|
24
|
+
|| python3 -m pip install --user --break-system-packages 'a2a-sdk[fastapi]' uvicorn >/dev/null 2>&1 \
|
|
25
|
+
|| echo " a2a-sdk: SKIP (install later: pip install 'a2a-sdk[fastapi]' uvicorn)"
|
|
26
|
+
|
|
27
|
+
echo "0002-a2a-mcp: done"
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# 0003-private-data-separation — move all private data to YMIR_HOME
|
|
3
|
+
# Idempotent: safe to run repeatedly. Copies (never moves); originals
|
|
4
|
+
# remain until manually removed.
|
|
5
|
+
set -u
|
|
6
|
+
|
|
7
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
8
|
+
YMIR_HOME="${YMIR_HOME:-$HOME/Documents/Ymir}"
|
|
9
|
+
|
|
10
|
+
echo "0003-private-data-separation"
|
|
11
|
+
echo " source: $ROOT (repo)"
|
|
12
|
+
echo " target: $YMIR_HOME"
|
|
13
|
+
|
|
14
|
+
# 1. Create target layout
|
|
15
|
+
mkdir -p "$YMIR_HOME"/{config,secrets,identity,workspaces/{work,personal},memory/{daily,well},smidja,state,data}
|
|
16
|
+
|
|
17
|
+
# 2. Migrate hodd/ (Hoard) → YMIR_HOME/
|
|
18
|
+
copy() { # <src> <dest>
|
|
19
|
+
[ -e "$1" ] || return 0
|
|
20
|
+
mkdir -p "$(dirname "$2")" || return 0
|
|
21
|
+
if [ -e "$2" ]; then return 0; fi
|
|
22
|
+
cp -rn "$1" "$2" 2>/dev/null && printf ' copied %s\n' "${1#$ROOT/}"
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
copy "$ROOT/hodd/secrets" "$YMIR_HOME/secrets"
|
|
26
|
+
copy "$ROOT/hodd/identity" "$YMIR_HOME/identity"
|
|
27
|
+
copy "$ROOT/hodd/docs" "$YMIR_HOME/memory"
|
|
28
|
+
copy "$ROOT/hodd/masterplan.md" "$YMIR_HOME/memory/masterplan.md"
|
|
29
|
+
copy "$ROOT/hodd/append-only-log.md" "$YMIR_HOME/memory/append-only-log.md"
|
|
30
|
+
|
|
31
|
+
# 3. Migrate svartalfaheim/ (tenant data) → YMIR_HOME/workspaces/ + identity/companies/
|
|
32
|
+
copy "$ROOT/svartalfaheim/work/workspace" "$YMIR_HOME/workspaces/work"
|
|
33
|
+
copy "$ROOT/svartalfaheim/wayof/companies" "$YMIR_HOME/identity/companies"
|
|
34
|
+
|
|
35
|
+
# 4. Migrate workspace/ (operator's world-tree) → YMIR_HOME/workspaces/
|
|
36
|
+
for d in work personal memory companies; do
|
|
37
|
+
copy "$ROOT/workspace/$d" "$YMIR_HOME/workspaces/$d"
|
|
38
|
+
done
|
|
39
|
+
|
|
40
|
+
# 5. Migrate config/agents.yaml → YMIR_HOME/config/
|
|
41
|
+
copy "$ROOT/config/agents.yaml" "$YMIR_HOME/config/agents.yaml"
|
|
42
|
+
|
|
43
|
+
# 6. Migrate state/ → YMIR_HOME/state/
|
|
44
|
+
copy "$ROOT/state" "$YMIR_HOME/state"
|
|
45
|
+
|
|
46
|
+
# 7. Migrate data/ → YMIR_HOME/data/
|
|
47
|
+
copy "$ROOT/data" "$YMIR_HOME/data"
|
|
48
|
+
|
|
49
|
+
# 8. Migrate .agents/memory/kaia.engram* → YMIR_HOME/memory/
|
|
50
|
+
copy "$ROOT/.agents/memory/kaia.engram" "$YMIR_HOME/memory/kaia.engram"
|
|
51
|
+
copy "$ROOT/.agents/memory/kaia.engram-wal" "$YMIR_HOME/memory/kaia.engram-wal"
|
|
52
|
+
copy "$ROOT/.agents/memory/kaia.engram-shm" "$YMIR_HOME/memory/kaia.engram-shm"
|
|
53
|
+
|
|
54
|
+
# 9. Migrate smidja/smidja_data/smidja.db* → YMIR_HOME/smidja/
|
|
55
|
+
copy "$ROOT/smidja/smidja_data/smidja.db" "$YMIR_HOME/smidja/smidja.db"
|
|
56
|
+
copy "$ROOT/smidja/smidja_data/smidja.db-wal" "$YMIR_HOME/smidja/smidja.db-wal"
|
|
57
|
+
copy "$ROOT/smidja/smidja_data/smidja.db-shm" "$YMIR_HOME/smidja/smidja.db-shm"
|
|
58
|
+
|
|
59
|
+
# 10. Create .gitignore for private repo
|
|
60
|
+
cat >"$YMIR_HOME/.gitignore" <<'GITIGNORE'
|
|
61
|
+
# Runtime — rebuilt per machine
|
|
62
|
+
smidja/
|
|
63
|
+
state/
|
|
64
|
+
*.wal
|
|
65
|
+
*.shm
|
|
66
|
+
*.pid
|
|
67
|
+
*.lock
|
|
68
|
+
|
|
69
|
+
# Local overlays
|
|
70
|
+
config/agents.*.yaml
|
|
71
|
+
GITIGNORE
|
|
72
|
+
|
|
73
|
+
# 11. Initialize git repo if not already
|
|
74
|
+
if [ ! -d "$YMIR_HOME/.git" ]; then
|
|
75
|
+
git -C "$YMIR_HOME" init >/dev/null 2>&1 && echo " initialized private git repo at $YMIR_HOME"
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
# 12. Offer to add GitHub remote for multi-machine sync
|
|
79
|
+
if [ -d "$YMIR_HOME/.git" ] && [ -t 0 ]; then
|
|
80
|
+
read -p " Add private GitHub remote for multi-machine sync? (git@github.com:user/repo.git) [y/N]: " yn
|
|
81
|
+
case "$yn" in [Yy]*)
|
|
82
|
+
read -p " GitHub repo URL: " gh_url
|
|
83
|
+
[ -n "$gh_url" ] && git -C "$YMIR_HOME" remote add origin "$gh_url" && \
|
|
84
|
+
git -C "$YMIR_HOME" add -A && \
|
|
85
|
+
git -C "$YMIR_HOME" commit -m "chore: initial Ymir private data" >/dev/null 2>&1 && \
|
|
86
|
+
git -C "$YMIR_HOME" push -u origin main && \
|
|
87
|
+
echo " pushed to $gh_url" || true
|
|
88
|
+
;;
|
|
89
|
+
esac
|
|
90
|
+
fi
|
|
91
|
+
|
|
92
|
+
# 13. Write layout record
|
|
93
|
+
cat >"$YMIR_HOME/.ymir-layout.yaml" <<YAML
|
|
94
|
+
version: 1
|
|
95
|
+
migrated_from: "$ROOT"
|
|
96
|
+
migrated_at: "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
97
|
+
layout:
|
|
98
|
+
config: "$YMIR_HOME/config"
|
|
99
|
+
secrets: "$YMIR_HOME/secrets"
|
|
100
|
+
identity: "$YMIR_HOME/identity"
|
|
101
|
+
workspaces: "$YMIR_HOME/workspaces"
|
|
102
|
+
memory: "$YMIR_HOME/memory"
|
|
103
|
+
smidja: "$YMIR_HOME/smidja"
|
|
104
|
+
state: "$YMIR_HOME/state"
|
|
105
|
+
data: "$YMIR_HOME/data"
|
|
106
|
+
git_repo: "$YMIR_HOME"
|
|
107
|
+
github_repo: "${gh_url:-}"
|
|
108
|
+
secrets_encrypted: false
|
|
109
|
+
YAML
|
|
110
|
+
|
|
111
|
+
echo "0003-private-data-separation: done — private data now at $YMIR_HOME"
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# 0004-hoard-and-realms — one private root with two trees.
|
|
3
|
+
#
|
|
4
|
+
# Before: the hoard's parts sat at the ROOT of $YMIR_HOME (secrets · identity ·
|
|
5
|
+
# docs · data · memory · tenants · AGENTS.md), the workspaces lived in a second
|
|
6
|
+
# root ($YMIR_HOME/workspaces/) *and* inside the checkout (repo `workspace/`,
|
|
7
|
+
# repo `svartalfaheim/<realm>/`), and the Runes ledger had been copied twice.
|
|
8
|
+
#
|
|
9
|
+
# After — the layout `docs/workspaces.md` proposes:
|
|
10
|
+
#
|
|
11
|
+
# $YMIR_HOME/
|
|
12
|
+
# ├── hodd/ the operator's own: secrets · identity · docs · data · memory · tenants · AGENTS.md
|
|
13
|
+
# └── svartalfaheim/ the realms: <realm>/{workspace/{personal,company},memory,runs}
|
|
14
|
+
#
|
|
15
|
+
# Idempotent: every step checks before it moves, and a move that would overwrite
|
|
16
|
+
# is refused rather than merged blindly.
|
|
17
|
+
set -u
|
|
18
|
+
|
|
19
|
+
H="${YMIR_HOME:-$HOME/Documents/Ymir}"
|
|
20
|
+
R="${YMIR_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)}"
|
|
21
|
+
HOARD="$H/hodd"
|
|
22
|
+
moved=0; placed=0; skipped=0
|
|
23
|
+
|
|
24
|
+
row() { printf ' "%s","%s","%s"\n' "$1" "$2" "$3"; }
|
|
25
|
+
|
|
26
|
+
# ── 1. the hoard's parts move under hodd/ ────────────────────────────────────
|
|
27
|
+
mkdir -p "$HOARD" 2>/dev/null || true
|
|
28
|
+
for d in secrets identity docs data memory tenants; do
|
|
29
|
+
if [ -e "$H/$d" ] && [ ! -e "$HOARD/$d" ]; then
|
|
30
|
+
mv "$H/$d" "$HOARD/$d" && moved=$((moved+1))
|
|
31
|
+
elif [ -e "$H/$d" ]; then
|
|
32
|
+
skipped=$((skipped+1))
|
|
33
|
+
fi
|
|
34
|
+
done
|
|
35
|
+
# the operator's private contract follows the hoard
|
|
36
|
+
if [ -f "$H/AGENTS.md" ] && [ ! -e "$HOARD/AGENTS.md" ]; then
|
|
37
|
+
mv "$H/AGENTS.md" "$HOARD/AGENTS.md" && moved=$((moved+1))
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# ── 2. the realm tree ────────────────────────────────────────────────────────
|
|
41
|
+
REALM=""
|
|
42
|
+
[ -r "$HOARD/data/realm.md" ] && REALM="$(head -n1 "$HOARD/data/realm.md" 2>/dev/null | tr -d '[:space:]')"
|
|
43
|
+
if [ -z "$REALM" ] && [ -d "$H/svartalfaheim" ]; then
|
|
44
|
+
REALM="$(find "$H/svartalfaheim" -mindepth 1 -maxdepth 1 -type d ! -name examples ! -name '.*' -printf '%f\n' 2>/dev/null | sort | head -n1)"
|
|
45
|
+
fi
|
|
46
|
+
REALM="${REALM:-work}"
|
|
47
|
+
REALM_DIR="$H/svartalfaheim/$REALM"
|
|
48
|
+
|
|
49
|
+
mkdir -p "$REALM_DIR/workspace/personal"/{me,life,development,inbox} \
|
|
50
|
+
"$REALM_DIR/workspace/company"/{company,marketing,development,life,projects,companies} \
|
|
51
|
+
"$REALM_DIR/memory/daily" "$REALM_DIR/runs" 2>/dev/null || true
|
|
52
|
+
|
|
53
|
+
# fold the old workspaces root in, by name, never overwriting
|
|
54
|
+
fold() { # <src-dir> <dst-dir>
|
|
55
|
+
local src=$1 dst=$2 n=0 e b
|
|
56
|
+
[ -d "$src" ] || return 0
|
|
57
|
+
mkdir -p "$dst" 2>/dev/null || true
|
|
58
|
+
for e in "$src"/* "$src"/.[!.]*; do
|
|
59
|
+
[ -e "$e" ] || continue
|
|
60
|
+
b="$(basename "$e")"
|
|
61
|
+
[ -e "$dst/$b" ] && continue
|
|
62
|
+
mv "$e" "$dst/$b" 2>/dev/null && n=$((n+1))
|
|
63
|
+
done
|
|
64
|
+
placed=$((placed+n))
|
|
65
|
+
}
|
|
66
|
+
fold "$H/workspaces/personal" "$REALM_DIR/workspace/personal"
|
|
67
|
+
fold "$H/workspaces/work" "$REALM_DIR/workspace/company"
|
|
68
|
+
fold "$H/workspaces/companies" "$REALM_DIR/workspace/company/companies"
|
|
69
|
+
fold "$H/workspaces/memory" "$REALM_DIR/memory"
|
|
70
|
+
# …and the copy that sat inside the checkout
|
|
71
|
+
fold "$R/workspace/personal" "$REALM_DIR/workspace/personal"
|
|
72
|
+
fold "$R/workspace/work" "$REALM_DIR/workspace/company"
|
|
73
|
+
fold "$R/workspace/companies" "$REALM_DIR/workspace/company/companies"
|
|
74
|
+
fold "$R/workspace/memory" "$REALM_DIR/memory"
|
|
75
|
+
fold "$R/svartalfaheim/$REALM/workspace/memory/daily" "$REALM_DIR/memory/daily"
|
|
76
|
+
fold "$R/svartalfaheim/$REALM/workspace/development" "$REALM_DIR/workspace/company/development"
|
|
77
|
+
|
|
78
|
+
# ── 3. the Runes ledger lands in the hoard's memory, and no entry is lost ────
|
|
79
|
+
LEDGER="$HOARD/memory/runes_audit.md"
|
|
80
|
+
mkdir -p "$HOARD/memory" 2>/dev/null || true
|
|
81
|
+
for stray in "$H/workspaces/memory/runes_audit.md" "$REALM_DIR/memory/runes_audit.md"; do
|
|
82
|
+
[ -f "$stray" ] || continue
|
|
83
|
+
[ "$stray" = "$LEDGER" ] && continue
|
|
84
|
+
if [ ! -f "$LEDGER" ]; then
|
|
85
|
+
mv "$stray" "$LEDGER" && moved=$((moved+1))
|
|
86
|
+
elif cmp -s "$stray" "$LEDGER"; then
|
|
87
|
+
rm -f "$stray" && moved=$((moved+1)) # identical: drop the copy
|
|
88
|
+
else
|
|
89
|
+
# Different: append only what the target lacks, then keep the target.
|
|
90
|
+
while IFS= read -r line; do
|
|
91
|
+
[ -n "$line" ] || continue
|
|
92
|
+
grep -qxF -- "$line" "$LEDGER" || printf '%s\n' "$line" >>"$LEDGER"
|
|
93
|
+
done <"$stray"
|
|
94
|
+
rm -f "$stray" && moved=$((moved+1))
|
|
95
|
+
fi
|
|
96
|
+
done
|
|
97
|
+
|
|
98
|
+
# ── 4. report ────────────────────────────────────────────────────────────────
|
|
99
|
+
printf 'migration[1]{id,state}:\n "0004-hoard-and-realms","applied"\n'
|
|
100
|
+
printf 'migration_result[4]{what,detail,count}:\n'
|
|
101
|
+
row "hoard" "$HOARD" "$moved"
|
|
102
|
+
row "realm" "$REALM_DIR" "$placed"
|
|
103
|
+
row "ledger" "$LEDGER" "$([ -f "$LEDGER" ] && printf 'present' || printf 'absent')"
|
|
104
|
+
row "left-alone" "$H" "$skipped"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# UTGARD — Hardened Minimal Execution Container
|
|
2
|
+
|
|
3
|
+
FROM node:20-alpine
|
|
4
|
+
|
|
5
|
+
RUN apk add --no-cache \
|
|
6
|
+
python3 \
|
|
7
|
+
make \
|
|
8
|
+
g++ \
|
|
9
|
+
git \
|
|
10
|
+
bash \
|
|
11
|
+
curl
|
|
12
|
+
|
|
13
|
+
RUN addgroup -S agentgroup && adduser -S agentuser -G agentgroup
|
|
14
|
+
|
|
15
|
+
WORKDIR /sandbox
|
|
16
|
+
|
|
17
|
+
USER agentuser
|
|
18
|
+
|
|
19
|
+
CMD ["bash"]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# UTGARD Sandbox (Docker Execution Barrier)
|
|
2
|
+
|
|
3
|
+
Isolated container execution for untrusted code, dynamic skills, and sub-agent tasks.
|
|
4
|
+
|
|
5
|
+
## Contents (to be implemented)
|
|
6
|
+
- `Dockerfile.utgard` — hardened minimal execution container (exists)
|
|
7
|
+
- `utgard.config.json` — CPU / RAM / timeout limits (exists)
|
|
8
|
+
- `execute_utgard.ts` — Docker launcher skill for safe script execution
|
|
9
|
+
|
|
10
|
+
## Rules
|
|
11
|
+
- `--network none` by default
|
|
12
|
+
- Strict `--memory` and `--cpus` limits
|
|
13
|
+
- No host root access
|
|
14
|
+
- Failed executions never touch main branches
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# GUNGNIR — Core Operational Skills
|
|
2
|
+
|
|
3
|
+
Every reusable task becomes a scripted skill here. Skills are validated in Utgard
|
|
4
|
+
before registration, and every skill is named for the myth figure whose role
|
|
5
|
+
matches its work (Gungnir naming law).
|
|
6
|
+
|
|
7
|
+
## Registry (`.agents/skills/`)
|
|
8
|
+
|
|
9
|
+
Every skill has an **owner agent** (`.agents/agents/<name>.md`): the seat Brokk
|
|
10
|
+
dispatches for that work. A skill owned by `brokk` means the primary keeps it in
|
|
11
|
+
hand — a dedicated seat is added when the work earns one.
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
skills[26]{skill,does,owner}:
|
|
15
|
+
"galdr-ymirsystem","agent-CLI ergonomics — the master builder/maintainer of the runtime","galdr"
|
|
16
|
+
"tyr-check","the judge — galdr principles + runtime gates","tyr"
|
|
17
|
+
"rules-check-drift","rules-file drift — keeps AGENTS.md true after code changes","tyr"
|
|
18
|
+
"no-mistakes","the clean-PR gate — vendored engine skill: validate, push, PR, CI","brokk"
|
|
19
|
+
"smidja-factory","the smithy — agent factory: roster, phases, envelopes, visualizer","volundr"
|
|
20
|
+
"hvild-afk","away-mode — supervision of routine wakes and batched escalations","brokk"
|
|
21
|
+
"saga-bearings","bearings — fleet status digest (/bearings) + recap (/ahoy)","saga"
|
|
22
|
+
"muninn-stow","memory — session-knowledge curation, routing, persistence","muninn"
|
|
23
|
+
"jord-projects","projects — registry + delivery posture","jord"
|
|
24
|
+
"urdh-hold","hold lifecycle — decisions held for the Allfather, reconciled","urdh"
|
|
25
|
+
"frigg-consent","consent — ask-user authority gate","frigg"
|
|
26
|
+
"vor-diagnostics","diagnostics — bootstrap + diagnostic reasoning","vor"
|
|
27
|
+
"nornir-schedule","schedule — event sources + quota-aware dispatch","brokk"
|
|
28
|
+
"nsr-compliance","compliance — NorthStar scaffold/audit + the .compliance/ harness","brokk"
|
|
29
|
+
"lifecycle","lifecycle — start/stop/status/smoke-test wiring contract","brokk"
|
|
30
|
+
"gjallarhorn-relay","relay — public replies (X/Discord)","brokk"
|
|
31
|
+
"eindri-homes","worker homes — provisioning and upkeep of Eindri homes","brokk"
|
|
32
|
+
"syn-recovery","recovery — stuck-worker playbook","syn"
|
|
33
|
+
"ymir-host","host ops — self-update, Omarchy desktop, Þjazi backend","brokk"
|
|
34
|
+
"groa-update","the updater shaman — self-update Brokk + every Eindri-home (/updateBrokk)","groa"
|
|
35
|
+
"herdr-panes","terminal panes — seat/control panes, tabs, workspaces, agents (HERDR_ENV=1)","brokk"
|
|
36
|
+
"ratatoskr-a2a","A2A/MCP mesh — a2abridge + wayofteams; registration","brokk"
|
|
37
|
+
"hamr-adapters","harness adapters — per-harness reference","brokk"
|
|
38
|
+
"pr-ops","pull requests — create, update, check status, request merge","brokk"
|
|
39
|
+
"hnoss-design","design — artifacts via OpenDesign (prototypes, decks, dashboards, image, video)","hnoss"
|
|
40
|
+
"bragi-marketing","marketing — research/crawl (Firecrawl), agentic browser (browser-use)","bragi"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The control-plane UI guide is not a standalone skill: **hlidskjalf-ui** and its
|
|
44
|
+
hall **Óðrerir** (odrerir-hall) are assets under **galdr-ymirsystem** (the master
|
|
45
|
+
builder), loaded from `.agents/skills/galdr-ymirsystem/assets/` — see the galdr router.
|
|
46
|
+
|
|
47
|
+
Not adopted as standalone skills: `firstmate-coding-guidelines` (folded into Galdr),
|
|
48
|
+
`firstmate-orca` / `firstmate-codexapp` (backend reference docs only).
|
|
49
|
+
|
|
50
|
+
## Skill synthesis rules (Gungnir)
|
|
51
|
+
|
|
52
|
+
1. Gap identified → write the skill doc + script to `.agents/skills/<name>/`.
|
|
53
|
+
2. Validate inside an Utgard container.
|
|
54
|
+
3. Register it in this index.
|
|
55
|
+
4. **Norse-name every new skill** at synthesis: choose the figure whose role
|
|
56
|
+
matches the work and let the skill inherit that name (`<figure>-<what>`).
|
|
57
|
+
|
|
58
|
+
Governance: `.agents/skills/galdr-ymirsystem/SKILL.md`; adopted-skill provenance is recorded in
|
|
59
|
+
`.agents/skills/galdr-ymirsystem/assets/reference-adoption.md`.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bragi
|
|
3
|
+
description: >-
|
|
4
|
+
Bragi — the skald. The marketing craft: web research and crawling with
|
|
5
|
+
Firecrawl (firecrawl.dev) and agentic browser actions with browser-use
|
|
6
|
+
(github.com/browser-use/browser-use) — for SEO, content, competitive intel,
|
|
7
|
+
campaigns, and posting. Use when the task is marketing, growth, content,
|
|
8
|
+
social, or outreach. Keywords — marketing, seo, content, campaign, social,
|
|
9
|
+
competitor, crawl, scrape, firecrawl, browser-use.
|
|
10
|
+
argument-hint: "[research | seo | content | campaign | competitor | post]"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# bragi-marketing — marketing — research/crawl (Firecrawl), agentic browser (browser-use)
|
|
14
|
+
|
|
15
|
+
> **Norse name:** **Bragi** (the skald, poetry's god). The marketing craft.
|
|
16
|
+
|
|
17
|
+
Bragi is how Ymir does **marketing**. Two validated open-source engines do the
|
|
18
|
+
work; this skill is the Norse shell the **marketing Eindri** (Bragi) works
|
|
19
|
+
through. Marketing output — a post, a landing page, a campaign — is a **real
|
|
20
|
+
artifact** grounded in **real sources**, never invented.
|
|
21
|
+
|
|
22
|
+
## 1. The engines (open-source first)
|
|
23
|
+
|
|
24
|
+
- **Firecrawl** — [firecrawl.dev](https://www.firecrawl.dev/): scrape, crawl,
|
|
25
|
+
search, and map the web into clean **markdown / structured data**. The research
|
|
26
|
+
and SEO engine.
|
|
27
|
+
```sh
|
|
28
|
+
pip install firecrawl-py
|
|
29
|
+
# FIRECRAWL_API_KEY from .env.local (never inline)
|
|
30
|
+
```
|
|
31
|
+
REST: `POST /scrape`, `/crawl`, `/search`, `/map` — or the SDK:
|
|
32
|
+
```python
|
|
33
|
+
from firecrawl import FirecrawlApp
|
|
34
|
+
app = FirecrawlApp(api_key=os.environ["FIRECRAWL_API_KEY"])
|
|
35
|
+
doc = app.scrape_url("https://example.com", params={"formats": ["markdown"]})
|
|
36
|
+
```
|
|
37
|
+
- **browser-use** — [github.com/browser-use/browser-use](https://github.com/browser-use/browser-use):
|
|
38
|
+
an LLM-driven **browser agent** that clicks, types, and reads pages. For
|
|
39
|
+
logged-in actions: publishing, posting, filling forms, reading dashboards.
|
|
40
|
+
```sh
|
|
41
|
+
pip install browser-use
|
|
42
|
+
```
|
|
43
|
+
```python
|
|
44
|
+
from browser_use import Agent
|
|
45
|
+
agent = Agent(task="Post the launch thread to X", llm=<model from Bifrost / Pi catalog>)
|
|
46
|
+
await agent.run()
|
|
47
|
+
```
|
|
48
|
+
- **Scrapy** *(optional)* — [scrapy.org](https://www.scrapy.org/): a Python
|
|
49
|
+
scraping framework for **large or custom crawls** where Firecrawl is not the
|
|
50
|
+
right tool (many pages, structured pipelines, scheduling). `pip install scrapy`.
|
|
51
|
+
```sh
|
|
52
|
+
scrapy startproject research && cd research && scrapy crawl sources -o out.jsonl
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## 2. The craft (the loop)
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
marketing_loop[5]{step,what}:
|
|
59
|
+
"research","Firecrawl crawl/search the sources — cite every URL"
|
|
60
|
+
"position","the angle: audience, promise, channel, keywords"
|
|
61
|
+
"draft","copy, landing page, or asset — real text, on brand (Hnoss for visuals)"
|
|
62
|
+
"publish","browser-use drives the channel (X / Discord / site); Gjallarhorn relay"
|
|
63
|
+
"measure","crawl results, track metrics, feed learnings to the well"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 3. Rules
|
|
67
|
+
|
|
68
|
+
1. **Real sources, cited.** Every claim carries its URL (Firecrawl output).
|
|
69
|
+
Never invent a statistic, competitor, or quote.
|
|
70
|
+
2. **OSS engines, BYOK.** `FIRECRAWL_API_KEY` and any model key come from
|
|
71
|
+
`.env.local` — never inline in Markdown or commits.
|
|
72
|
+
3. **Real artifact.** A brief becomes a file (post, page, calendar), not a plan.
|
|
73
|
+
4. **On brand.** Visual assets come from **Hnoss** (OpenDesign) + the `DESIGN.md`.
|
|
74
|
+
5. **Domain.** The marketing Eindri is **Bragi**, domain `utgard` (creative) per
|
|
75
|
+
Rule 01; it does not implement product code (that is Sindri).
|
|
76
|
+
|
|
77
|
+
## 4. Install into Ymir
|
|
78
|
+
|
|
79
|
+
```sh
|
|
80
|
+
pip install firecrawl-py browser-use
|
|
81
|
+
bin/valknut-load.sh --all # rebind agents/skills after adding this skill
|
|
82
|
+
```
|