# systems.toml — systems Sjel connects to: a service, tool or project with a role that a pack or # capability references by section id. Not a code-dependency register (upstreams.toml), not a # bookmark list, and not a record of declined systems. # # url = canonical URL; "local" or "overlay:systems.local.toml" when private (real value in the overlay) # kind = "project" | "service" | "tool" | "platform" # local = "yes" | "no" (on my LAN or device, or hosted elsewhere) # why = one or two reader-facing sentences; exported to the Projects page # Overlay-only keys (`/config/systems.local.toml`): owner = "self" (hardware I own; trusted # like loopback by libs/inference, resolved by tools/lib/external-ref.sh), probe = "no" and # probe_timeout_ms (tools/doctor --online reachability; it never prints a URL). # Single-line TOML only (tools/lib/toml.sh). [sjel] url = "local" kind = "project" local = "yes" why = "The public core: reusable contracts, capabilities and deployment tooling; private state is injected from the selected overlay." [backup-target] url = "overlay:systems.local.toml" kind = "service" local = "yes" why = "Remote backup role, separate from each source host so one node failure cannot remove both live state and recovery data; coordinates live in the selected overlay." [pi-agent] url = "https://github.com/earendil-works/pi" kind = "project" local = "yes" why = "Minimal open-source coding agent, extendable from core; one of three swappable harness targets for Packs/skills." [opencode] url = "https://github.com/anomalyco/opencode" kind = "platform" local = "yes" why = "Open-source coding agent CLI (MIT); third swappable harness alongside Claude Code and pi, and a Packs/skills port target." [knowledge-base] url = "overlay:systems.local.toml" kind = "project" local = "yes" why = "Private knowledge store with its own sync lifecycle, connected through explicit capability contracts rather than treated as an Sjel-wide database." [obsidian-local-rest-api] url = "https://github.com/coddingtonbear/obsidian-local-rest-api" kind = "service" local = "yes" why = "Obsidian plugin (MIT) serving the open vault over loopback HTTP; the only route by which capabilities/vault writes into the vault. URL and key file come from the overlay's config/knowledge.toml." [mach-mono] url = "https://github.com/larsboes/mach-mono" kind = "project" local = "yes" why = "Swift monorepo of macOS/iOS quality-of-life utilities; plugin-first, extendable from core." [lifeos] url = "https://github.com/danielmiessler/LifeOS" kind = "platform" local = "yes" why = "Personalization and tooling layer under the agent runtime, and the ancestor of Sjel's public-core-plus-private-overlay shape. Sjel consumes nothing from it now; upstreams.toml's [lifeos] entry owns the verdict." [ollama] url = "https://ollama.com/" kind = "tool" local = "yes" why = "Portable local-model runner holding the `embedding` and `summarization` inference roles. It loads chat models at 4096 tokens and silently truncates an over-window prompt from the front, so a chat role must name a model built with an explicit `PARAMETER num_ctx` covering `sjel_summarize::worst_case_prompt_tokens()`." [omlx] url = "https://github.com/jundot/omlx" kind = "tool" local = "yes" why = "Apple-Silicon inference server behind an API-key-enforced OpenAI-compatible endpoint. It stays host-native because Metal/ANE are unavailable inside the Linux runtime; endpoint and model selection are deployment facts." [macmon] url = "https://github.com/vladkens/macmon" kind = "tool" local = "yes" why = "Sudoless Apple Silicon performance monitor: CPU/GPU temp, power, memory, utilisation over HTTP/JSON for the GPUI Systems view." [apple-natural-language] url = "https://developer.apple.com/documentation/naturallanguage" kind = "platform" local = "yes" why = "OS-managed native embedding comparator for Comms, not the production relevance backend: it scored 3/6 and 4/6 useful top-1 on the frozen DE/EN corpus. The harnesses stay for future macOS revisions; E5-base through oMLX remains selected." [apple-vision] url = "https://developer.apple.com/documentation/vision/vnrecognizetextrequest" kind = "platform" local = "yes" why = "The OS framework rung 2 of the extraction ladder stands on, reached through tools/visocr: 100.0% prose recall but 58.8% notation recall on the frozen DE/EN corpus, which is why the ladder has a third rung. Record: libs/extraction/eval/results/2026-09-02-apple-vision-baseline.md. macOS-only; absent on Linux hosts." [opencode-zen-go] url = "https://opencode.ai/zen/go/v1" kind = "service" local = "no" why = "OpenAI-compatible hosted inference, a paid fallback behind nvidia-nim; not free despite the tier name. It buys context: several models carry 1M-token windows. Key via Vaultwarden and tools/materialize-inference-key." [gemini] url = "https://generativelanguage.googleapis.com/" kind = "service" local = "no" why = "Free-tier hosted inference behind the comms `cloud_gemini_content_analysis` role. The free tier allows 20 requests per day per project per model, so `max_requests_per_day` must not be set above 20. Key via Vaultwarden and tools/materialize-inference-key." [groq] url = "https://api.groq.com/openai/v1" kind = "service" local = "no" why = "Free-tier hosted inference, the second public-tier role behind Cloudflare, for redundancy rather than throughput. Limits are per model and per organisation: `qwen/qwen3.8-27b` allows 1000 requests and 2M tokens per day but only 8K tokens per minute, so a burst falls over to the next rung. `tools/model-check --probe` reads the real ceiling." [cohere] url = "https://api.cohere.ai/compatibility/v1" kind = "service" local = "no" why = "Free trial-key inference through Cohere's OpenAI-compatible endpoint, the third public-tier role. Trial keys allow 1000 calls per month, so the role declares 30 requests per day (30 x 31 = 930) to stay inside it." [cloudflare-workers-ai] url = "https://developers.cloudflare.com/workers-ai/" kind = "service" local = "no" why = "Free-tier hosted inference behind the comms `cloud_cloudflare_content_analysis` role. The free tier is 10,000 Neurons per day, about 80 digests of the current model, so the request cap is an approximation to re-measure when the model changes." [nvidia-nim] url = "https://build.nvidia.com/" kind = "service" local = "no" why = "Free-tier hosted inference (OpenAI-compatible, nvapi- key, 1000 credits, 40 req/min, no card), an optional cloud fallback when local model quality is not enough. Dev, research and eval terms only, not a production SLA."