{"id":49689187,"url":"https://github.com/codeeagle/jarvis","last_synced_at":"2026-05-07T12:02:26.908Z","repository":{"id":356173033,"uuid":"1231117072","full_name":"CodeEagle/Jarvis","owner":"CodeEagle","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-06T23:13:03.000Z","size":336,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-07T00:26:18.128Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CodeEagle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-06T16:38:35.000Z","updated_at":"2026-05-06T16:38:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/CodeEagle/Jarvis","commit_stats":null,"previous_names":["codeeagle/jarvis"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/CodeEagle/Jarvis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeEagle%2FJarvis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeEagle%2FJarvis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeEagle%2FJarvis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeEagle%2FJarvis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CodeEagle","download_url":"https://codeload.github.com/CodeEagle/Jarvis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodeEagle%2FJarvis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32736582,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-07T12:02:23.166Z","updated_at":"2026-05-07T12:02:26.899Z","avatar_url":"https://github.com/CodeEagle.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jarvis — Global AI Runtime (Rust)\n\nRust implementation of the **Jarvis Global AI Runtime** PRD (v1.8 spec).\n\nThis repo currently ships **v0.1 + most of v0.2**:\n\n- v0.1 (shipped): rule-layer Router, SessionResolver, immutable raw\n  event log, Memory + change-log, Control Plane response SLA + Watchdog,\n  CLI.\n- v0.2 (this commit, partial): Tool Runtime with permission model,\n  Growth Engine (Collector + PromotionGate + Regression-aware skill\n  promotion), Compression (TurnSummary + Rolling Summary versioning +\n  dynamic threshold policy), Orchestrator subsystem (TaskTree +\n  ArtifactRegistry + SubTaskEnvelope), ConversationBus with ownership\n  state machine + sub-channels + user-message router, SubTaskCheckpoint\n  for soft-interrupt resume, Steer protocol with throttle + audit,\n  Tentacle file generator (`CONTEXT.md` write-protected, `todo.md`\n  checkboxes, `NOTES.md` append, `HANDOFF.md` one-shot, file locks).\n\nStill TODO before tagging v0.2 final: real LLM judge layer, sub-agent\ndispatch with Codex driver, ActivityCard rendering, Worktree management.\n\nThe PRD describes more (Walkthrough/Verifier, Dream system, Persona\nlayer, full @mention REPL polish). Those land in v0.3/v0.4/v1.0 — see\n[Roadmap](#roadmap).\n\n---\n\n## Workspace layout\n\n```\ncrates/\n  jarvis-core/          Pure domain types\n                        (RouteDecision, Memory, Session, AgentDefinition,\n                         ToolScope, MentionMode, TaskNode, …)\n  jarvis-db/            SQLite storage; immutable triggers; raw_event_log;\n                        memory_change_log; session/memory/mention repos;\n                        full v0.2 schema (task_trees, artifacts,\n                        conversation_ownerships, sub_channels,\n                        sub_task_checkpoints, steer_signals,\n                        turn_summaries, rolling_summary_versions,\n                        growth_events, growth_artifacts, …)\n  jarvis-router/        Main Router: rule-layer IntentClassifier, @mention\n                        parser, SessionResolver scoring, agent registry,\n                        Growth Engine wiring\n  jarvis-memory/        MemoryManager (write rules + change-log atomicity),\n                        Jaccard retrieval + emotion resonance, trust score,\n                        compression (TurnSummary, RollingSummary versions,\n                        three-dim dynamic policy)\n  jarvis-tools/         Tool Runtime: scope validation, confirmation gate,\n                        timeout, raw_event_log audit on every call\n  jarvis-growth/        GrowthEvent / GrowthArtifact / Collector /\n                        PromotionGate (Section 16.6 rules)\n  jarvis-orchestrator/  TaskTree + ArtifactRegistry + SubTaskEnvelope +\n                        ConversationBus + ownership state machine +\n                        SubTaskCheckpoint + Steer protocol +\n                        Tentacle file generator with locks +\n                        Workspace lock (in-memory + durable) +\n                        Walkthrough + Verifier + ActivityCard +\n                        RegressionOrchestrator + commands.json runner +\n                        SubAgentDispatcher + InProcessDriver +\n                        WorkerProcessDriver + Interrupt protocol +\n                        OrchestrationPipeline + SteerAdapter\n  jarvis-control/       Control Plane / Task Plane separation, response SLA,\n                        sub-agent Watchdog, fallback responder, periodic\n                        Scheduler (Dream lint / cluster / lock sweep)\n  jarvis-api/           HTTP API — POST /router/input, GET /sessions/*,\n                        GET /memory/*, POST /memory, GET /raw-log/*,\n                        GET /trace/*, GET /audit/*, GET /growth/*,\n                        GET /walkthrough/*, GET /healthz\n  jarvis-cli/           `jarvis` binary — route / chat / memory / raw-log /\n                        growth / trace / replay / audit / maintenance / serve\n```\n\n**352 unit + integration tests pass** across the workspace; an additional\n6 `#[ignore]`'d tests hit the live codex CLI for end-to-end LLM-judge\nverification.\n\nTracking PRD **v1.8** (2026-05-04 spec). All v1.4–v1.8 changelog items\nare either implemented or have a concrete extension seam:\n\n- v1.4 §12.3a emotion gate, §12.6.1 Dream gap-trigger, §8.14.4 HANDOFF\n  primary-input, §20.4 Tentacle locks — ✅\n- v1.5 Control/Task plane separation, raw_event_log immutability,\n  Steer protocol — ✅\n- v1.6 §23 API expansion, §24 dependency graph + 5-stage MVP — ✅\n- v1.7 Section 30 全模块测试规范 (30.1–30.14) — ✅ (30.15 below)\n- v1.8 @mention 协议 — ✅ (parser produces 4 modes, Router applies\n  override / Steer demotion, ActivityCard renders `[@ 指定]` chip,\n  unresolved mentions emit `mention.unresolved` GrowthEvent for\n  new-agent-need discovery)\n\n---\n\n## Install\n\n### Option A — One-line installer (recommended)\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/CodeEagle/Jarvis/main/scripts/install.sh | bash\n```\n\nAuto-detects platform (Linux x86_64, macOS arm64, macOS x86_64),\ndownloads the matching release tarball if available, falls back to\n`cargo build` from `main` HEAD if no release exists for your target\nyet. Verifies SHA256, installs to `~/.local/bin/jarvis`. Use\n`JARVIS_INSTALL_DIR=…` to override.\n\n### Option B — Manual download\n\nGrab the asset that matches your platform from\n[Releases](https://github.com/CodeEagle/Jarvis/releases) and:\n\n```bash\ntar -xzf jarvis-vX.Y.Z-\u003ctarget\u003e.tar.gz\nchmod +x jarvis\nmv jarvis ~/.local/bin/        # or any PATH dir\njarvis --help\n```\n\n### Option C — Fresh macOS dev build\n\nThe `macos-build` workflow runs on every push to `main` and uploads\narm64 + x86_64 binaries as workflow artifacts (30-day retention). To\ngrab one without waiting for a tagged release:\n\n1. Go to **Actions → macos-build** on GitHub\n2. Click the latest green run\n3. Download `jarvis-…-aarch64-apple-darwin.tar.gz`\n   (or `…-x86_64-apple-darwin.tar.gz` for Intel)\n4. `tar -xzf …; chmod +x jarvis; ./jarvis --help`\n\n### Option D — Build from source\n\n```bash\ngit clone https://github.com/CodeEagle/Jarvis.git\ncd Jarvis\ncargo build --release -p jarvis-cli\n./target/release/jarvis --help\n```\n\nRequires Rust ≥ 1.80. SQLite is statically linked\n(`rusqlite` bundled feature), no system SQLite needed.\n\n### Run the test suite\n\n```bash\ncargo test --workspace                                # 352 default tests\ncargo test -p jarvis-codex --lib -- --ignored         # 6 real codex e2e (needs codex login)\n```\n\n---\n\n## Quick start (5-minute tour)\n\n```bash\n# Pick a sqlite location. Defaults to ./jarvis.db.\nexport JARVIS_DB=\"$HOME/.jarvis/jarvis.db\"\nmkdir -p \"$(dirname \"$JARVIS_DB\")\"\n\n# 1. Route a single input through the rule-based Router\njarvis route \"OpenWrt DNS hosts 不生效\"\n\n# 2. Create a persistent task session\njarvis sessions new \"Mirage 重构\" coding\njarvis sessions list\njarvis sessions list --json                  # programmatic JSON output\n\n# 3. Record a long-term preference (Tier 1 user_explicit memory)\njarvis memory write \"用户偏好函数式编程\"\njarvis memory write \"Mirage 项目用 Riverpod\"\njarvis memory list                           # rows include id, type, trust score\njarvis memory search \"vim\" --json            # hybrid retrieval: fts + vector + jaccard\n\n# 4. Forget a memory (audit-logged, not hard-deleted)\njarvis memory forget mem_abcdef0123 \"privacy cleanup\"\njarvis memory-history mem_abcdef0123         # full change-log chain\n\n# 5. Persona — assistant tone + user profile\njarvis persona set '{\"style\":\"terse\",\"language\":\"zh\"}'\njarvis persona get\n\n# 6. Inspect immutable logs (PRD §15.7)\njarvis raw-log sess_abc123\njarvis trace trc_xxxxxx                       # all events sharing one trace id\njarvis trace-view trc_xxxxxx                  # pretty trace + audit\njarvis audit sess_abc123 --json\njarvis replay sess_abc123 2026-01-15T10:00:00Z   # point-in-time replay\n\n# 7. Interactive chat REPL (uses ControlPlane SLA + fallback)\njarvis chat\n\u003e openwrt 这个报错怎么办\n\u003e :quit\n\n# 8. Run the periodic Dream pipeline manually\njarvis maintenance global\n\n# 9. Health snapshot\njarvis dashboard --json\njarvis outbox\n\n# 10. List built-in quick-action commands (PRD §8.17)\njarvis commands list\njarvis commands run regression_check sess_abc123\njarvis commands status cmd_xxxx\n```\n\nPer-subcommand help is consistent: `jarvis \u003ccmd\u003e --help` shows usage\nfor any subcommand. `--json` is honored by `dashboard`, `sessions list`,\n`memory list/search`, `raw-log`, `audit`, `skills`, and `commands list`.\n\n---\n\n## Use a real LLM judge (codex / ChatGPT plan)\n\nJarvis ships a subprocess adapter that drives the\n[OpenAI Codex CLI](https://www.npmjs.com/package/@openai/codex). When\nenabled, the Router consults a real model for high-confidence routing\ndecisions before falling back to the rule layer.\n\n```bash\n# 1. Install codex\nnpm install -g @openai/codex\ncodex login --device-auth          # complete the device-auth flow once\n\n# 2. Verify the adapter is reachable end-to-end\nJARVIS_JUDGE=codex jarvis judge probe\n# → judge probe ok (~7s): agent=general confidence=0.95 ...\n\n# 3. Route through codex\nJARVIS_JUDGE=codex jarvis route \"openwrt 编译报错 no rule to make target\"\n# → agent_type=coding (rule layer would have said devops),\n#   router_notes contains both rule hint and judge reasoning\n\n# 4. Chat REPL with codex (SLA auto-bumps to 180s for codex calls)\nJARVIS_JUDGE=codex jarvis chat\n```\n\nTunables:\n\n| Env | Default | Purpose |\n|---|---|---|\n| `JARVIS_JUDGE` | unset (rule-only) | `codex` to enable the codex adapter |\n| `CODEX_BINARY` | `codex` (PATH) | Override codex binary path |\n| `CODEX_MODEL` | codex's default | Pin a specific model id |\n| `CODEX_TIMEOUT_SECS` | `180` | Per-call hard deadline |\n| `JARVIS_FALLBACK_SECS` | `180` (with codex), `2` (rule) | Chat REPL fallback budget |\n\nIf codex is unreachable, the Router transparently falls back to the\nrule layer and marks `fallback_used=true` — the call never panics.\n\n---\n\n## Run the HTTP API\n\n```bash\njarvis serve 127.0.0.1:7777                  # blocks; Ctrl+C to stop\n\n# in another shell\ncurl -s http://127.0.0.1:7777/healthz\ncurl -s http://127.0.0.1:7777/dashboard/metrics | jq\ncurl -s http://127.0.0.1:7777/sessions/recent | jq\ncurl -s http://127.0.0.1:7777/conversation/sess_abc/ownership | jq\n\n# Server-Sent Events stream of raw_event_log for a session\ncurl -N http://127.0.0.1:7777/sessions/sess_abc/stream\n\n# Send a route request via API\ncurl -X POST http://127.0.0.1:7777/router/input \\\n  -H 'content-type: application/json' \\\n  -d '{\"user_input\":\"openwrt 排错\",\"session_id_hint\":null}' | jq\n```\n\nA read-only dashboard at `http://127.0.0.1:7777/dashboard` polls the\nmetrics endpoint and exposes recent activity.\n\nFull endpoint list:\n\n```\nGET  /healthz\nGET  /dashboard           (HTML)\nGET  /dashboard/metrics   (JSON)\nPOST /router/input\nGET  /sessions/recent\nGET  /sessions/:id\nGET  /sessions/:id/messages\nGET  /sessions/:id/stream                   (SSE — raw_event_log tail)\nGET  /memory/:scope\nPOST /memory\nGET  /raw-log/:session\nGET  /trace/:trace_id\nGET  /audit/:session\nGET  /growth/{events,artifacts}\nGET  /walkthrough/:session\nPOST /walkthrough/:doc_id/{approve,reject}\nPOST /steer\nPOST /interrupt\nPOST /maintenance/lint\nGET  /conversation/:session/{ownership,sub-channels,activity,pending}\nPOST /conversation/:session/{reply,interrupt,steer}\n```\n\n---\n\n## What's wired up\n\n### v0.1 (Section 24.1)\n\n| Invariant | Where |\n|---|---|\n| Raw input → `raw_event_log` *before* any classification | `jarvis-router/src/router.rs::Router::route` Step 0 |\n| `raw_event_log` blocks UPDATE/DELETE via SQL triggers | `jarvis-db/src/migrations.rs` |\n| sha256 checksum on every raw event | `jarvis-db/src/raw_event_log.rs::compute_checksum` |\n| Memory writes atomic with `memory_change_log` | `jarvis-db/src/memory_repo.rs::upsert` |\n| Control Plane response SLA fallback ≤ 2000ms | `jarvis-control/src/control_plane.rs` |\n| Sub-agent Watchdog state machine | `jarvis-control/src/watchdog.rs` |\n| Control / Task plane separation | `jarvis-control/src/control_plane.rs` |\n| `@mention` parsing + `mentionable=false` for internal agents | `jarvis-router/src/{mention,agent_registry}.rs` |\n| Emotion-coordinate gate forces neutral on non-emotion types | `jarvis-core/src/memory.rs::Memory::enforce_emotion_gate` |\n| Tier-1 trust floor ≥ 0.30, retrieve-boost cap ≤ 0.20 | `jarvis-memory/src/trust.rs::compute` |\n\n### v0.2\n\n| Invariant | Where |\n|---|---|\n| Tool calls scope-checked, confirmation-gated, timeout-bounded | `jarvis-tools/src/runtime.rs::ToolRuntime::call` |\n| Every tool call audited to `raw_event_log` (call + result) | same — `audit_result` |\n| Router emits `route_decision` GrowthEvent (Section 5.5 tolerant) | `jarvis-router/src/router.rs` end of `route()` |\n| Skill promotion blocked without ≥3 successes / \u003c20% failure / regression ≥80% | `jarvis-growth/src/promotion.rs::PromotionGate::eval_skill` |\n| Compression threshold tracks task complexity + usage budget | `jarvis-memory/src/compression.rs::compression_threshold` |\n| Rolling Summary writes are versioned and update `sessions.long_summary` in one tx | `jarvis-memory/src/compression.rs::CompressionStore::append_rolling_version` |\n| TaskTreeView is recomputed on demand (recent completed + active) | `jarvis-orchestrator/src/task_tree.rs::TaskTreeStore::build_view` |\n| Ownership acquire releases prior holder atomically | `jarvis-orchestrator/src/conversation_bus.rs::acquire_ownership` |\n| User message classifier — interrupt \u003e steer \u003e progress \u003e normal | `…::classify_user_message` |\n| Steer signals throttled at 3/60s, audited to `raw_event_log` | `jarvis-orchestrator/src/steer.rs::SteerController::enqueue` |\n| Tentacle CONTEXT.md is write-protected for sub-agents | `jarvis-orchestrator/src/tentacle.rs::Tentacle::try_overwrite_context` |\n| Tentacle HANDOFF.md is one-shot (no overwrite) | `…::Tentacle::write_handoff_once` |\n| File-level locks on todo/notes/handoff with 30s upper bound | `…::tentacle::lock` |\n\n---\n\n## Test inventory\n\n```\njarvis-anthropic       5 tests\njarvis-api            17 tests   (+ Conversation API + SSE concurrency)\njarvis-cli            53 tests   (+ JSON variants + commands subcommand)\njarvis-codex           6 tests   (+ 6 #[ignore] real codex e2e)\njarvis-control        16 tests   (+ TurnSummary hook + judge path)\njarvis-core           13 tests\njarvis-db             28 tests\njarvis-growth         21 tests\njarvis-memory         44 tests\njarvis-openai          3 tests\njarvis-orchestrator   80 tests   (+ worker e2e + lock cross-proc + synthesizer)\njarvis-router         46 tests\njarvis-tools          18 tests\n─────────────────────────────────\nDEFAULT              352 tests   (0 failed)\nIGNORED               +6 tests   (real codex CLI; requires codex login)\n```\n\nEach crate is independently testable: `cargo test -p jarvis-orchestrator`,\netc. Real codex e2e: `cargo test -p jarvis-codex --lib -- --ignored`.\n\n---\n\n## QA evidence\n\n`docs/qa/v1.8/` contains a 30-feature audit of the v1.8 PRD with real\nterminal transcripts (`docs/qa/v1.8/EVIDENCE.md` collects 50+ command\nruns and `cargo test --nocapture` outputs end-to-end). `docs/qa/v1.8/INDEX.md`\nmaps each PRD section to its implementation status (✅ / 🟡 / ⏸️ / ❌ / 🖥️).\n\n`docs/prd/v1.9-context-handoff.md` is the design spec for the next\nversion (CapacityAdvisor + AI-led HandoffSnapshot when the session\ncontext outgrows its useful budget — to be implemented after v0.4).\n\n`docs/eng/storage-tiering.md` is the v1.0 storage-tiering plan\n(Hot 30d / Warm 180d zstd / Cold object store) referenced by code\nTODOs in `raw_event_log.rs` and `scheduler.rs`.\n\n---\n\n## Roadmap\n\n### v0.1 ✅ shipped\n- Router rule layer, SessionResolver, raw_event_log, Memory + change-log,\n  Control Plane / Task Plane split, Watchdog, CLI\n\n### v0.2 (this commit, mostly done)\n- ✅ Tool Runtime with permission validation\n- ✅ Growth Engine (Collector + PromotionGate + ArtifactStore)\n- ✅ Compression (TurnSummary + Rolling Summary + dynamic policy)\n- ✅ TaskTree + ArtifactRegistry\n- ✅ ConversationBus with ownership state machine + sub-channels\n- ✅ SubTaskCheckpoint for soft-interrupt resume\n- ✅ Steer protocol with throttle + audit\n- ✅ Tentacle file generator (CONTEXT.md write-protected; HANDOFF.md one-shot)\n- ✅ Workspace lock (Reader/Writer mode) + Worktree manager\n- ✅ ActivityCard storage with lifecycle transitions\n- ✅ session_snapshots immutable store (Section 15.7.4)\n- ⬜ LLM judgment layer (currently rule-only)\n- ⬜ Sub-agent dispatch with worker-process driver\n\n### v0.3 (in progress)\n- ✅ WalkthroughDoc + auto-approval policy (data layer in v0.2)\n- ✅ VerifierAgent + file_exists / file_content checks (v0.2)\n- ✅ RegressionOrchestrator with expected_change vs potential_bug\n  classification (this commit)\n- ✅ ColdStartSnapshot capture + retire (this commit)\n- ✅ Memory Lint (duplicates, stale scratch, expired inference, weak\n  lessons, conflict dampening) — Dream \"tidy\" layer (this commit)\n- ✅ Hybrid retrieval: FTS5 + Jaccard + emotion resonance + trust score\n- ⬜ Test/lint runners through ToolRuntime\n- ⬜ Codex steer adapter\n- ⬜ soft / hard / async interrupt with Watchdog escalation\n\n### v0.4 (mostly done)\n- ✅ Dream system: lint, cluster, inference\n- ✅ Dynamic model up/downgrade with debouncing\n- ✅ token-budget self-learning with ±40% guardrail\n- ✅ Persona layer (persona.md + user.md sync)\n- ✅ Stable system-prompt assembler (`render_stable_block`) consumes the\n  Persona layer and the agent definition; ready for downstream callers\n  to feed into LLM clients.\n- ✅ commands.json catalogue + CommandRunner state machine\n  (Section 8.17) — defaults catalogue covers 6 of the 7 PRD commands\n- ✅ Pluggable `LlmJudge` trait + `RuleBasedJudge` fallback (Section 5.4\n  + 5.5) and `Router::route_with_judge` integration.\n- ✅ `SubAgentDriver` trait + `InProcessDriver` + `SubAgentDispatcher`\n  glue (Section 8.6 / 9.4).\n- ✅ Soft / hard / async interrupt protocol with auto-escalation\n  (Section 8.11.6).\n- ✅ Provenance / time-point replay (Section 15.7.5) + CLI surface\n  (`jarvis trace` / `jarvis replay`).\n- ✅ Skill registry + Regression Runner (Sections 18 / 16.7) — runner\n  is sandboxed against a `MockToolRuntime` per the PRD.\n- ✅ Steer adapter trait + RecordingAdapter + `admissibility_check`\n  for protocol-level safety guards (Section 9.11.5).\n- ✅ DurableWorkspaceLock (cross-process file lock + stale sweep).\n\n### v1.0\n- Growth Dashboard, multi-device sync, Qdrant / pgvector,\n  MCP / plugin registry, Trace Viewer, sandboxed tool runtime\n\n---\n\n## License\n\nMIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeeagle%2Fjarvis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodeeagle%2Fjarvis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeeagle%2Fjarvis/lists"}