[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80285":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":14,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":13,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":22,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":15,"starSnapshotCount":15,"syncStatus":16,"lastSyncTime":32,"discoverSource":33},80285,"aithy","dosco\u002Faithy","dosco","A personal AI agent that can work safely on your machine, remember useful context, and keep its data under your control.","https:\u002F\u002Faithy.dev",null,"TypeScript",87,3,1,0,2,6,1.81,"Apache License 2.0",false,"main",true,[24,25,26,27,28],"ai","ai-agent","llm","local-ai","personal-ai","2026-06-12 02:04:00","# Aithy\n\n```text\n      ..:::::..\n   .:+#########+:.\n  :###=:....:=###:\n .##+  AITHY   +##.\n :##  local AI  ##:\n .##+  \u002F\u002F\u002F\u002F\u002F\u002F  +##.\n  :###=::::=###:\n   .:+#####:+.\n      ':::'\n```\n\nAithy is a private local AI runtime: easy to run, inspectable in the browser, and ready for local models, cloud providers, eligible Grok subscriptions, and Mesh-shared home GPUs.\n\nIt is pronounced **ay-thee**. It is named after my cat.\n\nAithy is useful as a personal agent today, but it is also built for the messy place where agent research becomes real software: durable sessions, sandboxed tools, local inference, retrieval, memory, skills, background work, and multiple supervised services running together in an inspectable local product.\n\n## Why Aithy\n\n- **Run it locally.** Start Aithy, open the browser control surface, and use an inspectable agent workspace without wiring an agent framework by hand.\n- **Use the models you already have.** Choose managed local `llama.cpp` models, normal cloud\u002FAPI providers, custom OpenAI-compatible endpoints, or an eligible Grok subscription.\n- **Make your Grok subscription useful.** Grok subscription sign-in can power chat and `web.search` without pasting an API key into Aithy. For people who already pay for Grok, that can avoid setting up separate per-token API-key billing for supported usage, subject to xAI eligibility and limits.\n- **Share a stronger machine.** Pair Aithy on your laptop with Aithy on a GPU box over LAN Mesh, then use validated family inference\u002Fsearch services without copying secrets around.\n- **Keep the agent visible.** Sessions, memory, skills, attentions, artifacts, usage, permissions, training-data capture, sandbox state, and runtime services are part of the product, not hidden logs. Chat shows calm working status, inline artifacts, and explicit approval bubbles while work is happening.\n\n## Quick Start\n\n### Download a build\n\nDownload the latest packaged build from [GitHub Releases](https:\u002F\u002Fgithub.com\u002Fdosco\u002Faithy\u002Freleases\u002Flatest), choose the archive for your OS, unpack it, and run Aithy:\n\n```bash\ngh release download --repo dosco\u002Faithy --pattern 'aithy-*-darwin-arm64.tar.gz'\ntar -xzf aithy-*-darwin-arm64.tar.gz\ncd aithy-*-darwin-arm64\n.\u002Faithy\n```\n\nOpen `http:\u002F\u002F127.0.0.1:3000`. Use `--host` and `--port` if you want a different bind address.\n\nRelease archives are named by platform:\n\n- `aithy-v*-darwin-arm64.tar.gz` for Apple Silicon Macs.\n- `aithy-v*-linux-x64-gnu.tar.gz` for Linux x64.\n- `aithy-v*-linux-arm64-gnu.tar.gz` for Linux ARM64.\n\nIntel Mac and Windows archives are not published yet because the packaged sandbox runtime is not available for those targets.\n\n### Start from code\n\nUse this path if you want to run from the repo, hack on Aithy, or follow the code as it changes. You need [Bun](https:\u002F\u002Fbun.sh\u002F) 1.3.14 or newer.\n\n```bash\nbun install\nbun run start\n```\n\nThe welcome screen walks through your profile, provider, model, key or sign-in flow, sandbox settings, and local inference options.\n\nLocal state lives at `~\u002F.config\u002Faithy\u002Fdefault\u002F` by default. Use the web UI and persisted settings for provider-scoped model profiles, search profiles, secrets, sandbox settings, Mesh, and local inference.\n\nEvery Aithy is a full Aithy. There is no separate inference-only daemon: to share a GPU box with laptops on the same LAN, run Aithy on each machine, open Mesh, pair them, and mark the relationship level you actually trust.\n\n## Packaged Releases\n\nPushing a `v*` tag runs the GitHub Actions release flow. It checks the repo, builds the production web app, packages supported portable archives, smoke-tests the Linux x64 package, and attaches archives plus SHA-256 checksums to the GitHub release.\n\nEach archive contains one pinned Bun runtime, bundled app JavaScript, built client assets, a target-specific native vendor slice, and external worker bundles only for sandbox and local inference. The packaged `aithy` command runs the web runtime, queue service, and agent\u002Fbackground queues inside one coordinator process while keeping `sandbox-worker` and `local-inference-worker` as supervised child processes.\n\n## Screenshots\n\nThese light-mode screenshots are captured from the real app with a disposable local profile, demo-safe runtime and usage records, and no real credentials.\n\n\u003Cp>\n  \u003Cimg src=\"screenshots\u002Flight\u002F00-chat-hero-light.png\" alt=\"Aithy chat workspace with visible tool evidence\" width=\"1000\">\n\u003C\u002Fp>\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd>\u003Cimg src=\"screenshots\u002Flight\u002F01-chat-workspace-haiku-hash-light.png\" alt=\"Aithy chat workspace with tool output\" width=\"280\">\u003Cbr>\u003Csub>Chat with tools, files, and visible runtime evidence\u003C\u002Fsub>\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"screenshots\u002Flight\u002F09-inference-settings-light.png\" alt=\"Aithy inference settings\" width=\"280\">\u003Cbr>\u003Csub>Choose local, cloud, Grok, or family model sources\u003C\u002Fsub>\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"screenshots\u002Flight\u002F10-local-inference-light.png\" alt=\"Local inference settings\" width=\"280\">\u003Cbr>\u003Csub>Run chat, embeddings, reranking, and retrieval locally\u003C\u002Fsub>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>\u003Cimg src=\"screenshots\u002Flight\u002F11-xai-oauth-light.png\" alt=\"xAI Grok subscription OAuth\" width=\"280\">\u003Cbr>\u003Csub>Use Grok subscription sign-in without an API key paste\u003C\u002Fsub>\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"screenshots\u002Flight\u002F08-mesh-pairing-light.png\" alt=\"Aithy Mesh page\" width=\"280\">\u003Cbr>\u003Csub>Pair local Aithys and share trusted services\u003C\u002Fsub>\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"screenshots\u002Flight\u002F02-console-runtime-overview-light.png\" alt=\"Runtime console\" width=\"280\">\u003Cbr>\u003Csub>Watch services, queues, jobs, and logs\u003C\u002Fsub>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>\u003Cimg src=\"screenshots\u002Flight\u002F05-usage-analytics-light.png\" alt=\"Usage tracking dashboard\" width=\"280\">\u003Cbr>\u003Csub>See model recommendations by task component\u003C\u002Fsub>\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"screenshots\u002Flight\u002F04-skills-library-light.png\" alt=\"Skills gallery\" width=\"280\">\u003Cbr>\u003Csub>Teach repeatable workflows and reusable abilities\u003C\u002Fsub>\u003C\u002Ftd>\n    \u003Ctd>\u003Cimg src=\"screenshots\u002Flight\u002F03-themes-palette-list-light.png\" alt=\"Theme gallery\" width=\"280\">\u003Cbr>\u003Csub>Tune the surface without changing the agent\u003C\u002Fsub>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## Use the Models You Already Have\n\nAithy lets the model source be a runtime choice instead of a project rewrite.\n\n```mermaid\nflowchart LR\n  User[\"You\"] --> UI[\"Aithy browser control surface\"]\n  UI --> Source{\"Model source\"}\n  Source --> Local[\"This Aithy: managed llama.cpp\"]\n  Source --> Grok[\"This Aithy: eligible Grok subscription\"]\n  Source --> Cloud[\"This Aithy: cloud\u002FAPI provider\"]\n  Source --> Family[\"Family Aithy over Mesh\"]\n  Local --> Agent[\"Agent pipeline\"]\n  Grok --> Agent\n  Cloud --> Agent\n  Family --> Agent\n```\n\nLocal inference uses a managed `llama.cpp` `llama-server` release pinned in `package.json`, with Qwen GGUF chat models plus local Qwen embedding and reranker models. A saved path to your own compatible `llama-server` can be used instead.\n\nIf the Runtime Console shows `local-inference-worker` as `DEGRADED`, the local router for local chat, memory embeddings, or reranking is unavailable or recovering. Cloud-provider chat can still work when Local is not selected, and the console shows the current error plus any automatic retry countdown.\n\nThe Grok subscription provider uses OAuth\u002FPKCE sign-in. Tokens stay in local Aithy secrets, and the connected provider can be used for chat and `web.search` when the subscription is eligible for the underlying xAI access.\n\n## Share Inference With Mesh\n\nAithy Mesh is for the home-lab shape a lot of local AI users already have: a laptop where you work, and a stronger machine somewhere nearby.\n\n```mermaid\nflowchart LR\n  Laptop[\"Laptop Aithy\"] --> Pair[\"Explicit pairing\"]\n  Gpu[\"GPU-box Aithy\"] --> Pair\n  Pair --> Trust[\"Mutual family trust\"]\n  Trust --> Catalog[\"Live validated service catalog\"]\n  Laptop --> Proxy[\"Local OpenAI-compatible proxy\"]\n  Proxy --> Rpc[\"Pinned TLS \u002F HTTP3 mesh RPC\"]\n  Rpc --> Gpu\n  Gpu --> Services[\"Local, cloud, Grok, search services\"]\n```\n\nMesh discovery is LAN-only. It advertises identity and connection metadata, not model lists, provider URLs, API keys, prompts, sessions, memories, or service catalogs. Family catalogs are live RPC calls, only mutual `family` peers can return them, and shared providers are never recursively re-shared.\n\n## Built for Real Agent Work\n\nAithy is not just a chat box with a pile of tools. It treats the agent as a local runtime system.\n\n```mermaid\nflowchart TD\n  Browser[\"Browser UI\"] --> Web[\"web runtime\"]\n  Web --> Queue[\"queue-service\"]\n  Queue --> Agent[\"agent-worker\"]\n  Queue --> Sandbox[\"sandbox-worker\"]\n  Queue --> Local[\"local-inference-worker\"]\n  Agent --> SQLite[\"SQLite state\"]\n  Sandbox --> Workspace[\"sandbox workspace\"]\n  Local --> Llama[\"llama.cpp router\"]\n  Local --> SQLite\n  Agent --> Artifacts[\"artifacts and outbox\"]\n```\n\nThe runtime services are `web`, `queue-service`, `agent-worker`, `sandbox-worker`, and `local-inference-worker`. In source\u002Fdev mode they run as separate supervised processes. In packaged releases, `web`, `queue-service`, and `agent-worker` share the coordinator process, while sandbox and local inference stay outside that process for native dependency and safety boundaries.\n\nUnder the hood, Aithy uses Ax and Ax Agent with an RLM-style, DSPy-inspired flow: context distillation, JavaScript runtime execution, and final response generation. Deterministic work such as parsing, filtering, sorting, deduping, retrieval orchestration, and tool routing can happen in code while the model focuses on language, judgment, and response quality.\n\nMCP fits this shape naturally. Tools can become callable runtime functions instead of being stuffed into every model prompt, which gives Aithy room to grow without turning context into a junk drawer.\n\n## Memory, Skills, Dreams, and Attentions\n\nAithy keeps durable conversation history and separate durable memory for facts worth keeping. Memories are typed by subject (`user`, `project`, or `agent`), scope (`global`, `workspace`, or `session`), and guidance strength (`context` or `standing_request`). Agent memories are operational lessons and failure modes only; they are advisory context and cannot change tool policy, sandbox boundaries, or permissions. Every chat turn performs deterministic first-turn recall before the agent starts: exact lexical anchors such as paths, filenames, commands, quoted text, and error codes are searched with SQLite FTS, semantic sqlite-vec candidates fill in fuzzy recall across memories and episodes, and local reranking is the final ordering authority when available. The agent sees only a small evidence pack, not every retrieved candidate, and workspace\u002Fsession scoped memories are recalled only in matching contexts.\n\nWrites to memories, episodes, and skills queue targeted local embedding immediately, while startup and periodic backfill stay in place as a safety net if the local inference worker was offline. Agent-triggered recall uses the same combined retrieval coordinator as pre-recall, and tool details include compact diagnostics for FTS candidates, vector candidates, fused candidates, reranker state, fallback errors, and latency. The Local Inference page shows retrieval health for memory rows, episode rows, and semantic skill chunks, plus the last targeted index and backfill times.\n\nDreams turn completed work into searchable episodes with task, approach, outcome, notes, tools, errors, artifacts, and evidence. Actionable dream notes can also become scoped operational agent memories so future turns can reuse lessons without treating them as user facts. Transcript recall can surface small raw snippets from prior messages, tool calls, and artifact metadata when exact evidence matters. Skills capture reusable workflows, including Claude-style skill folders and portable `SKILL.md` bundles with supporting files; skill cards, bodies, and attached files are chunked for semantic indexing and reranked discovery, while exact skill ids and names still take precedence. Attentions are ongoing reminders, briefings, watches, and tasks that need to come back later.\n\nAithy ships a source-managed built-in skills catalog for sandbox work: Docling conversion, OCR, PDF repair\u002Fassembly\u002Foptimization, media inspection\u002Fextraction, spreadsheet and CSV cleanup, web\u002Ftable extraction, downloads, and artifact packaging. Built-ins are read-only, can be disabled without deletion, and can be duplicated into normal editable user skills.\n\n## Built for Trust\n\nAithy is local-first by default. State, sessions, memories, skills, settings, usage, opt-in training traces, runtime status, and Mesh peer records live under your Aithy config directory unless you deliberately point them elsewhere.\n\n- Microsandbox mode runs agent commands in a Linux sandbox.\n- Host files are exposed through explicit attachments or mounts.\n- User-facing files are published from `\u002Foutbox\u002F\u003Csession>\u002F\u003Crun>` and can be found later by filename in the same chat.\n- Optional host shell access goes through permission prompts.\n- Permission decisions can become scoped capability rules.\n- Slash commands such as `\u002Fhelp`, `\u002Fskills`, and `\u002Fsession` are routed before they reach the agent.\n- Non-secret provider settings live in SQLite; credentials live in Bun secrets under Aithy-prefixed names.\n- Provider profiles are validated against URL, model or mode, and credential version before being marked valid.\n- Mesh TLS private keys stay in local secrets, paired certificate pins live in SQLite, and provider API keys are never sent to peers.\n- Mesh RPC uses pinned TLS with HTTP\u002F3 preferred and pinned HTTPS fallback.\n- Mesh service access requires mutual `family` trust, live catalog authorization, and a current model\u002Fservice allowlist match.\n- Usage capture records provider, model, token, cache, purpose, component, stage, and run details for visibility.\n- Usage Advisor compares observed models per component with token efficiency, sample confidence, and task outcomes when available; it is advisory and never switches models automatically.\n- Settings -> Data controls opt-in training-data capture. Captured traces can include prompts, assistant replies, tool outputs, model usage, and provider request identifiers.\n- The Usage page can export local SFT JSONL from captured traces and delete captured training data. Live DPO capture is deferred because replaying agent actions can have side effects.\n- The notification bell lights up for active help requests, such as approvals, clarifications, retryable chat failures, or automations that need input. Old unread informational notes stay in the inbox without keeping the top indicator lit.\n\nThe agent can be powerful, but it should not be mysterious. Aithy is designed so you can see what is happening, approve risky actions, and keep local state under your control.\n\n## Commands\n\nShared slash commands are handled before a message reaches the agent:\n\n- `\u002Fhelp` lists commands.\n- `\u002Fskills` opens the skills selector.\n- `\u002Fsession` shows the current session.\n- `\u002Fsession \u003Cid | \"name\">` switches by id or quoted name, creating the session if needed.\n\n## Development\n\n```bash\nbun run check               # line budget + typecheck + tests\nbun test                    # full test suite\nbun run check:lines         # 500-line file limit\nbun run debug               # list SQLite tables\nbun run debug \u003Ctable> \u003Cid>  # inspect a table\nbun run memory \u003Csession-id> # reprocess a session\n```\n\n### Sandbox Images\n\nAithy ships two built-in Microsandbox images. `aithy-sandbox` is the default full document and media image with `bash`, Docling, Poppler, Ghostscript, qpdf, Tesseract English OCR, Noto and Noto CJK fonts, ffmpeg\u002Fffprobe, mediainfo, libsndfile, Python 3.13 with pip and virtualenv, common Python data\u002Fweb libraries, and basic download\u002Farchive tools. It pins CPU-only Torch dependencies for Docling so the image does not accidentally pull CUDA\u002FNVIDIA packages. `aithy-sandbox-lite` is a smaller core Python shell image with bash, coreutils, CA certificates, curl\u002Fwget, Python, pip\u002Fvirtualenv, and common lightweight Python libraries.\n\nThe full image can inspect, extract, and transcode local audio and video files through ffmpeg\u002Fffprobe and mediainfo. It does not add Whisper, video understanding models, yt-dlp, moviepy, or other heavyweight media ML stacks beyond Docling's document\u002FOCR dependencies.\n\nSettings -> Sandbox stores the selected built-in image by Aithy-owned ID, not by raw registry URL. Packaged releases resolve built-ins to versioned arch-specific GHCR tags such as `ghcr.io\u002Fdosco\u002Faithy-sandbox:v0.1.0-arm64`; dev builds resolve them to `latest-arm64` or `latest-amd64`. Custom user images keep their exact user-entered image reference and are not rewritten by Aithy updates.\n\nAfter a VM starts or reloads, Sandbox Doctor records the selected image, resolved ref, architecture, provider, network, CPU, memory, session id, startup time, command checks, and Python import checks. Capability groups cover core shell, Python, document\u002FOCR\u002FPDF, and media tooling. Settings -> Sandbox can test the selected built-in or custom image, and the Runtime Console shows the loaded image, session id, capability status, missing tools, and last successful preflight. Full-sandbox document and media skills declare the capability groups they need, so the agent can explain missing tools when a lite or custom image does not provide them.\n\nThe Runtime Console also includes a sandbox workbench for `\u002Fworkspace` and `\u002Foutbox`. It uses `sandbox.bash` to list directories, inspect file sizes and modified times, and delete stale `\u002Foutbox` outputs, plus a guarded host-side download path for regular `\u002Foutbox` files. The agent-facing sandbox surface stays intentionally small: `sandbox.bash` for commands, `sandbox.edit` for exact text edits, and artifact tools for user-facing deliverables.\n\nSettings-managed host mounts are read-only by default. Read-write mounts remain available but are labeled explicitly in Settings and surfaced in the sandbox session mount metadata. File attachments still use copy-into-workspace semantics rather than exposing arbitrary host paths.\n\nSandbox bash now uses timeout categories instead of one fixed ceiling: short commands use the normal limit, document\u002Fmedia jobs can request the long profile, and extended jobs require explicit user approval. The runtime records sandbox command lifecycle events for started, stdout, stderr, completed, failed, and timed-out states; the Console jobs table shows command, cwd, duration, status, exit code, and output previews from command completion details.\n\nWhen the image is not cached yet, Microsandbox downloads it directly and Aithy shows a sandbox image splash with pull progress, byte counts, and filesystem preparation status. Users do not need Docker installed for runtime sandbox setup. For Aithy GHCR images, Aithy selects Microsandbox's public pull mode so public packages download without user credentials. If the configured sandbox image cannot be pulled or started while Microsandbox mode is enabled, Aithy keeps the blocking splash visible because agent tools cannot run without a working sandbox; the splash and Runtime Console both offer a retry action.\n\nThe sandbox image workflow publishes `aithy-sandbox` from `Dockerfile` and `aithy-sandbox-lite` from `Dockerfile.sandbox-lite` on `main` as `latest` plus single-manifest `latest-arm64` and `latest-amd64` tags. The release workflow also publishes the release ref tag and versioned arch tags. GHCR creates new container packages as private by default, so both packages must be made public in GitHub Packages before Microsandbox can pull them without user credentials. Docker is only needed by the workflows or by developers who want to build an image locally before publishing.\n\n```bash\ndocker build -t aithy-sandbox:local .\n```\n\nAdd `aithy-sandbox:local` as a custom image in Settings -> Sandbox when you want a local test build instead of a published Aithy image.\n\nUseful project areas:\n\n```text\napp\u002F                  TanStack Start routes, server functions, SSE, UI\nsrc\u002Fagent\u002F            Ax agent setup, message runner, tools\nsrc\u002Fautomations\u002F      attentions, schedules, and background actions\nsrc\u002Fcommands\u002F         shared slash commands\nsrc\u002Fepisodes\u002F         dreams, episodic memory, and episode retrieval\nsrc\u002Fmemory\u002F           memory storage, retrieval, embedding, and consolidation\nsrc\u002Fmesh\u002F             LAN discovery, pairing, pinned mesh RPC, and shared service proxies\nsrc\u002Fruntime\u002F          multi-service runtime, workers, queues, permissions\nsrc\u002Fsandbox\u002F          sandbox providers and command execution\nsrc\u002Fsecurity\u002F         capability policies and permission gates\nsrc\u002Fsession\u002F          session state and SQLite persistence\nsrc\u002Fsettings\u002F         settings, themes, mounts, and API key storage\nsrc\u002Fskills\u002F           skill bundles, detection, storage, search, and promotion\nsrc\u002Ftraining-data\u002F    opt-in trace capture and SFT export\nsrc\u002Fusage\u002F            provider\u002Fmodel token usage capture and advisor aggregation\n```\n\nThe repo enforces a 500-line hard limit with `bun run check:lines`. Keep code clean, simple, and boring: separate subsystems, short files, local patterns first.\n","Aithy 是一个可以在本地运行的个人AI代理，能够记住有用的上下文，并将数据完全控制在用户手中。它支持本地模型、云服务提供商以及Grok订阅等多种方式，允许用户通过浏览器进行交互和监控，确保了整个过程的透明性和安全性。Aithy特别适用于需要在本地环境中使用AI助手的情况，如个人研究、开发测试或是希望保持数据私密性的场景。此外，它还支持通过局域网连接更强大的计算设备，实现资源共享，非常适合家庭或小型团队内部协作。","2026-06-11 04:00:10","CREATED_QUERY"]