{"id":48953460,"url":"https://github.com/szesnasty/jarvis","last_synced_at":"2026-04-24T19:00:39.994Z","repository":{"id":351831242,"uuid":"1208881540","full_name":"Szesnasty/Jarvis","owner":"Szesnasty","description":"Local-first knowledge system that turns notes, files, and AI chats into durable memory.","archived":false,"fork":false,"pushed_at":"2026-04-18T18:14:50.000Z","size":8398,"stargazers_count":6,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-18T23:02:52.319Z","etag":null,"topics":["agent","ai","ai-assistant","knowledge-graph","knowledge-management","local-first","markdown","memory-system","personal-knowledge-system","rag","second-brain","semantic-search"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Szesnasty.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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-04-12T21:32:36.000Z","updated_at":"2026-04-18T18:13:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Szesnasty/Jarvis","commit_stats":null,"previous_names":["szesnasty/jarvis"],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/Szesnasty/Jarvis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Szesnasty%2FJarvis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Szesnasty%2FJarvis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Szesnasty%2FJarvis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Szesnasty%2FJarvis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Szesnasty","download_url":"https://codeload.github.com/Szesnasty/Jarvis/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Szesnasty%2FJarvis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32236744,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: 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":["agent","ai","ai-assistant","knowledge-graph","knowledge-management","local-first","markdown","memory-system","personal-knowledge-system","rag","second-brain","semantic-search"],"created_at":"2026-04-17T22:08:56.238Z","updated_at":"2026-04-24T19:00:39.987Z","avatar_url":"https://github.com/Szesnasty.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jarvis\n\n[![CI](https://github.com/Szesnasty/Jarvis/actions/workflows/ci.yml/badge.svg)](https://github.com/Szesnasty/Jarvis/actions/workflows/ci.yml)\n[![CodeQL](https://github.com/Szesnasty/Jarvis/actions/workflows/codeql.yml/badge.svg)](https://github.com/Szesnasty/Jarvis/actions/workflows/codeql.yml)\n[![Release](https://img.shields.io/github/v/release/Szesnasty/Jarvis?include_prereleases\u0026label=version)](https://github.com/Szesnasty/Jarvis/releases)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n\n\u003csub\u003eBuilt by [Łukasz Jakubowski](https://github.com/Szesnasty) \u0026 [Jakub Suplicki](https://github.com/jakubsuplicki) · Apache-2.0\u003c/sub\u003e\n\n**An AI workspace that remembers what matters.**\n\nLocal-first memory, hybrid retrieval, and durable context.\nRun Jarvis on your machine with Ollama or connect your preferred cloud provider.\nEvery useful interaction makes the system better over time.\n\nJarvis helps you:\n- import notes, files, URLs, and YouTube sources into one memory system\n- retrieve context through keyword, semantic, and graph search\n- turn useful outputs into reusable notes, plans, and summaries\n- run locally with Ollama or connect Anthropic, OpenAI, or Google\n- create specialists and structured debates on top of your memory\n\n\u003e **Jarvis is not another AI chat with memory.**\n\u003e **It is a personal knowledge system that gets more useful every time you use it.**\n\n![Jarvis hero](./docs/assets/hero.png)\n\n---\n\n## In one sentence\n\nJarvis is a local-first personal knowledge system that retrieves from your notes, reasons with AI, and writes useful results back into memory.\n\n---\n\n## Why this exists\n\nKnowledge work is fragmented. Ideas live in notes. Context lives in files. Research lives in links. Decisions disappear into chat history. Useful AI outputs vanish after the session ends.\n\nThat creates real costs:\n- repeated thinking\n- lost context\n- higher AI spend rebuilding context over and over\n- no compounding value from what you already know\n\nJarvis fixes the loop: **input → retrieve → reason → write back → better retrieval next time.**\n\n---\n\n## Run it your way\n\n### Local mode — private, on-device, no API key required\n\nUse [Ollama](https://ollama.com) and downloadable models directly on your computer. Your data and your model stay on your machine.\n\n### Cloud mode — bring your own provider\n\nUse Anthropic, OpenAI, or Google via API key. Access the most capable models when you need them.\n\n### Hybrid mode — mix local and cloud\n\nUse local models for everyday work and switch to cloud for heavier tasks. Change providers per conversation from Settings.\n\n---\n\n## Local models you can start with\n\nJarvis includes 7 curated model presets that run through Ollama. It recommends models based on your hardware and lets you download, switch, and manage them directly from Settings.\n\n| Preset | Model | Best for |\n|---|---|---|\n| **Fast** | Qwen3 1.7B | Weakest laptops, quick local chat |\n| **Everyday** | Qwen3 4B | Lightweight everyday use |\n| **Balanced** | Qwen3 8B | Best default for most users |\n| **Long Docs** | Ministral 3 8B | Long documents, larger context windows |\n| **Reasoning** | Gemma 4 E4B | Stronger reasoning on better hardware |\n| **Code** | Devstral Small 2 24B | Repo work and multi-file edits |\n| **Best Local** | Gemma 4 27B | Best quality, complex tasks |\n\nStart with **Qwen3 8B** if you want the safest default. You can add cloud providers later in Settings.\n\n---\n\n## Why local mode matters\n\n- No API key required — start using Jarvis immediately\n- Private in local mode — prompts and memory stay on your machine\n- Lower recurring cost — no per-token charges\n- Good fit for memory-heavy workflows — retrieval runs locally too\n- Great for notes, documents, planning, and retrieval\n\n---\n\n## What makes Jarvis different\n\n### Your memory belongs to you\nLocal Markdown files are the source of truth. Not a proprietary memory layer. Not a database you can't read.\n\n### Retrieval before reasoning — the real moat\nMost AI apps send your whole prompt to a model and pay for every token. Jarvis does the expensive work locally first, then sends only a small, high-signal context to the model. Fewer tokens, lower cost, better answers.\n\n```mermaid\nflowchart LR\n    Q[Your question] --\u003e BM25[BM25\u003cbr/\u003ekeyword]\n    Q --\u003e SEM[Semantic\u003cbr/\u003eembeddings]\n    Q --\u003e GRAPH[Graph\u003cbr/\u003eexpansion]\n    BM25 --\u003e RANK[Hybrid ranking]\n    SEM --\u003e RANK\n    GRAPH --\u003e RANK\n    RANK --\u003e COMP[Context\u003cbr/\u003ecompression]\n    COMP --\u003e MODEL[LLM\u003cbr/\u003elocal or cloud]\n    MODEL --\u003e OUT[Answer +\u003cbr/\u003ewrite-back to memory]\n    OUT -. ingest-time .-\u003e CONNECT[Smart Connect\u003cbr/\u003eper-note linking]\n    CONNECT --\u003e GRAPH\n```\n\nAll steps before the model run on your machine. The LLM sees only the distilled context — not your entire workspace. New notes are auto-linked at ingest time by Smart Connect, so the graph keeps growing without a global rebuild.\n\n### A real knowledge graph\nNotes, people, projects, places, and sources are connected through a graph that is part of retrieval and reasoning — not just a visualization. Every new note is linked at ingest time using cheap local signals (BM25, embeddings, alias matches, shared sources/batches), with user review for promote / dismiss in the memory page.\n\n### Local or cloud — your choice\nRun fully local with Ollama and downloadable models, or connect Anthropic, OpenAI, or Google via API key. Switch between local and cloud per conversation. No vendor lock-in.\n\n### Specialists from the UI\nCreate reusable roles — Weekly Planner, Health Guide, Study Coach, Research Assistant — directly from the interface. No prompt engineering required.\n\n### Duel Mode\nPick a topic, pick two specialists. They debate. Jarvis judges. The outcome is saved back into memory. Structured argumentation that produces reusable outputs.\n\n### Web search\nWhen local memory isn't enough, Jarvis searches the web via DuckDuckGo — no extra API keys needed.\n\n### Write-back by design\nUseful outputs become notes, summaries, plans, graph links, and durable context. Every useful interaction makes the system better.\n\n### Obsidian-compatible\nYour `Jarvis/memory/` folder works as a valid Obsidian vault — plain Markdown, YAML frontmatter, wiki-links, human-readable structure.\n\n### MCP server — Jarvis as local memory for every AI tool\n\nJarvis includes a built-in **Model Context Protocol (MCP) server** with **26 tools over stdio** (23 read-only + 3 opt-in writes), so any MCP-aware client can use your workspace as a shared memory backend — including **Claude Desktop, Cursor, VS Code Copilot, Continue**, and more.\n\nSee the full tool catalogue — what each tool does and what you gain — in [`docs/features/mcp-server/tools.md`](./docs/features/mcp-server/tools.md).\n\nWhy this matters:\n- **Token savings** — retrieval runs locally on your machine first (BM25 + semantic + graph), so cloud models receive only a smaller, higher-signal context.\n- **One memory, many tools** — use the same notes, plans, summaries, and graph context from Jarvis itself or from external AI tools.\n- **Local-first by default** — the MCP server runs on your machine over stdio; your workspace stays local unless you choose a cloud model for reasoning.\n- **Spend control** — tools are tagged by cost class (`free`, `cheap`, `standard`, `premium`) so you can cap usage per session.\n- **Easy setup** — Jarvis provides ready-to-paste JSON config snippets for supported MCP clients in **Settings → MCP**.\n\n\u003e **Jarvis becomes the local brain. Your favorite AI app becomes the interface.**\n\n### Agent rules — make your AI client use Jarvis tools correctly\n\nJarvis ships with a ready-to-use **agent rules file** ([`docs/jarvis-agent-rules.mdc`](./docs/jarvis-agent-rules.mdc)) that teaches your AI client how to route questions to the right `jarvis_*` MCP tools, format answers, and avoid redundant calls.\n\n**Copy it into your project:**\n\n| Client | Where to place |\n|---|---|\n| **Cursor** | `.cursor/rules/jarvis.mdc` |\n| **Claude Code** | `.claude/instructions.md` (paste contents) |\n| **VS Code Copilot** | `.github/copilot-instructions.md` (paste contents) |\n\nThe file is open — use it as-is or adapt it to your workflow.\n\n---\n\n## What's working now\n\n**Core**\n- Browser-based UI — chat, memory browser, graph view, settings\n- Local workspace with Markdown memory (Obsidian-compatible)\n- File, URL, and YouTube ingest (including PDF) — all through the UI\n- Hybrid retrieval: BM25 + semantic + graph scoring\n- Local embeddings via fastembed (multilingual, no API calls)\n- Interactive D3 graph visualization\n- Session-to-memory write-back with graph updates\n- Token tracking with budget controls\n\n**Models**\n- **Local via Ollama** — 7 curated presets, no API key required\n- **Hardware-aware recommendations** based on your RAM, disk, and GPU\n- Download, switch, and manage models from Settings\n- **Cloud providers** — Anthropic, OpenAI, Google via API key\n- Switch local ↔ cloud per conversation\n\n**Power features**\n- Specialist system with full UI wizard\n- Duel Mode — round-based debate with scored verdict\n- Web search via DuckDuckGo (no extra API key)\n- **Built-in MCP server (26 tools over stdio)** \\u2014 use Jarvis memory from Claude Desktop, Cursor, VS Code Copilot, Continue, and other MCP-aware clients ([full tool list](./docs/features/mcp-server/tools.md))\n\n**Coming next:** stronger feedback loops, smarter graph enrichment, Council Mode, voice (once quality is reliable).\n\n---\n\n## How it works in practice\n\n**Imported:** project notes, 2 URLs, 1 YouTube video.\n\n**Asked Jarvis:** *\"What should we do next?\"*\n\n**Jarvis:**\n1. Retrieved relevant notes from memory (BM25 + embeddings)\n2. Expanded context through graph links\n3. Ranked and compressed candidates\n4. Produced a practical plan via Claude\n5. Saved the result to `memory/plans/`\n6. Updated graph relationships for future use\n\n**Result:** not just a better answer — a better system after the answer.\n\n---\n\n## Interface\n\nJarvis can be powered by cloud providers or run fully locally with downloadable models.\n\n### Chat — your memory-aware assistant\nAsk questions, get answers grounded in your own notes. Context is retrieved automatically — you just talk.\n![Chat](./docs/assets/chat.png)\n\n### Memory — browse and manage your knowledge\nAll your notes in one place. Search, filter by folder, edit inline. Everything is plain Markdown — open it in Obsidian anytime.\n![Memory](./docs/assets/memory.png)\n\n### Graph — see how your knowledge connects\nPeople, projects, topics, and sources linked visually. Click any node to explore. The graph isn't decoration — it powers retrieval.\n![Graph](./docs/assets/graph.png)\n\n### Specialists — custom roles, no code required\nCreate focused advisors with their own knowledge, rules, and style. A Growth Strategist thinks differently than an Operations Advisor — and that's the point.\n![Specialists](./docs/assets/specialists.png)\n\n### Duel Mode — structured debate that produces decisions\nTwo specialists argue. Jarvis judges. The verdict, scores, and action items are saved to memory. Turn hard decisions into documented reasoning.\n![Duel](./docs/assets/duel.png)\n\n### Settings — your setup, your control\nAPI keys, model selection, token budgets, workspace path. Everything stays local.\n![Settings](./docs/assets/settings.png)\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eWhy this is not ChatGPT, NotebookLM, or Obsidian\u003c/strong\u003e\u003c/summary\u003e\n\n| Tool | What it does well | Where Jarvis differs |\n|---|---|---|\n| **ChatGPT** | Great general AI assistant | Jarvis writes outputs back into structured, local memory |\n| **NotebookLM** | Source-grounded research | Jarvis turns sources into a living memory + graph + specialist system |\n| **Obsidian** | Local note-taking and vault management | Jarvis adds retrieval, reasoning, specialists, graph-aware context, and write-back |\n\n**Jarvis is the layer that turns information into working memory.**\n\n\u003c/details\u003e\n\n---\n\n## Quick start\n\n### 1. One command — everything handled\n\nRequirements: **Node.js 20+** and **Python 3.12 or 3.13**.\nDon't have them? Jump to [zero-prereq bootstrap](#zero-prereq-bootstrap).\n\n```bash\ngit clone https://github.com/Szesnasty/Jarvis.git\ncd Jarvis\nnpm run wake-up-jarvis\n```\n\nThat single command runs preflight checks, installs backend + frontend dependencies, builds the production bundle, and starts both servers.\n\nThen open **http://localhost:3000**. On first run, Jarvis walks you through a short onboarding and **creates your `~/Jarvis/` workspace** (memory, graph, sessions, config) at the location you pick. You land in a browser UI where you can pick local or cloud models and start importing memory immediately.\n\nFrom there, drag files, paste URLs, or add YouTube links **directly from the UI** — everything ingested lands in your local Markdown memory and goes straight into retrieval.\n\n\u003e Aliases: `npm run wake`, `npm start`. Stop with **Ctrl+C**.\n\n### 2. Choose how to run it\n\n#### Local mode — no API key\n\n1. Install [Ollama](https://ollama.com) and start it\n2. Open Settings in Jarvis → go to Local Models\n3. Pick a model preset and click Pull to download it\n4. Select the model as active and start chatting\n\nNo API key needed. Everything runs on your machine.\n\n#### Cloud mode\n\n1. Get an API key from [Anthropic](https://console.anthropic.com), [OpenAI](https://platform.openai.com/api-keys), or [Google AI](https://aistudio.google.com/apikey)\n2. Open Settings in Jarvis → paste your API key\n3. Select your preferred model and start chatting\n\nBoth options are first-class. You can switch between them anytime.\n\n### 3. (Optional) Connect Jarvis to Claude Desktop, Cursor, or VS Code\n\nJarvis exposes a local **MCP server** so external AI tools can read from and write to your workspace memory. External clients can search your memory, read notes, create new notes, and reuse graph-linked context without leaving their own interface.\n\n1. Open **Settings → MCP** in Jarvis\n2. Enable the MCP server\n3. Copy the generated JSON snippet for your client:\n   - **Claude Desktop** → `claude_desktop_config.json`\n   - **Cursor** → `~/.cursor/mcp.json`\n   - **VS Code Copilot** → `.vscode/mcp.json`\n   - **Continue** → `~/.continue/config.json`\n4. Restart the client\n\nJarvis tools for memory search, note read/write, graph access, and sessions will then be available inside that client.\n\nFull docs and client-specific examples: [`docs/features/mcp-server/`](./docs/features/mcp-server/).\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eZero-prereq bootstrap\u003c/strong\u003e\u003c/summary\u003e\n\nRecommended if you don't have Node.js or Python installed.\n\n**macOS / Linux:**\n```bash\nbash ./bootstrap/install.sh\n```\n\n**Windows (PowerShell):**\n```powershell\npowershell -ExecutionPolicy Bypass -File .\\bootstrap\\install.ps1\n```\n\nScripts ask for confirmation before downloading local runtimes, then run the same `wake-up-jarvis` flow.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAlready installed? Just run it\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\nnpm run serve\n```\n\nStarts both servers without reinstalling. Dev mode with HMR:\n\n```bash\nnpm run dev\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAll commands\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Preflight\nnpm run preflight          # check versions, no side effects\n\n# Install\nnpm run install:all        # backend + frontend\nnpm run install:backend    # backend only\nnpm run install:frontend   # frontend only\n\n# Production\nnpm run wake-up-jarvis     # preflight + install + build + serve\nnpm run wake               # alias\nnpm start                  # alias\nnpm run build              # nuxt build → frontend/.output\nnpm run serve              # serve both servers\nnpm run serve:backend      # backend only (uvicorn)\nnpm run serve:frontend     # frontend only\n\n# Development\nnpm run dev                # HMR frontend + auto-reload backend\nnpm run dev:backend        # uvicorn --reload\nnpm run dev:frontend       # nuxt dev\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eTroubleshooting\u003c/strong\u003e\u003c/summary\u003e\n\n#### Any platform\n- **Port 8000 or 3000 in use** — find and stop the other process (`lsof -i :8000` on macOS/Linux)\n- **Broken venv** — delete `backend/.venv` and re-run `npm run wake-up-jarvis`\n\n#### Windows\n- **Install looks stuck during venv creation** — antivirus scanning. Give it 2–5 minutes. Don't Ctrl+C.\n- **Too slow?** Add Windows Defender exclusion for `backend\\.venv`\n- **Scripts disabled** — use `powershell -ExecutionPolicy Bypass -File \\.\\bootstrap\\install.ps1`\n\n#### macOS\n- **\"xcrun: error\"** — run `xcode-select --install`\n- **Python 3.14+** — not yet supported. Use 3.12 or 3.13.\n\n\u003c/details\u003e\n\n---\n\n## Architecture\n\n### Source of truth doctrine\n\n- `Jarvis/memory/` Markdown files = canonical\n- SQLite = operational index/cache (rebuildable)\n- Graph = derived relationship layer (rebuildable)\n- Embeddings = derived semantic layer (rebuildable)\n\nIf you delete everything except `memory/`, the system rebuilds itself.\n\n### User workspace (created on first run)\n\nWhen you create a workspace in the app, Jarvis generates this structure at your chosen location (default: `~/Jarvis/`).\nThis is **not** the source code — it's your personal data directory.\n\n```\n~/Jarvis/\n├── app/\n│   ├── config.json        # metadata + flags\n│   ├── sessions/          # chat session history (JSON)\n│   ├── cache/             # retrieval cache\n│   ├── logs/              # token usage logs\n│   ├── audio/             # voice recordings\n│   └── jarvis.db          # SQLite operational DB\n├── memory/\n│   ├── inbox/             # quick captures\n│   ├── daily/             # daily notes\n│   ├── projects/          # project notes\n│   ├── people/            # people notes\n│   ├── areas/             # life areas\n│   ├── plans/             # plans \u0026 checklists\n│   ├── summaries/         # AI-generated summaries\n│   ├── knowledge/         # imported sources\n│   ├── preferences/       # user rules\n│   ├── examples/          # good output examples\n│   ├── conversations/     # saved chat sessions (auto-created)\n│   └── attachments/       # files, PDFs\n├── graph/\n│   └── graph.json         # knowledge graph data\n└── agents/                # specialist definitions (JSON)\n```\n\n### Retrieval pipeline\n\nFull diagram in [Retrieval before reasoning](#retrieval-before-reasoning--the-real-moat) above. In short: BM25 + semantic + graph run locally, hybrid-rank, compress, and only then hit the model.\n\n---\n\n## Design principles\n\n- Local-first — all data on your machine\n- Memory belongs to the user — Markdown, not a proprietary layer\n- Derived layers (SQLite, graph, embeddings) must be rebuildable\n- Retrieval gets smarter before prompts get bigger\n- Useful outputs write back into the system\n- Every interaction should make the next one better\n\n---\n\n## Who this is for\n\nFounders. Researchers. Builders. Students. Knowledge workers.\nAnyone who thinks in notes and wants continuity, not just output.\n\n\u003e *\"I don't need another answer. I need a system that helps me stop losing context.\"*\n\n**Who Jarvis is not for:** if you only want a generic chatbot with no durable memory, this is probably more system than you need. Jarvis is built for people who already work with notes, documents, and recurring context — and want that context to compound over time.\n\n---\n\n## Contributing\n\nContributions welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for details.\n\nStrong areas: retrieval quality, graph UX, specialist templates, ingest pipelines, local model support, Obsidian workflows, onboarding polish.\n\nOpen an issue or send a PR.\n\n---\n\n## Contributors\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Szesnasty\"\u003e\u003cimg src=\"https://github.com/Szesnasty.png\" width=\"80\" style=\"border-radius:50%;\" /\u003e\u003cbr /\u003e\u003cb\u003eŁukasz Jakubowski\u003c/b\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/jakubsuplicki\"\u003e\u003cimg src=\"https://github.com/jakubsuplicki.png\" width=\"80\" style=\"border-radius:50%;\" /\u003e\u003cbr /\u003e\u003cb\u003eJakub Suplicki\u003c/b\u003e\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n## Security\n\nFound a vulnerability? See [SECURITY.md](SECURITY.md) for responsible disclosure guidelines. Do not open a public issue.\n\n---\n\n## License\n\nThis project is licensed under the [Apache License 2.0](LICENSE).\n\n---\n\n## Code of Conduct\n\nThis project follows the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code.\n\n---\n\n## Repository structure\n\n```\njarvis/\n├── backend/            # FastAPI + SQLite + LiteLLM\n│   ├── models/         # Pydantic schemas, DB setup\n│   ├── routers/        # API endpoints (chat, memory, graph, specialists…)\n│   ├── services/       # Core logic (retrieval, graph, embeddings, ingest…)\n│   ├── mcp_server/     # Built-in MCP server (stdio)\n│   ├── tests/          # pytest suite\n│   └── utils/          # Markdown parsing helpers\n├── frontend/           # Nuxt 4 + Vue 3 + TypeScript\n│   ├── app/\n│   │   ├── components/ # UI components\n│   │   ├── composables/# State \u0026 logic (chat, duel, graph, voice…)\n│   │   └── pages/      # main, memory, graph, specialists, settings…\n│   └── tests/          # vitest suite\n├── bootstrap/          # Zero-prereq installers (local runtime download)\n├── scripts/            # Cross-platform Node launchers\n└── docs/               # Project documentation\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fszesnasty%2Fjarvis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fszesnasty%2Fjarvis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fszesnasty%2Fjarvis/lists"}