{"_id":"@benjam16/umbrella","_rev":"6-315a392d9686ba40b0edda8764c74b9b","name":"@benjam16/umbrella","dist-tags":{"latest":"0.2.3"},"versions":{"0.1.0":{"name":"@benjam16/umbrella","version":"0.1.0","license":"MIT","_id":"@benjam16/umbrella@0.1.0","maintainers":[{"name":"benjam16","email":"bentradeceo@gmail.com"}],"bin":{"umbrella":"dist/src/cli.js"},"dist":{"shasum":"9e008395f4a11359e0c2bb7d2a70f872b19be197","tarball":"https://registry.npmjs.org/@benjam16/umbrella/-/umbrella-0.1.0.tgz","fileCount":57,"integrity":"sha512-0/EsnhQoFwikQyKPno0c2G+ELi/eo0cF22zHz2ej2SInQ9N3R/1twTp7+esGZR1RKzpPXLZppSHwcQBQAKICxw==","signatures":[{"sig":"MEYCIQDBNi5/pR5UBHusA/SpJ+SINnXGr3iUx2RBjRGJPvXUZgIhANLuQhuTJP1e3qfk/SPP9g8UeFYoOg3cuI50324I5Bq/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90006},"main":"dist/src/cli.js","engines":{"node":">=18.0.0"},"gitHead":"3ed4c74451c3c99ce1948ee5ee217029b1b34fae","scripts":{"dev":"ts-node src/cli.ts","agent":"node dist/runtime/index.js","build":"tsc","install:local":"node bin/install.js --claude --local","prepublishOnly":"npm run build"},"_npmUser":{"name":"benjam16","email":"bentradeceo@gmail.com"},"_npmVersion":"11.6.2","description":"One CLI + one autonomous agent that does everything: coding, orchestration, tools, memory, security, and more.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"chalk":"^4.1.2","sqlite":"^5.1.1","sqlite3":"^5.1.7","fs-extra":"^11.2.0","inquirer":"^8.2.6","telegraf":"^4.16.3","commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.5.0","@types/node":"^22.0.0","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/umbrella_0.1.0_1775315022195_0.17479767197647544","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@benjam16/umbrella","version":"0.1.1","license":"MIT","_id":"@benjam16/umbrella@0.1.1","maintainers":[{"name":"benjam16","email":"bentradeceo@gmail.com"}],"bin":{"umbrella":"dist/src/cli.js"},"dist":{"shasum":"62dae470a3b4af0be9d19bb5edb31c17bffb603e","tarball":"https://registry.npmjs.org/@benjam16/umbrella/-/umbrella-0.1.1.tgz","fileCount":57,"integrity":"sha512-jIam1b45k82tOaOgTabSmnwZ1YHyUXfFYMlGtcgQpiRfcqi3Eyy2qJ6NVt+NpwRlUdhiUlhZ01F0j8J02wEewg==","signatures":[{"sig":"MEUCIBQqkQwr7G6QH6zZgYv7jV9Joj+HE+nOPHcEGFQ63j8bAiEAuRCYVmctntXzrMyqAukBxh6fYG3EybvXB0mNFjD8bQo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90006},"main":"dist/src/cli.js","engines":{"node":">=18.0.0"},"gitHead":"3ed4c74451c3c99ce1948ee5ee217029b1b34fae","scripts":{"dev":"ts-node src/cli.ts","agent":"node dist/runtime/index.js","build":"tsc","install:local":"node bin/install.js --claude --local","prepublishOnly":"npm run build"},"_npmUser":{"name":"benjam16","email":"bentradeceo@gmail.com"},"_npmVersion":"11.6.2","description":"One CLI + one autonomous agent that does everything: coding, orchestration, tools, memory, security, and more.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"chalk":"^4.1.2","sqlite":"^5.1.1","sqlite3":"^5.1.7","fs-extra":"^11.2.0","inquirer":"^8.2.6","telegraf":"^4.16.3","commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.5.0","@types/node":"^22.0.0","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/umbrella_0.1.1_1775315384327_0.2726722940917816","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@benjam16/umbrella","version":"0.2.0","license":"MIT","_id":"@benjam16/umbrella@0.2.0","maintainers":[{"name":"benjam16","email":"bentradeceo@gmail.com"}],"bin":{"umbrella":"dist/src/cli.js"},"dist":{"shasum":"a012dd4ace58d74799d580f03d859594caccaaa2","tarball":"https://registry.npmjs.org/@benjam16/umbrella/-/umbrella-0.2.0.tgz","fileCount":153,"integrity":"sha512-bRRNFK1da5b0DXZYnxrL6R8Fn4KJkDrUTOKiQTCJNhFKdzwYY5Ou/By8B/+4KMr3VzQ1yoG3TMAJfsN7c3FaMg==","signatures":[{"sig":"MEUCIQDhfpkYtRUVfbiB5nLkukd15DadNyJ4rbqGE9fWf7spIAIgbDxmF3VXL58VH35hv4b/ulPoc27AHDrhOpKkjS8YjZA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":483945},"main":"dist/src/cli.js","engines":{"node":">=18.0.0"},"gitHead":"3ed4c74451c3c99ce1948ee5ee217029b1b34fae","scripts":{"dev":"ts-node src/cli.ts","test":"npm run build && node --test tests/plan-replay.test.cjs","agent":"node dist/runtime/index.js","build":"tsc","install:local":"node bin/install.js --claude --local","prepublishOnly":"npm run build"},"_npmUser":{"name":"benjam16","email":"bentradeceo@gmail.com"},"_npmVersion":"11.6.2","description":"One CLI + one autonomous agent that does everything: coding, orchestration, tools, memory, security, and more.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"cron":"^4.4.0","chalk":"^4.1.2","dotenv":"^16.6.1","sqlite":"^5.1.1","sqlite3":"^5.1.7","fs-extra":"^11.2.0","inquirer":"^8.2.6","telegraf":"^4.16.3","commander":"^12.1.0","discord.js":"^14.26.2","@slack/bolt":"^4.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.5.0","@types/cron":"^2.0.1","@types/node":"^22.0.0","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/umbrella_0.2.0_1775383354628_0.3049253449599352","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@benjam16/umbrella","version":"0.2.1","license":"MIT","_id":"@benjam16/umbrella@0.2.1","maintainers":[{"name":"benjam16","email":"bentradeceo@gmail.com"}],"bin":{"umbrella":"dist/src/cli.js"},"dist":{"shasum":"f9c644029b9948dc929c9c28bad17ff4589a82b1","tarball":"https://registry.npmjs.org/@benjam16/umbrella/-/umbrella-0.2.1.tgz","fileCount":153,"integrity":"sha512-MqpKG0ai4ooBysYw+iXw/tmMZHpPns4iZabdEvo0tNTd4XRCH/94IRgNrRKZTXk4mw0a/KIv5B+v2gq33KpC3A==","signatures":[{"sig":"MEQCIAbbNdiBilq7FwQy4ZaJVw+NwI7in5tZmVDXRSwQnE4OAiAd4X9F+U/LTfRbgf+J+HNcLBwYbzhgqet3U0fTcL7YYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":483945},"main":"dist/src/cli.js","engines":{"node":">=18.0.0"},"gitHead":"3ed4c74451c3c99ce1948ee5ee217029b1b34fae","scripts":{"dev":"ts-node src/cli.ts","test":"npm run build && node --test tests/plan-replay.test.cjs","agent":"node dist/runtime/index.js","build":"tsc","install:local":"node bin/install.js --claude --local","prepublishOnly":"npm run build"},"_npmUser":{"name":"benjam16","email":"bentradeceo@gmail.com"},"_npmVersion":"11.6.2","description":"One CLI + one autonomous agent that does everything: coding, orchestration, tools, memory, security, and more.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"cron":"^4.4.0","chalk":"^4.1.2","dotenv":"^16.6.1","sqlite":"^5.1.1","sqlite3":"^5.1.7","fs-extra":"^11.2.0","inquirer":"^8.2.6","telegraf":"^4.16.3","commander":"^12.1.0","discord.js":"^14.26.2","@slack/bolt":"^4.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.5.0","@types/cron":"^2.0.1","@types/node":"^22.0.0","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/umbrella_0.2.1_1775383525149_0.04919920351369789","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@benjam16/umbrella","version":"0.2.2","license":"MIT","_id":"@benjam16/umbrella@0.2.2","maintainers":[{"name":"benjam16","email":"bentradeceo@gmail.com"}],"homepage":"https://github.com/Benjam16/Umbrella#readme","bugs":{"url":"https://github.com/Benjam16/Umbrella/issues"},"bin":{"umbrella":"dist/src/cli.js"},"dist":{"shasum":"3bd2c9f67d67f3110a69a927ff823569488583e4","tarball":"https://registry.npmjs.org/@benjam16/umbrella/-/umbrella-0.2.2.tgz","fileCount":153,"integrity":"sha512-Dcpo/aeLDuvEGnO9eHOCjmbhFAONgsA8GzMw36TNjHOdxiZUt7gxQLWKMf14T+uYheLDiW3Dr6N9AJ475+5y9w==","signatures":[{"sig":"MEUCIQDgGFrFrXboq7I34ECecLrJg3XYgewXM1XwDF9CvlXbEQIgdRJ2JjOd3ecYx439Iq8Fic1wa/8og7NQiOuD1ZXTtLY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":485492},"main":"dist/src/cli.js","engines":{"node":">=18.0.0"},"gitHead":"161a04065df28d2d938d1055576fd653be6ac16a","scripts":{"dev":"tsx src/cli.ts","test":"npm run build && node --test tests/plan-replay.test.cjs","agent":"node dist/runtime/index.js","build":"tsc","publish:npm":"npm publish .","install:local":"node bin/install.js --claude --local","prepublishOnly":"npm run build","publish:npm:dry":"npm publish --dry-run ."},"_npmUser":{"name":"benjam16","email":"bentradeceo@gmail.com"},"repository":{"url":"git+https://github.com/Benjam16/Umbrella.git","type":"git"},"_npmVersion":"10.9.0","description":"One CLI + one autonomous agent that does everything: coding, orchestration, tools, memory, security, and more.","directories":{},"_nodeVersion":"23.3.0","dependencies":{"cron":"^4.4.0","chalk":"^4.1.2","dotenv":"^16.6.1","sqlite":"^5.1.1","sqlite3":"^5.1.7","fs-extra":"^11.2.0","inquirer":"^8.2.6","telegraf":"^4.16.3","commander":"^12.1.0","discord.js":"^14.26.2","@slack/bolt":"^4.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","typescript":"^5.5.0","@types/cron":"^2.0.1","@types/node":"^22.0.0","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/umbrella_0.2.2_1776457068186_0.8754430905257586","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@benjam16/umbrella","version":"0.2.3","description":"One CLI + one autonomous agent that does everything: coding, orchestration, tools, memory, security, and more.","repository":{"type":"git","url":"git+https://github.com/Benjam16/Umbrella.git"},"bugs":{"url":"https://github.com/Benjam16/Umbrella/issues"},"homepage":"https://github.com/Benjam16/Umbrella#readme","main":"dist/src/cli.js","bin":{"umbrella":"dist/src/cli.js"},"scripts":{"build":"tsc","test":"npm run build && node --test tests/plan-replay.test.cjs","dev":"tsx src/cli.ts","install:local":"node bin/install.js --claude --local","agent":"node dist/runtime/index.js","prepublishOnly":"npm run build","publish:npm":"npm publish .","publish:npm:dry":"npm publish --dry-run ."},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","@slack/bolt":"^4.6.0","chalk":"^4.1.2","commander":"^12.1.0","cron":"^4.4.0","discord.js":"^14.26.2","dotenv":"^16.6.1","fs-extra":"^11.2.0","inquirer":"^8.2.6","sqlite":"^5.1.1","sqlite3":"^5.1.7","telegraf":"^4.16.3"},"devDependencies":{"@types/cron":"^2.0.1","@types/fs-extra":"^11.0.4","@types/node":"^22.0.0","tsx":"^4.19.3","typescript":"^5.5.0"},"engines":{"node":">=18.0.0"},"license":"MIT","publishConfig":{"access":"public"},"_id":"@benjam16/umbrella@0.2.3","gitHead":"c59dc345f0476fa4a6f4a570782458d0d132bc8d","_nodeVersion":"23.3.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-NbZ624FCTX8ngHLXhTv6AzTMTdu8iCjsfJ0D1fevAREb7Eoflc18p7jRHz/7dmZJUZXb16l3LBTsvk6klpFAZA==","shasum":"17f8ec68f29fb3074f93b3e808179ae5b512fc3d","tarball":"https://registry.npmjs.org/@benjam16/umbrella/-/umbrella-0.2.3.tgz","fileCount":153,"unpackedSize":485492,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDqjNpEkHU7o9yqz0unUiT+TVmG0AQMvPrcSoP6m9BGBAiEAn3hHWjZy8hg99v+HKYSxMhMpzuEHSptfLpQ5h4le75U="}]},"_npmUser":{"name":"benjam16","email":"bentradeceo@gmail.com"},"directories":{},"maintainers":[{"name":"benjam16","email":"bentradeceo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/umbrella_0.2.3_1776458033890_0.3532285930183088"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-04T15:03:42.119Z","modified":"2026-04-17T20:33:54.234Z","0.1.0":"2026-04-04T15:03:42.333Z","0.1.1":"2026-04-04T15:09:44.448Z","0.2.0":"2026-04-05T10:02:34.874Z","0.2.1":"2026-04-05T10:05:25.322Z","0.2.2":"2026-04-17T20:17:48.343Z","0.2.3":"2026-04-17T20:33:54.097Z"},"bugs":{"url":"https://github.com/Benjam16/Umbrella/issues"},"license":"MIT","homepage":"https://github.com/Benjam16/Umbrella#readme","repository":{"type":"git","url":"git+https://github.com/Benjam16/Umbrella.git"},"description":"One CLI + one autonomous agent that does everything: coding, orchestration, tools, memory, security, and more.","maintainers":[{"name":"benjam16","email":"bentradeceo@gmail.com"}],"readme":"# Umbrella ☂️\n\n**Source:** [github.com/Benjam16/Umbrella](https://github.com/Benjam16/Umbrella)\n\n> **Looking for the Sovereign Agentic Workstation (v1.0)?** See [`platform/`](./platform) for the Tauri desktop + Hono API monorepo (supervisor-worker DAG, self-healing runner, sandboxed patch promotion, backup/restore with DR health, MCP client, blueprint gallery + minting). A one-page capability map lives in [`CAPABILITIES.md`](./CAPABILITIES.md).\n>\n> The rest of this README describes the original **CLI / agent daemon** (`@benjam16/umbrella`), which is a separate product that also lives in this repo.\n\n**One CLI. One agent. Everything done.**\n\nInstall once → get slash-command templates for **Claude Code**, **Cursor**, **Gemini CLI**, **OpenAI Codex**-style setups, and other runtimes, plus a 24/7 autonomous agent (planner → executor → memory) with an optional Telegram bridge.\n\n**→ Full marketing / feature list, automation ideas, and standalone deployment notes: [FEATURES.md](./FEATURES.md)**\n\n**→ Static marketing / user guide (`website/`):** deploy on [Vercel](https://vercel.com) with **Root Directory = `website`** — see [`website/deploy-vercel.txt`](./website/deploy-vercel.txt).\n\n```bash\nnpx @benjam16/umbrella@latest\n```\n\nThe published package name is **`@benjam16/umbrella`** (your npm username scope). Run `npm publish` while logged in as **benjam16**.\n\nOr from a clone:\n\n```bash\nnpm install\nnpm run build\nnode bin/install.js --claude --local\nnode dist/src/cli.js install   # same installer via the published entry shape\n```\n\n**Appliance-style (global CLI):** `npm install -g @benjam16/umbrella` → `umbrella install --claude` → `umbrella up` (starts the daemon; set keys in `~/.umbrella/.env` or `config.json`). Docker: `docker compose up --build` uses **`GET /api/health`** + **`GET /api/version`** for ops (see `docker-compose.yml` **healthcheck**).\n\nEach install copies **all module skills/commands** plus **bundled references**: `skills/umb-agent-runtime/MCP_TOOLS.md`, `CRYPTO_MCP.md`, and **`examples/`** (including `mcp-crypto.servers.json`) under your Umbrella home (`~/.umbrella` or `./.umbrella`).\n\n### Agent daemon\n\nRequires Node 18+ (uses built-in `fetch` for the planner LLM). **Cursor** does not expose a headless HTTP API for this daemon: point Cursor at the installed `~/.umbrella` skills/commands; the daemon uses Anthropic, OpenAI, or Google cloud APIs above.\n\n```bash\nnpm run build\n# Optional: one LLM key for planner + executor routing (fallback XML plan if none set):\n#   Claude → ANTHROPIC_API_KEY\n#   OpenAI / Codex → OPENAI_API_KEY\n#   Gemini or Gemma (e.g. Gemma 4 on Google AI) → GEMINI_API_KEY or GOOGLE_API_KEY\n# Force provider when multiple keys exist: UMBRELLA_LLM_PROVIDER=anthropic|openai|google\n# Model id: UMBRELLA_MODEL (defaults: claude-3-5-sonnet-20241022, gpt-4o, gemini-2.0-flash)\nANTHROPIC_API_KEY=sk-ant-... TELEGRAM_BOT_TOKEN=optional npm run agent\n```\n\nOr: `node dist/src/cli.js agent start` or **`node dist/src/cli.js up`** (same as `agent start`). **Load order at daemon start:** dotenv files (optional **`UMBRELLA_DOTENV`** path, then **`~/.umbrella/.env`** if present) with **`override: false`** — existing shell variables are not replaced — then optional **`~/.umbrella/config.json`** `{ \"env\": { … } }` (same merge rule: shell wins). Copy **`examples/.env.example`** and **`examples/config.json.example`**. **`umbrella up --dry-run`** loads `.env` like the daemon, then shows the config merge preview; **`umbrella config-path`** prints the resolved config path.\n\nFrom a **git clone**, if **`dist/runtime/index.js`** is missing, `umbrella up` / **`umbrella agent start`** run **`npm run build`** once in the package root. Set **`UMBRELLA_NO_AUTO_BUILD=1`** or pass **`--no-build`** to fail fast instead.\n\n**Agent lifecycle:** `umbrella agent stop` / `status` use `~/.umbrella/agent.pid`. Run `umbrella doctor` for a quick environment check.\n\n**Orchestrator (GSD-inspired):** LLM plans use nested **milestones → slices → tasks**; optional budgets via env or `~/.umbrella/orchestrator-context.json`. Repeated failures trigger an **escalation** planning goal (`UMBRELLA_STUCK_THRESHOLD`). Optional `UMBRELLA_VERIFY_COMMAND` and `~/.umbrella/llm-audit.log` for verification and LLM call audit.\n\n**v2 agent controls:** **`UMBRELLA_SUBAGENT_PER_SLICE=1`** — each slice gets a **fresh-context LLM pass** (no memory injection) that expands XML into shell/read/write lines. **`UMBRELLA_SUBAGENT_USE_PROCESS=1`** runs that pass in a **child process** (optional **`UMBRELLA_WORKER_WRAPPER`** executable receiving the job JSON path as its **first argument** (else the built-in `subagent-worker-cli.js` worker is used)); use **`UMBRELLA_WORKER_*`** API keys / **`UMBRELLA_WORKER_CWD`** for isolation; usage is still recorded in the parent as `subagent_slice_worker`. **`UMBRELLA_TOKEN_BUDGET_DAILY`** — approximate token cap per UTC day (`~/.umbrella/token-usage.json`). **`~/.umbrella/session.json`** — heartbeat + checkpoint (`umbrella session reset`). **`UMBRELLA_CHAOS_APPROVE=1`** — human gate before chaos recovery runs shell fixes (pending JSON under `~/.umbrella/chaos-pending/`, approve via **`POST /api/chaos-approve`** on the dashboard or `touch ~/.umbrella/chaos-approved/<nonce>`).\n\n**Anti-fragile / Chaos mode:** shell actions (`shell:`, and raw `git`/`npm`/`node` lines) go through `ChaosMonitor`: on `❌ Shell Error`, the **Chaos Specialist** (LLM + optional DuckDuckGo hint) proposes fix commands, runs them, and retries (up to 3 rounds). Payment-quota style errors can trigger the **X402 stub** (`UMB_X402_ENABLED=1` — implement settlement in `x402.ts`). **Dashboard:** set `UMBRELLA_DASHBOARD_PORT=4578` (for example) and open `http://127.0.0.1:4578/` for a live **chaos feed** (`GET /api/chaos-logs`), **last heartbeat** (`GET /api/last-run`), and **MCP tool hints** (`GET /api/mcp-tools`).\n\n**MCP (stdio servers):** set `UMBRELLA_MCP_ENABLED=1` and `UMBRELLA_MCP_SERVERS` and/or **`UMBRELLA_MCP_SERVERS_FILE`** (JSON array; merged). Env values support **`${VAR}`** expansion from the daemon’s environment. **Crypto / on-chain:** `modules/agent-runtime/tools/CRYPTO_MCP.md` + `examples/mcp-crypto.servers.json`. Executor: `mcp:{\"server\":0,\"name\":\"tool\",\"arguments\":{}}`. See `modules/agent-runtime/tools/README.md`.\n\n**Goals (core vs foreground):** the daemon stores a long-running **core goal** (background progress when idle) and an optional **foreground task** that **interrupts** the core until you clear it or verification succeeds. Telegram: `/umb core …`, `/umb task …`, `/umb done`, `/umb pause` / `/umb resume`, `/umb brief`. HTTP (same `UMBRELLA_INBOUND_SECRET`): `POST /api/core-goal` `{\"goal\":\"…\"}`, `POST /api/goal` sets **foreground** (one-off), `POST /api/foreground/clear`, `GET /api/agent-state`, `POST /api/agent-state` with `{\"backgroundPaused\":true}` etc. Set `UMBRELLA_FOREGROUND_CLEAR_ON_VERIFY=0` to keep foreground until manual clear. **`POST /api/skill-approve`** approves a skill proposal when `UMBRELLA_SKILL_APPROVE=1`.\n\n**Telegram digests:** `UMBRELLA_TELEGRAM_DIGEST_HEARTBEATS=N` sends a short summary to the last chat that used `/umb`, every N heartbeats.\n\n**Import skills:** `node bin/import-skill.js /path/to/skill-folder [alias]` → `~/.umbrella/skills/umb-imported/<alias>/`.\n\n**Ship CLIs:** **`umbrella scaffold cli <dir> @scope/pkg [--bin name]`** copies **`examples/shipping-cli-template`** (TypeScript, Vitest, GitHub Action → **`npm publish --provenance`** on semver tags). Operator guide: **`examples/SHIPPING.md`** (recommended **`UMBRELLA_SHIPPING_ROOT`**, npm Trusted Publishers, no ad-hoc `npm publish` from the agent host).\n\n**Threat model (short):** the daemon can run **shell** and **MCP** tools you enable. Use **`UMBRELLA_SHELL_POLICY=strict`** and **`UMBRELLA_SHELL_ALLOW_PREFIXES`** for write boundaries; **`UMBRELLA_SUBAGENT_USE_PROCESS=1`** (and optionally **`UMBRELLA_WORKER_WRAPPER`**, see **`examples/worker-wrapper.example.sh`**) for isolation; run in **Docker** on shared hosts; keep the dashboard on **localhost** or behind auth; disable **`UMBRELLA_WEB_FETCH`** / **`UMBRELLA_BROWSER_HINT_DISABLED=1`** if outbound hints are unwanted.\n\n### Run in Docker\n\n```bash\ndocker build -t umbrella .\ndocker run --rm \\\n  -e ANTHROPIC_API_KEY=sk-ant-... \\\n  -e UMBRELLA_DASHBOARD_PORT=4578 \\\n  -p 4578:4578 \\\n  -v umbrella_data:/root/.umbrella \\\n  umbrella\n```\n\nOr: `docker compose up --build` (see `docker-compose.yml`). Copy `.env.umbrella.example` to `.env.umbrella` and pass variables with `-e` / compose `environment:` as you prefer.\n\n### Layout\n\n- `FEATURES.md` — product / capability overview + automation & standalone roadmap\n- `examples/mcp-crypto.servers.json` — starter **stdio** crypto MCP list + `examples/README.md` (+ systemd / launchd samples)\n- `ROADMAP.md` — milestones, slices, and phased **next steps** toward Hermes-tier parity (MCP, learning loop, gateways, Docker, policy)\n- `Dockerfile` / `docker-compose.yml` — agent in a container with persisted `~/.umbrella`\n- `bin/install.js` — copies `modules/*` skills/commands into `~/.umbrella` (or `./.umbrella` with `--local`)\n- `bin/import-skill.js` — copy a `SKILL.md` folder into `~/.umbrella/skills/umb-imported/`\n- `modules/agent-runtime/` — SQLite memory, planner, executor + tool sandbox, Telegram gateway\n- `runtime/index.ts` — heartbeat loop\n\nMIT License — see `LICENSE`.\n","readmeFilename":"README.md"}