{"slug": "show-hn-aurict-an-open-source-terminal-ai", "title": "Show HN: Aurict – An open-source Terminal AI", "summary": "Aurict, an open-source terminal-native AI coding assistant, launched on Hacker News, offering a TUI that scans repositories for context, uses a permission-controlled tool layer with a policy sandbox, and supports multi-agent orchestration across 218+ skills. The tool includes a local API, web platform, and BYOK mobile app, with an Android APK available via GitHub Actions.", "body_md": "**A terminal-native AI coding assistant built for the way developers actually work.**\n\n** aurict.com** ·\n\n[npm](https://www.npmjs.com/package/aurict)·\n\n[Docs](https://aurict.com/docs)·\n\n[Changelog](https://aurict.com/changelog)·\n\n[Android APK](https://github.com/aurict/aurict/actions/workflows/mobile-release.yml)\n\n```\n❯ aurict\n```\n\nAurict runs entirely in your terminal. No browser tabs, no Electron overhead, no clipboard juggling between windows. You stay in the environment where you already write code, and the AI meets you there — with full access to your files, shell, language servers, and running processes.\n\nThe wider Aurict system now includes a public web surface, a BYOK mobile assistant, and a local backend control-plane prototype. The terminal remains the core product, while the web and mobile layers handle authentication, documentation, roadmap visibility, account deletion, feedback reporting, Android release distribution, and future console workflows.\n\nMost AI coding tools are built around a chat interface that happens to have a code block.\nAurict is built around a **coding environment** that happens to have a chat interface.\n\n**It understands your project before you say a word.**\nAurict scans your repository on startup — framework, language, package manager, config files,\nexisting conventions — and injects that context into every request. You don't have to explain\nthat you're using Next.js with Tailwind and Drizzle. It already knows.\n\n**It works with real tools, not simulated ones.**\nEvery file read, shell command, and code edit happens through a typed, permission-controlled\ntool layer. Commands are classified as safe, warning, or dangerous before execution. Risky\nexecution is constrained by a low-overhead policy sandbox: permission gates, protected paths,\ntimeouts, output limits, and audit trails. You always know what's happening and why.\n\nAt TUI startup, Aurict asks whether to enable **Project Auto** for the current folder. Choosing\nYes removes repeated prompts for bounded `write`\n\n, `edit`\n\n, and `apply_patch`\n\noperations in that\nproject for the current session. Shell commands, secrets, internal state, paths outside the\nproject, dangerous operations, and broad deletions still require direct approval.\n\n**It thinks in parallel, not in sequence.**\nLong tasks — refactoring a module, writing a test suite, auditing security — are broken into\nsubtasks and distributed across a pool of specialized worker agents: code, review, test, docs,\nperformance, security, debug, analytics, explore. Results flow back into a shared context.\n\n**It speaks your stack's language.**\n218+ skills cover specific frameworks, tools, and patterns. A skill isn't a prompt template —\nit's a structured context injection that shapes how the AI reasons about your particular\ncombination of technologies.\n\n**It stays out of your way.**\nThe TUI is built on Ink (React for terminals). It renders cleanly, scrolls correctly, handles\nwide output, and gets out of the way when you're not interacting with it. No flickering, no\nfull-screen takeovers.\n\n**It exposes a local API.**\nEvery session is reachable over HTTP with bearer-token auth. Pipe output from scripts, drive\nAurict from CI, or build your own tooling on top.\n\n| Surface | Description |\n|---|---|\nTerminal CLI |\nPrimary developer agent with provider routing, project context, tools, sessions, skills, MCP, hooks, and local API |\nWeb platform |\nLanding, docs, changelog, roadmap, manifesto, Firebase-backed auth, browser login flow, privacy, terms, and account deletion direction |\nMobile app |\nFlutter BYOK assistant for chat, research, document/PDF workflows, provider sessions, and assistant-answer reporting |\nBackend prototype |\nLocal/private control-plane routes for account deletion and feedback report ingestion; kept out of the public repo by `.gitignore` |\n\n| Feature | Description |\n|---|---|\nMulti-agent orchestration |\nWorker thread isolation, 3+1 coordinator model (explore, code, review, specialist) |\n218+ Skills |\nAutomatic project analysis, framework-specific context injection at startup |\nStreaming responses |\nToken-level streaming with live reasoning display for extended thinking models |\nSession memory |\nSQLite-backed persistent conversation history with full restore |\nContext compaction |\nAutomatic summarization before context overflow, configurable thresholds |\nUndo |\nRoll back the last N agent steps including file edits |\n\n| Tool | Description |\n|---|---|\n`bash` |\nShell execution with conservative safe/warning/danger classification |\n`read` |\nFile reading with line-range support |\n`write` |\nAtomic file writes |\n`edit` |\nPrecise string-replace edits with diff preview |\n`glob` |\nPattern-based file search with 30s timeout protection |\n`grep` |\nRegex search across files |\n`webfetch` |\nHTTP fetch with automatic HTML stripping |\n`websearch` |\nWeb search integration |\n`lsp` |\nTypeScript/Python language server diagnostics before edits |\n`todo` |\nProject-local task tracking, persisted to `.aurict/todos.json` |\n`apply_patch` |\nMulti-file patch application with preview, GateGuard checks, and granular approval |\n`subagent` |\nSpawn a typed specialist agent inline |\n\n| Feature | Description |\n|---|---|\nBash classifier |\nThree-tier analysis (safe / warning / danger) before any shell command runs |\nPolicy sandbox |\nLow-overhead guarded execution: command classification, approvals, protected paths, scrubbed env, timeouts, output limits, and audit logs. This is not container isolation; Docker is optional. |\nPermission system |\nPer-tool allow/deny rules, wildcard path matching, always-allow list |\nJWT auth |\nBearer token on the local HTTP API, auto-generated at `~/.aurict/server-token` |\nMobile release hardening |\nAndroid release builds use signing secrets restored in CI, R8/ProGuard shrinking, resource exclusions, and non-committed Firebase service config |\nFeedback reporting |\nMobile users can report assistant answers to a backend feedback route for review without committing private backend code or secrets |\n\n| Feature | Description |\n|---|---|\n150+ Design systems |\nMaterial, Shadcn, Radix, Tailwind, Chakra, Ant Design, and more |\n111 Skill templates |\nComponent generation, layout, theming, accessibility, animation |\nTUI wizard |\n`/design` opens an interactive project brief → system → skill picker |\nBrief analysis |\nFuzzy-matches your description to the most relevant design system |\n\n| Feature | Description |\n|---|---|\nMCP client |\n`claude_desktop_config.json` -compatible MCP server support |\n30+ Language LSP |\nTypeScript, JavaScript, Python, Go, Rust, Ruby, Java, Kotlin, Dart, C/C++, and more |\nOllama |\nLocal model support via Ollama API |\nOpenRouter |\n200+ models through a single API key |\n\nRelease APKs are produced by the manual **Mobile Android Release** workflow.\n\n- Open\n[Mobile Android Release](https://github.com/aurict/aurict/actions/workflows/mobile-release.yml). - Run the workflow with\n`apk`\n\nor`both`\n\n. - Download the\n`aurict-android-release-apk`\n\nartifact from the completed run.\n\nThe APK is signed during CI with the configured Android release keystore and Firebase `google-services.json`\n\nrestored from GitHub Actions secrets. Signing files are not committed to the repository.\n\nDownloads the matching self-contained binary from GitHub Releases and verifies its SHA-256 checksum. No Node.js, Bun, or `sudo`\n\nis required.\n\n```\ncurl -fsSL https://aurict.com/install.sh | bash\n```\n\nInstall a specific release or choose another directory by passing variables to `bash`\n\n:\n\n```\ncurl -fsSL https://aurict.com/install.sh | AURICT_INSTALL_VERSION=1.2.21 AURICT_INSTALL_DIR=/path/to/bin bash\n```\n\nProduces a single self-contained binary with the Bun runtime embedded — no runtime dependencies.\n\n```\ngit clone https://github.com/aurict/aurict\ncd aurict\nbun install\nbun run build\n\n# Run\n./dist/aurict\nnpm install -g @aurict/cli\naurict\n```\n\n**Bun** 1.3+ (for building from source)**Node.js** 20+ (for the npm package)- An API key for at least one supported provider\n\n```\n# Set your API key\naurict /config set anthropic sk-ant-...\n\n# Start the TUI (always runs in the current directory)\naurict\n\n# Pipe mode — non-interactive single query\necho \"What does this function do?\" | aurict\n\n# Machine-readable pipe result\necho \"Summarize this repository\" | aurict --format json --audience agent\n\n# Open a specific directory\ncd ~/projects/myapp && aurict\n\n# Run diagnostics without launching the TUI\naurict doctor\n\n# Run an automated recipe\naurict run recipe.yaml\n\n# Inspect build provenance or install shell completion\naurict version --json\naurict completion zsh\naurict [options]\n\n  -p, --provider <id>    Provider to use (anthropic, openai, openrouter, google, ollama)\n  -m, --model <id>       Model to use\n  -s, --system <text>    System prompt override\n      --undercover       Hide AI identity in responses\n      --stream           Enable streaming\n      --no-stream        Disable streaming\n      --format <mode>    Output format: text or json\n      --audience <type>  Output audience: human or agent\n  -q, --quiet            Suppress non-essential diagnostics\n  -v, --version          Print version\n  -h, --help             Show help\n```\n\nRoot commands and versioned output contracts are documented in [docs/cli.md](/aurict/aurict/blob/main/docs/cli.md).\n\n| Provider | Environment Variable | Notes |\n|---|---|---|\nAnthropic |\n`ANTHROPIC_API_KEY` |\nClaude 3.5, Claude 4 (Sonnet, Opus, Haiku) |\nOpenAI |\n`OPENAI_API_KEY` |\nGPT-4o, o3, o4-mini |\nGoogle |\n`GOOGLE_GENERATIVE_AI_API_KEY` |\nGemini 2.0, 2.5 Flash/Pro |\nOpenRouter |\n`OPENROUTER_API_KEY` |\n200+ models via single endpoint |\nOllama |\n`OLLAMA_BASE_URL` |\nLocal models, default: `localhost:11434` |\n\nFull reference: [docs/slash-commands.md](/aurict/aurict/blob/main/docs/slash-commands.md)\n\n| Command | Description |\n|---|---|\n`/help` |\nList all available commands |\n`/status` |\nShow runtime, context, permission, server, and task status |\n`/session` |\nShow current session info (ID, tokens, message count) |\n`/sessions` |\nBrowse and restore previous sessions |\n`/clear` |\nClear the current conversation |\n`/history` |\nShow recent session messages and persisted DB tail |\n`/cost` |\nShow session token usage and estimated cost |\n`/exit` |\nExit Aurict |\n\n| Command | Description |\n|---|---|\n`/models` |\nOpen interactive model picker |\n`/providers` |\nShow configured providers |\n`/agent` |\nSwitch active session agent (Omni, Plan, Review, or custom) |\n`/coordinator` |\nToggle multi-agent coordinator mode |\n`/auto` , `/autopilot` |\nToggle Project Auto for bounded file changes in the current project |\n`/agents` |\nList custom agents in `.aurict/agents/` |\n`/background` |\nRun, inspect, or cancel an independent background task |\n\n| Command | Description |\n|---|---|\n`/commit` |\nAI-assisted git commit — stages all changes and generates a message |\n`/diffs` |\nShow recent edit/patch activity from the session |\n`/worktree` |\nManage git worktrees for parallel development |\n`/undo` |\nRoll back the last N agent steps (files + conversation) |\n`/checkpoints` |\nList saved checkpoints |\n`/replay` |\nJump to any checkpoint (random access) |\n`/rewind` |\nRewind conversation to Nth checkpoint |\n`/fork` |\nFork current session — create an independent copy |\n`/branch` |\nFork conversation or switch between branches |\n\n| Command | Description |\n|---|---|\n`/memory` |\nManage persistent memory across sessions |\n`/pin` |\nManage pinned context — always injected into system prompt |\n`/ctx` |\nShow context token breakdown and memory pressure |\n`/compact` |\nConfigure or trigger context compaction |\n`/btw` |\nAdd a side note without affecting the conversation |\n`/stash` |\nSave/restore draft input |\n\n| Command | Description |\n|---|---|\n`/init` |\nInitialize Aurict project files without overwriting existing |\n`/config` |\nGet or set API keys and defaults |\n`/theme` |\nChange the color theme |\n`/settings` |\nOpen settings panel |\n`/keys` |\nShow all keybindings |\n`/doctor` |\nRun install/provider/server/sandbox health checks |\n`/version` |\nShow Aurict version |\n\n| Command | Description |\n|---|---|\n`/skills` |\nList active skills for this project |\n`/skill` |\nInstall/remove skills by URL or path |\n`/plugin` |\nPlugin marketplace: search, install, remove |\n`/skill-scores` |\nShow per-project skill effectiveness scores |\n`/mcp` |\nList connected MCP servers |\n`/design` |\nOpen the design agent wizard |\n\n| Command | Description |\n|---|---|\n`/export` |\nExport session to Markdown or HTML |\n`/share` |\nExport session as HTML and optionally upload to transfer.sh |\n`/watch` |\nWatch a file/dir and auto-run a prompt on change |\n`/unwatch` |\nStop watching a path |\n`/protect` |\nAdd a file pattern to GateGuard protection |\n`/unprotect` |\nRemove a GateGuard protection pattern |\n`/adr` |\nManage architecture decision records in `.aurict/decisions/` |\n`/diag` |\nView and resolve project diagnostics |\n`/crashes` |\nView crash reports |\n`/editor` |\nOpen `$EDITOR` to compose a message |\n`/template` |\nSave/use named message templates |\n\n| Shortcut | Action |\n|---|---|\n`Enter` |\nSend message |\n`Shift+Enter` |\nInsert newline |\n`Ctrl+←` / `Ctrl+→` |\nMove cursor word by word |\n`Ctrl+A` |\nAttach file (`@file.ts` or `@file.ts:symbol` ) |\n`Ctrl+E` |\nEdit last user message |\n`Ctrl+V` |\nPaste from system clipboard |\n`Ctrl+C` |\nCancel current operation or exit |\n`Ctrl+T` |\nToggle floating task panel |\n`Ctrl+S` |\nOpen settings panel |\n`Ctrl+X` |\nToggle subagent view |\n`Ctrl+O` |\nExpand collapsed tool output |\n`Esc` |\nClose overlay / go back |\n\nAurict reads MCP server configuration from `.aurict/mcp.json`\n\n, using the same format\nas `claude_desktop_config.json`\n\n.\n\n```\n{\n  \"mcpServers\": {\n    \"filesystem\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/home\"]\n    },\n    \"github\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@modelcontextprotocol/server-github\"],\n      \"env\": {\n        \"GITHUB_PERSONAL_ACCESS_TOKEN\": \"<your-token>\"\n      }\n    }\n  }\n}\n```\n\nMCP tools appear alongside built-in tools and are subject to the same permission system.\n\nAurict exposes a REST/SSE API on `127.0.0.1:7777`\n\n. All endpoints except `/v1/health`\n\nrequire bearer-token authentication.\n\n```\n# Read the auto-generated token\nTOKEN=$(cat ~/.aurict/server-token)\n\n# Health check (no auth required)\ncurl http://localhost:7777/v1/health\n\n# Create a session\ncurl -X POST http://localhost:7777/v1/session \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"provider\":\"anthropic\",\"model\":\"claude-sonnet-4-6\"}'\n\n# List sessions\ncurl http://localhost:7777/v1/session \\\n  -H \"Authorization: Bearer $TOKEN\"\n\n# Send a message (SSE stream)\ncurl -N http://localhost:7777/v1/session/<id>/message \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"content\":\"refactor the auth module\"}'\n```\n\nThe token is stored at `~/.aurict/server-token`\n\n(mode 600) and regenerated if deleted.\n\nAurict stores global configuration in `~/.aurict/`\n\nand project configuration in `<workdir>/.aurict/`\n\n:\n\n```\n~/.aurict/\n├── aurict.db           # SQLite database (sessions, config, MCP servers, memory)\n├── server-token        # HTTP API bearer token (chmod 600)\n├── config.json         # Provider defaults and global settings\n└── plugins/            # Installed plugins\n\n<workdir>/.aurict/\n├── config.json         # Project-level overrides\n├── todos.json          # Task list (per working directory)\n├── decisions/          # Architecture decision records (/adr)\n└── diagnostics/        # Tool failure records (/diag)\n```\n\nTo set a default provider and model:\n\n```\naurict /config set default.provider anthropic\naurict /config set default.model claude-sonnet-4-6\nbun install              # install dependencies\nbun run dev              # start in development mode (hot reload)\nbun run test             # run the test suite\nbun run eval -- --smoke  # deterministic reference eval smoke\nbun run typecheck        # TypeScript strict check (both packages)\nbun run build            # compile to standalone binary → dist/aurict\naurict/\n├── packages/\n│   ├── core/            # Agent engine, tools, providers, storage, server\n│   │   ├── src/\n│   │   │   ├── agent/       # Agent loop, compaction, protocol\n│   │   │   ├── tool/        # Tool registry, built-ins, classifier, sandbox\n│   │   │   ├── provider/    # Anthropic, OpenAI, Google, OpenRouter, Ollama\n│   │   │   ├── server/      # Hono HTTP API, auth middleware\n│   │   │   ├── storage/     # SQLite, Drizzle ORM, schema\n│   │   │   └── design/      # Design systems, skill templates, matcher\n│   │   └── test/            # 92 unit tests\n│   └── cli/             # Ink TUI, commands, keybindings\n│       ├── src/\n│       │   ├── tui/         # React components (Ink)\n│       │   ├── commands/    # Slash command registry\n│       │   └── utils/       # Theme, highlight, token display\n│       └── test/            # 39 TUI component tests\n├── scripts/\n│   └── build.ts         # bun build --compile → dist/aurict\n└── dist/\n    └── aurict          # Compiled binary (~103 MB, Bun runtime embedded)\n# All tests\nbun run test\n\n# Core only\nbun run test:core\n\n# CLI and terminal tests\nbun run test:cli\n\n# Desktop tests\nbun run test:desktop\n\n# Coverage and randomized repeat gates\nbun run test:coverage\nbun run test:stability\n\n# Single file\nbun test packages/core/test/classifier.test.ts\n\n# Agent eval harness\nbun run eval -- --list\nbun run eval -- --json\n```\n\nEach suite runs with isolated state under the operating-system temporary directory; tests do not write to the user's Aurict state. Test coverage includes: bash classifier, token counting, permission system, context compaction, sandbox detection, agent pool, HTTP server auth, and TUI components (Spinner, Markdown, StatusBar, StartupBanner).\n\nEval coverage includes small repo fixtures for bug fixes, multi-file refactors, policy sandbox documentation honesty, and string utility changes.\n\n| Layer | Technology |\n|---|---|\n| Runtime | Bun 1.3+ |\n| Language | TypeScript 5.8+ strict mode |\n| TUI | Ink 5 (React for terminals) |\n| AI SDK | Vercel AI SDK 4.x |\n| Database | SQLite via `bun:sqlite` + Drizzle ORM |\n| HTTP server | Hono 4 |\n| Token counting | js-tiktoken (model-specific BPE encodings) |\n| MCP | @modelcontextprotocol/sdk |\n| Testing | Bun test runner + ink-testing-library |\n\nAurict is built on the shoulders of these projects:\n\nby Vadim Demedes — React for interactive command-line apps. The entire TUI rendering layer runs on Ink.[Ink](https://github.com/vadimdemedes/ink)— Unified multi-provider AI streaming layer ([Vercel AI SDK](https://github.com/vercel/ai)`@ai-sdk/anthropic`\n\n,`@ai-sdk/openai`\n\n,`@ai-sdk/google`\n\n, and more). Without it, wiring each provider would be months of work.— Runtime, bundler, test runner, and the engine behind the self-contained binary output.[Bun](https://github.com/oven-sh/bun)`bun build --compile`\n\nis what makes a zero-dependency install possible.— The lightweight web framework powering the local HTTP/SSE API.[Hono](https://github.com/honojs/hono)by Colby McHenry — Local-first semantic code intelligence for AI agents via MCP. Used in development to give the AI assistant deep structural understanding of the codebase without grep loops.[CodeGraph](https://github.com/colbymchenry/codegraph)\n\nAGPL-3.0-only — see [aurict.com](https://aurict.com) for full documentation and community.", "url": "https://wpnews.pro/news/show-hn-aurict-an-open-source-terminal-ai", "canonical_source": "https://github.com/aurict/aurict", "published_at": "2026-09-04 08:08:14+00:00", "updated_at": "2026-09-04 08:22:52.879133+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-agents", "artificial-intelligence"], "entities": ["Aurict", "Ink", "React", "Flutter", "Firebase", "GitHub", "npm"], "alternates": {"html": "https://wpnews.pro/news/show-hn-aurict-an-open-source-terminal-ai", "markdown": "https://wpnews.pro/news/show-hn-aurict-an-open-source-terminal-ai.md", "text": "https://wpnews.pro/news/show-hn-aurict-an-open-source-terminal-ai.txt", "jsonld": "https://wpnews.pro/news/show-hn-aurict-an-open-source-terminal-ai.jsonld"}}