{"id":50501858,"url":"https://github.com/sielay/eidan","last_synced_at":"2026-06-28T00:01:02.752Z","repository":{"id":359681806,"uuid":"1246585820","full_name":"sielay/eidan","owner":"sielay","description":"Self-hosted personal agent OS for builders. Own your cognitive infrastructure.","archived":false,"fork":false,"pushed_at":"2026-06-25T16:23:35.000Z","size":16282,"stargazers_count":1,"open_issues_count":13,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-25T17:13:57.971Z","etag":null,"topics":["agpl","fastapi","mcp","nextjs","personal-agent","plugins","self-hosted"],"latest_commit_sha":null,"homepage":"https://eidan.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sielay.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":"CLA.md"}},"created_at":"2026-05-22T10:43:03.000Z","updated_at":"2026-06-25T11:48:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"d0a8d913-52f2-46ae-bc7c-0686bb73029b","html_url":"https://github.com/sielay/eidan","commit_stats":null,"previous_names":["sielay/eidan"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/sielay/eidan","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sielay%2Feidan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sielay%2Feidan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sielay%2Feidan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sielay%2Feidan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sielay","download_url":"https://codeload.github.com/sielay/eidan/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sielay%2Feidan/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34872279,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["agpl","fastapi","mcp","nextjs","personal-agent","plugins","self-hosted"],"created_at":"2026-06-02T12:30:33.123Z","updated_at":"2026-06-28T00:01:02.745Z","avatar_url":"https://github.com/sielay.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🧙🏾‍♂️ Eidan\n\n\u003cimg alt=\"Eidan.dev — Self-hosted personal agent OS for builders. Own your cognitive infrastructure\" src=\"./images/eidan_400.png\" width=\"100\" height=\"100\" style=\"float:left; margin: 0 1rem 1rem 0\" /\u003e\n **Self-hosted personal agent OS for builders. Own your cognitive infrastructure.**\n\n\u003e Think about your personal `Jarvis`\u0026trade;. A bit wiser than `Dum-E`\u0026trade;, but not yet `Vision`\u0026trade; level.\n\n\n![Eidan](./images/eidan-screen.png)\n\nYou run Eidan on your own server, computer, Raspberry Pi, pod — whatever. It keeps the\nlong-running memory — your conversations, notes, knowledge, and whatever your tools feed in —\nin a **Postgres database that's yours** to read, back up, and walk away with. New capabilities\narrive as **plugins**.\n\nThe Core is open source **forever** (AGPL).\n\nBuilt for 🌻 neurodivergent builders, 🤖 indie hackers, and solo founders who want cognitive\ncontinuity without SaaS lock-in.\n\n## Architecture\n\nEidan is a set of **plugins on the [matbot](https://github.com/MatAtBread/matbot) runtime** — a\nthin, isomorphic-TypeScript agent engine (LLM ↔ tools ↔ frontends). matbot is vendored as a git\nsubmodule at `external/matbot` (Apache-2.0); Eidan adds the parts that make it a product:\n\n```\nexternal/matbot/        # the agent runtime (Apache-2.0 submodule)\npackages/\n  storage-postgres/     # relational memory: Store\u003cSession\u003e + FileStore over the eidan.* schema\n  memory/               # knowledge + notes; remember/recall tools (EidanMemory service)\n  jobs/                 # delegation work-queue (eidan.jobs); plugins register kind handlers\n  agents/               # user-defined agents on composable triggers + escalations inbox\n  decisions/            # searchable decision log + durable job cursors\n  imap/ ical/ google/ gdrive/  # read-through mail · calendar · Gmail · Drive (vault-sealed accounts)\n  frontend-agui/        # chat surface over AG-UI (POST /api/turn) for the web UI\n  auth/                 # JWT WebPrincipalResolver — per-request identity\n  mcp-server/           # inbound MCP server (expose eidan tools to external agents)\n  a2a-server/           # inbound A2A agent (expose eidan as an agent to other agents)\n  notify/               # topic-routed outbound notifications (slack / telegram)\n  llm-calls/            # per-call cost/token ledger -\u003e eidan.llm_calls\napps/web/               # reference Next.js UI: chat over AG-UI + dashboards over Postgres\nmigrations/             # the eidan.* Postgres schema (SQL baseline + a Node migrate runner)\ninfra/fly-mb/           # the deployable host image (Fly / Pi / any container)\n```\n\nMemory lives in Postgres under the `eidan` schema (conversations, messages, events, knowledge,\nnotes, agent_context, user_context, llm_calls, artifacts, jobs). The runtime reads and writes it\nthrough `@eidandev/storage-postgres` with **keen, append-only** persistence — you own the data.\n\n**Interop on three open protocols:** MCP (tools — in *and* out), AG-UI (the chat wire to your UI),\nand A2A (agent-to-agent). Eidan speaks all three.\n\n**The UI is your own.** matbot is a headless engine. This repo ships a reference Next.js app\n(`apps/web`) as the single same-origin front door: it proxies chat + auth through to the engine\n(AG-UI over `frontend-agui`) and reads Postgres directly for the dashboards (RLS-scoped). Swap it\nfor your own — the engine doesn't care.\n\n## Self-host with Docker (recommended)\n\nThe whole thing — Postgres, the engine, and the UI — in one command. Works on a Raspberry Pi, a\nserver, or a NAS (multi-arch images):\n\n```bash\ngit clone --recurse-submodules https://github.com/sielay/eidan.git \u0026\u0026 cd eidan\ncp .env.compose.example .env      # set ANTHROPIC_API_KEY, EIDAN_AUTH_JWT_SECRET, EIDAN_AUTH_ALLOWED_EMAIL\ndocker compose up -d              # → http://localhost:3001  (sign in with the magic link)\n```\n\nUpdates are `docker compose pull \u0026\u0026 docker compose up -d`; your data is the Postgres volume. To use\nan external database (Supabase/Neon), set `EIDAN_DATABASE_URL` and drop the `postgres` service.\n\n**Shipping to a server, a Raspberry Pi, or Vercel — or adding your own plugins?** The deploy CLI makes\nit easy: run the interactive wizard and it walks you through everything — no YAML, no flags.\n\n```bash\npnpm eidan        # interactive wizard\n```\n\nOn a fresh checkout it detects there's no config yet and does first-run setup — scaffolds the config +\nsecrets, prompts the essentials (DB, login email, API key, public URL — masked), and offers to run\nmigrations — then drops you in a menu: add a target, add a bundle, configure, `doctor`, `migrate`,\n`deploy`. Scripting it in CI? Every step also has a plain verb:\n\n```bash\nnode deploy/eidan-deploy.mjs deploy fly      # one command to any target — also: local · a Pi over ssh · Vercel\n```\n\n`deploy` assembles your bundles into the build and pushes any missing env to the target first, so it\ngoes live fully configured. Full guide: [deploy/README.md](deploy/README.md).\n\n## Develop (run from source)\n\nFor hacking on the code (Node 24+ runs the TypeScript directly — no build step):\n\n```bash\ngit clone --recurse-submodules https://github.com/sielay/eidan.git \u0026\u0026 cd eidan\n( cd external/matbot \u0026\u0026 pnpm install )   # the runtime\npnpm install                             # the eidan plugins\ncp matbot.yaml.example ./matbot.yaml     # host config (the real matbot.yaml is gitignored)\nEIDAN_DATABASE_URL=postgres://eidan_app:...@host/eidan pnpm --filter @eidandev/migrate migrate\n```\n\nRun the host:\n\n```bash\nEIDAN_DATABASE_URL=postgres://eidan_app:...@host/eidan \\\nANTHROPIC_API_KEY=sk-ant-... EIDAN_AUTH_JWT_SECRET=... MATBOT_PRINCIPAL=\u003ceidan.users-uuid\u003e \\\nnode --import ./external/matbot/apps/cli/register.js \\\n     external/matbot/apps/cli/src/index.ts start --config ./matbot.yaml\n```\n\n`EIDAN_DATABASE_URL` points at a Postgres with the `eidan` schema applied (`pnpm --filter\n@eidandev/migrate migrate`), via a **non-superuser** role so RLS enforces. Reach it on the AG-UI\nsurface (`:8090`), the MCP server (`:8091`), or the A2A agent (`:8095`). The reference UI runs with\n`cd apps/web \u0026\u0026 pnpm install \u0026\u0026 pnpm dev` (set `NEXT_PUBLIC_EIDAN_BACKEND_URL=` empty + `EIDAN_ENGINE_URL`\nto the host so it's the same-origin front door).\n\n### Deploy (Fly / container)\n\n`infra/fly-mb/Dockerfile` builds the host image — see **[infra/fly-mb/README.md](infra/fly-mb/README.md)**\nfor the full guide (required env, ports, `migrate`/update flow, and how a deploy vendors plugin\nbundles). In short: `fly secrets set EIDAN_DATABASE_URL=… ANTHROPIC_API_KEY=…`, then `fly deploy`.\n\n## Plugins\n\nA plugin is one TypeScript module exporting a `MatbotPlugin` (`export const plugin`). Everything\nabove is a plugin — and so are the integrations that read your **mail, calendar, Gmail, and Drive**\nover your own vault-sealed accounts. It's all AGPL, all in this repo. Plugins plug into core purely\nthrough the string-keyed service registry (e.g. a plugin registers a `'code'` job handler) and are\nvendored into the host image at deploy time, never editing core. Write your own the same way; group\nthem as a **bundle** the deploy CLI assembles in.\n\n## Licensing\n\n- **Core and every eidan plugin** (AGPL v3) — free, self-hosted, source open forever. Plugins that\n  link into core are derivative works and ship under AGPL-compatible terms.\n- **matbot runtime** — Apache-2.0 (vendored submodule; its `LICENSE` preserved in-tree).\n- Questions: [hello@eidan.dev](mailto:hello@eidan.dev).\n\n## Status\n\nEidan's core has migrated onto the matbot runtime (from an earlier Python/FastAPI stack). Still in\nactive development — expect breaking changes. Contributions welcome.\n\n---\n\nSIELAY Ltd 2026 · Built by [@sielay](https://github.com/sielay) and contributors.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsielay%2Feidan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsielay%2Feidan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsielay%2Feidan/lists"}