{"id":49306312,"url":"https://github.com/silentspike/noaide","last_synced_at":"2026-04-26T10:00:40.464Z","repository":{"id":339641573,"uuid":"1162775886","full_name":"silentspike/noaide","owner":"silentspike","description":"Browser-based real-time IDE for AI coding agents (Claude Code, Gemini CLI, Codex)","archived":false,"fork":false,"pushed_at":"2026-04-24T14:32:09.000Z","size":2575,"stargazers_count":0,"open_issues_count":37,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-24T14:37:32.276Z","etag":null,"topics":["claude-code","ide","rust","solidjs","webtransport"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/silentspike.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":"audit.toml","citation":null,"codeowners":".github/CODEOWNERS","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-02-20T17:21:01.000Z","updated_at":"2026-04-24T14:32:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/silentspike/noaide","commit_stats":null,"previous_names":["silentspike/noaide"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/silentspike/noaide","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/silentspike%2Fnoaide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/silentspike%2Fnoaide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/silentspike%2Fnoaide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/silentspike%2Fnoaide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/silentspike","download_url":"https://codeload.github.com/silentspike/noaide/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/silentspike%2Fnoaide/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32292958,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T09:34:17.070Z","status":"ssl_error","status_checked_at":"2026-04-26T09:34:00.993Z","response_time":129,"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":["claude-code","ide","rust","solidjs","webtransport"],"created_at":"2026-04-26T10:00:26.019Z","updated_at":"2026-04-26T10:00:40.380Z","avatar_url":"https://github.com/silentspike.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n```\n                        $$\\       $$\\\n                        \\__|      $$ |\n $$$$$$$\\   $$$$$$\\  $$\\ $$$$$$\\  $$$$$$\\   $$$$$$\\\n$$  __$$\\ $$  __$$\\ $$ |$$  __$$\\ $$  __$$\\ $$  __$$\\\n$$ |  $$ |$$ /  $$ |$$ |$$ /  $$ |$$$$$$$$ |$$$$$$$$ |\n$$ |  $$ |$$ |  $$ |$$ |$$ |  $$ |$$   ____|$$   ____|\n$$ |  $$ |\\$$$$$$  |$$ |\\$$$$$$  |\\$$$$$$$\\ \\$$$$$$$\\\n\\__|  \\__| \\______/ \\__| \\______/  \\_______| \\_______|\n```\n\n**Browser-based real-time IDE for AI coding agents**\n\nSee everything your AI writes. Control every session. Catch every API call.\n\nRequires your AI coding agent running in the background. Not included — you know who's watching. 👀\n\u003cbr\u003eThe Truman Show × Westworld × The Sims — fully under your control.\n\n\u003cbr\u003e\n\n[![CI](https://github.com/silentspike/noaide/actions/workflows/ci.yml/badge.svg)](https://github.com/silentspike/noaide/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Status: Pre-Alpha](https://img.shields.io/badge/Status-Pre--Alpha-orange.svg)](#project-status)\n[![Rust](https://img.shields.io/badge/Rust-1.87+-dea584.svg)](https://www.rust-lang.org/)\n[![SolidJS](https://img.shields.io/badge/SolidJS-1.9+-4f88c6.svg)](https://www.solidjs.com/)\n[![Transport](https://img.shields.io/badge/Transport-HTTP%2F3%20QUIC-8b5cf6.svg)](#tech-stack)\n\n\u003cbr\u003e\n\n\u003e **Pre-Alpha** — The application builds and runs with a functional backend and frontend.\n\u003e Active development in progress. Not production-ready. See [Project Status](#project-status) for details.\n\n---\n\n\u003c/div\u003e\n\n## The Problem\n\nAI coding agents like [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Gemini CLI](https://github.com/google-gemini/gemini-cli), and [Codex](https://github.com/openai/codex) generate rich conversation logs (JSONL) containing system prompts, hidden instructions, thinking blocks, tool calls, and results. Their terminal UIs show roughly **60% of this data** — the rest is suppressed.\n\nnoaide makes 100% visible.\n\n## What It Does\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n### Full JSONL Transparency\n\nEvery message rendered — including `system-reminder`,\nthinking blocks, and content marked \"don't display.\"\nCompressed messages shown as ghost messages at 30%\nopacity. Nothing hidden, nothing filtered.\n\n### Real-time File Watching\n\neBPF kernel-level file monitoring with **PID attribution**:\nknow exactly which process (you or Claude) wrote each\nchange. Sub-millisecond event detection. inotify fallback\nwhen eBPF is unavailable.\n\n### Session Control\n\nSpawn managed sessions (full PTY control) or attach to\nexisting ones (tmux send-keys). Bidirectional — not just\na viewer. Breathing orb shows AI state in real-time.\n\n### Conflict Resolution\n\nWhen you and Claude edit the same file simultaneously:\nyellow banner, OT buffer holds your changes, 3-way merge\nafter Claude finishes, auto Merge View on conflict.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n### API Network Inspector\n\nTransparent reverse proxy for Anthropic API calls.\nFull request/response bodies, timing waterfall, token\nusage — all in a browser Network tab. API keys\nautomatically redacted.\n\n### Multi-Agent Teams\n\nForce-directed topology graph showing agent hierarchies.\nAnimated message bubbles on edges. Swimlane timeline\nfor parallel agent activity. Gantt charts with per-agent\ntime tracking.\n\n### 120 Hz Rendering\n\nSolidJS fine-grained reactivity (no Virtual DOM). Virtual\nscroller renders ~25 DOM nodes regardless of message count.\nWASM workers for JSONL parsing and Markdown rendering.\nSpring-physics animations.\n\n### Mobile Access\n\nResponsive layout with bottom tab bar and swipe navigation.\nWebTransport QUIC with connection migration (WiFi to\ncellular seamless handoff). Voice input via Web Speech API.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## Gallery\n\n\u003e Screenshots captured from a local development build against seeded\n\u003e E2E fixture sessions. Shots are representative, not marketing\n\u003e renders — the real UI looks like this when you run it.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\" width=\"34%\"\u003e\n  \u003ca href=\"docs/images/hero-three-panel.png\"\u003e\n    \u003cimg src=\"docs/images/hero-three-panel.png\" alt=\"Three-panel layout: sessions sidebar, chat center, file explorer right\" /\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\u003csub\u003e\u003cb\u003eThree-panel overview.\u003c/b\u003e Sessions sidebar (left), Chat\n  (center) with token budget and tabs, Files explorer (right).\n  Breathing orbs mark session state.\u003c/sub\u003e\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"34%\"\u003e\n  \u003ca href=\"docs/images/session-active-chat.png\"\u003e\n    \u003cimg src=\"docs/images/session-active-chat.png\" alt=\"Chat panel with a user message and assistant reply\" /\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\u003csub\u003e\u003cb\u003eLive chat rendering.\u003c/b\u003e User and assistant messages\n  from the seeded Claude demo session. Each message shows\n  timestamp, role, and a Copy action; hidden content and\n  system-reminders render in the same stream.\u003c/sub\u003e\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"34%\"\u003e\n  \u003ca href=\"docs/images/welcome-screen.png\"\u003e\n    \u003cimg src=\"docs/images/welcome-screen.png\" alt=\"Welcome overlay on first launch\" /\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\u003csub\u003e\u003cb\u003eWelcome screen.\u003c/b\u003e First-launch overlay\n  summarizing the four headline capabilities. Dismiss with\n  \u003ccode\u003eGet Started\u003c/code\u003e or press \u003ccode\u003e?\u003c/code\u003e for the\n  keyboard shortcut sheet.\u003c/sub\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## UI Layout\n\n```\n Session        Chat / Editor / Network / Teams             Files\n Sidebar        (tabbed center panel)                       \u0026 Tools\n\n ┌─────────┬──────────────────────────────────────┬────────────────┐\n │         │                                      │                │\n │  ● Sess │  user                                │  project/      │\n │    Proj │  \u003e Fix the auth bug in login.ts      │  ├── src/      │\n │    4.5  │                                      │  │   ├── ...   │\n │    12m  │  assistant                    ◉ 4.5  │  │   └── ...   │\n │         │  I'll fix the authentication bug.    │  ├── tests/    │\n │  ○ Sess │  Let me read the file first.         │  └── ...       │\n │    Proj │                                      │                │\n │    4.5  │  ┌─ Read login.ts ──────────────┐    │ ────────────── │\n │    1h   │  │  export function login() {   │    │                │\n │         │  │    const token = getToken(); │    │  Token Budget  │\n │  ◌ Arch │  │    ...                       │    │  ████████░░░   │\n │    Proj │  └──────────────────────────────┘    │  45k / 200k    │\n │         │                                      │                │\n │         │  ┌─ Edit login.ts ──────────────┐    │  Model         │\n │         │  │  - const token = getToken(); │    │  claude-4.5    │\n │         │  │  + const token = await       │    │                │\n │         │  │  +   getToken(credentials);  │    │  Cost          │\n │         │  └──────────────────────────────┘    │  $0.42         │\n │         │                                      │                │\n │         │  ┌─ system-reminder ────────────┐    │                │\n │  [+ New │  │  SessionStart hook success   │    │                │\n │ Session]│  └──────────────────────────────┘    │                │\n │         │                                      │                │\n │         │  ▌                              ◉    │                │\n ├─────────┴──────────────────────────────────────┴────────────────┤\n │ [Chat] [Files] [Network] [Teams] [Tasks] [Settings]  Cmd+K     │\n └─────────────────────────────────────────────────────────────────┘\n```\n\n\u003csup\u003eThree resizable panels. Left: session list with breathing orbs. Center: tabbed views (chat, editor,\nnetwork, teams). Right: file tree, token budget, model info. Bottom bar for quick navigation and\ncommand palette.\u003c/sup\u003e\n\n## Architecture\n\n```\n                  ┌─────────────────────────────────────────────────┐\n                  │            Browser  (SolidJS + WASM)            │\n                  │                                                 │\n                  │  Chat ─── Editor ─── Network ─── Teams ─── Gantt│\n                  │    │         │          │          │         │   │\n                  │    └─────────┴──────────┴──────────┴─────────┘   │\n                  │                      │                           │\n                  │          WebTransport Client (codec.ts)          │\n                  └──────────────────────┬──────────────────────────┘\n                                         │\n                              HTTP/3 QUIC │ TLS 1.3\n                              0-RTT       │ Multiplexed\n                              Zstd ~70%   │ Adaptive Quality\n                                         │\n                  ┌──────────────────────┴──────────────────────────┐\n                  │             Rust Server  (tokio + io_uring)     │\n                  │                                                 │\n                  │  ┌────────────┐  ┌────────────┐  ┌───────────┐ │\n                  │  │eBPF Watcher│  │JSONL Parser│  │PTY Session│ │\n                  │  │ PID attrib.│  │ streaming  │  │ mgr + tmux│ │\n                  │  └─────┬──────┘  └─────┬──────┘  └─────┬─────┘ │\n                  │        │               │               │       │\n                  │        └───────────────┼───────────────┘       │\n                  │                        │                       │\n                  │              ┌─────────┴─────────┐             │\n                  │              │  Zenoh Event Bus   │             │\n                  │              │  SHM (~1us)        │             │\n                  │              └─────────┬─────────┘             │\n                  │                        │                       │\n                  │         ┌──────────────┼──────────────┐        │\n                  │         │              │              │        │\n                  │    ┌────┴────┐   ┌─────┴─────┐  ┌────┴─────┐  │\n                  │    │hecs ECS │   │ Limbo DB  │  │API Proxy │  │\n                  │    │  SoA    │   │ io_uring  │  │ redaction│  │\n                  │    │  state  │   │ FTS5      │  │ logging  │  │\n                  │    └─────────┘   └───────────┘  └──────────┘  │\n                  └─────────────────────────────────────────────────┘\n\n  Data flow:  File Change ──▸ Watcher ──▸ Parser ──▸ ECS ──▸ Bus ──▸ Transport ──▸ Browser\n  Input flow: Browser ──▸ WebTransport ──▸ Session Manager ──▸ PTY stdin / tmux send-keys\n  Proxy flow: Claude Code ──▸ ANTHROPIC_BASE_URL ──▸ Proxy ──▸ api.anthropic.com\n```\n\n## Tech Stack\n\n\u003ctable\u003e\n\u003ctr\u003e\u003cth align=\"left\"\u003eLayer\u003c/th\u003e\u003cth align=\"left\"\u003eChoice\u003c/th\u003e\u003cth align=\"left\"\u003eRationale\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cb\u003eBackend\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eRust + tokio + io_uring\u003c/td\u003e\u003ctd\u003eZero-cost abstractions, memory safety, async I/O\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cb\u003eFrontend\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eSolidJS + Vite 6\u003c/td\u003e\u003ctd\u003eFine-grained reactivity without Virtual DOM overhead\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cb\u003eTransport\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eWebTransport (HTTP/3, QUIC)\u003c/td\u003e\u003ctd\u003e0-RTT reconnect, multiplexed streams, connection migration. Requires a Chromium-based browser. Production deployment is documented in \u003ca href=\"docs/adr/001-production-deployment.md\"\u003eADR-001\u003c/a\u003e.\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cb\u003eState\u003c/b\u003e\u003c/td\u003e\u003ctd\u003ehecs ECS (struct-of-arrays)\u003c/td\u003e\u003ctd\u003eCache-friendly iteration over 100+ concurrent entities\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cb\u003eDatabase\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eLimbo (async SQLite, io_uring)\u003c/td\u003e\u003ctd\u003eFTS5 full-text search, JSONL remains source of truth\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cb\u003eFile Watch\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eeBPF via aya\u003c/td\u003e\u003ctd\u003eKernel-level PID attribution for conflict detection\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cb\u003eEvent Bus\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eZenoh + shared memory\u003c/td\u003e\u003ctd\u003e~1us inter-component latency, zero-copy IPC\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cb\u003eEditor\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eCodeMirror 6\u003c/td\u003e\u003ctd\u003e500 KB (vs Monaco 5 MB), built-in MergeView\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cb\u003eWire Format\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eFlatBuffers + MessagePack + Zstd\u003c/td\u003e\u003ctd\u003eZero-copy hot path, flexible cold path, ~70% compression\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cb\u003eWASM\u003c/b\u003e\u003c/td\u003e\u003ctd\u003ejsonl-parser, markdown, compress\u003c/td\u003e\u003ctd\u003eOff-main-thread heavy computation via Web Workers\u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\u003cb\u003eTheme\u003c/b\u003e\u003c/td\u003e\u003ctd\u003eCatppuccin Mocha\u003c/td\u003e\u003ctd\u003e14 harmonious dark colors, community standard\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\nArchitectural decisions are documented as [11 ADRs in llms.txt](llms.txt). Each records the context, decision, alternatives considered, and trade-offs accepted.\n\n## Performance — Design Goals\n\nThese are the target numbers the architecture is designed around.\nThe `criterion` suite under `server/benches/` covers two hot paths\n(JSONL `parse_line` and ECS-cache `component_to_api_json`) and runs\nnightly — fetch the latest measurements from the **`benchmark-results-*`**\nartefact on the most recent\n[Nightly run](https://github.com/silentspike/noaide/actions/workflows/nightly.yml).\nEnd-to-end latency benchmarks (Playwright traces for the file event\n→ browser path, FPS at 1000+ messages) are still on the roadmap;\ntreat any bar without a matching bench as a design goal, not a\nmeasurement.\n\n```\nFile event to browser       ████████████████████████████░░  \u003c 50ms p99\nMessage fetch (cached)      ██████████████████████████████  \u003c 5ms\nRendering (1000+ msgs)      ██████████████████████████████  120 Hz\nServer RSS (10 sessions)    █████████████░░░░░░░░░░░░░░░░░  \u003c 200 MB\nBrowser memory              ████████████████░░░░░░░░░░░░░░  \u003c 500 MB\nJSONL parse rate            ██████████████████████████████  \u003e 10k lines/s\nZenoh SHM latency           ██████████████████████████████  ~1 us\nAPI proxy overhead          ██████████████████████████████  \u003c 5 ms\nZstd bandwidth reduction    █████████████████████░░░░░░░░░  ~70%\n```\n\n## Prerequisites\n\n| Dependency | Version | Notes |\n|------------|---------|-------|\n| Rust | 1.87+ | nightly required for io_uring features |\n| Node.js | 22+ | with npm |\n| wasm-pack | 0.13+ | for WASM module compilation |\n| mkcert | latest | local TLS certificates for WebTransport |\n| flatc | latest | FlatBuffers schema compiler |\n| Linux kernel | 5.19+ | eBPF and io_uring support |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eOptional: eBPF capabilities\u003c/b\u003e\u003c/summary\u003e\n\nFor eBPF file watching (recommended), the kernel needs `CONFIG_BPF=y` and `CONFIG_BPF_SYSCALL=y`, and the process needs `CAP_BPF` + `CAP_PERFMON` (or `CAP_SYS_ADMIN` on kernels \u003c 5.8). Without these, noaide falls back to inotify automatically.\n\nVerify: `grep CONFIG_BPF /boot/config-$(uname -r)`\n\n\u003c/details\u003e\n\n## Quick Start\n\n```bash\n# Clone\ngit clone https://github.com/silentspike/noaide.git \u0026\u0026 cd noaide\n\n# First-run: generate local TLS certificates (needed for WebTransport)\njust certs          # or: make certs\n\n# Start the backend in Docker\njust dev            # or: make dev  (=\u003e docker compose up)\n\n# Start the frontend dev server in a second terminal (HMR)\njust dev-front      # or: make dev-front  (=\u003e cd frontend \u0026\u0026 pnpm dev)\n\n# Open in browser\n#   http://localhost:9999/noaide/\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eAlternative: native (no Docker) workflow\u003c/b\u003e\u003c/summary\u003e\n\n```bash\n# Generate certificates\njust certs\n\n# Build the WASM modules\njust wasm\n\n# Run the backend natively\njust dev-backend-native\n\n# Run the frontend natively in a second terminal\njust dev-front-native\n```\n\nAll recipes are in [`justfile`](justfile); a `Makefile` mirror exists\nfor users without `just`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eAll available tasks\u003c/b\u003e\u003c/summary\u003e\n\nRun `just` (or `just -l`) to list every recipe. The most common ones:\n\n| Task | Description |\n|------|-------------|\n| `just dev` | Start the backend via `docker compose up` |\n| `just dev-front` | Start the frontend dev server (HMR) |\n| `just test` | `cargo test --workspace` + `pnpm test` |\n| `just test-e2e` | Playwright smoke suite |\n| `just fmt` / `just lint` | Formatters and linters |\n| `just audit` | `cargo audit` + `pnpm audit --audit-level=high` |\n| `just bench` | `cargo bench` — performance design goals |\n| `just wasm` | Build all three WASM modules |\n| `just certs` | Generate local TLS certificates |\n| `just demo` | Start everything + seed fixtures + open browser |\n\n\u003c/details\u003e\n\n## Configuration\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eEnvironment variables\u003c/b\u003e\u003c/summary\u003e\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `NOAIDE_PORT` | `4433` | WebTransport/QUIC port |\n| `NOAIDE_HTTP_PORT` | `8080` | HTTP port (health endpoint, API proxy) |\n| `NOAIDE_DB_PATH` | `./data/noaide/ide.db` | Limbo database path |\n| `NOAIDE_WATCH_PATHS` | `~/.claude/` | Directories to watch for JSONL changes |\n| `NOAIDE_TLS_CERT` | `./certs/cert.pem` | TLS certificate path |\n| `NOAIDE_TLS_KEY` | `./certs/key.pem` | TLS private key path |\n| `NOAIDE_LOG_LEVEL` | `info` | Log verbosity (trace/debug/info/warn/error) |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eFeature flags\u003c/b\u003e\u003c/summary\u003e\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `ENABLE_EBPF` | `true` | eBPF file watching (false = inotify fallback) |\n| `ENABLE_SHM` | `true` | Zenoh shared memory (false = TCP transport) |\n| `ENABLE_WASM_PARSER` | `true` | WASM JSONL parser (false = JavaScript fallback) |\n| `ENABLE_API_PROXY` | `true` | Anthropic API proxy and Network tab |\n| `ENABLE_PROFILER` | `false` | Performance profiler panel |\n| `ENABLE_AUDIO` | `false` | UI notification sounds |\n\n\u003c/details\u003e\n\n## Development\n\n```bash\n# ── Backend ──────────────────────────────────\ncargo build                              # dev build\ncargo test                               # unit + integration tests\ncargo clippy -- -D warnings              # lint\ncargo bench                              # performance benchmarks\n\n# ── Frontend ─────────────────────────────────\ncd frontend\npnpm dev                                 # Vite dev server with HMR\npnpm build                               # production build\npnpm lint                                # ESLint\n\n# ── WASM ─────────────────────────────────────\nwasm-pack build wasm/jsonl-parser --target web\nwasm-pack build wasm/markdown --target web\nwasm-pack build wasm/compress --target web\n\n# ── FlatBuffers ──────────────────────────────\nflatc --rust --ts -o generated/ schemas/messages.fbs\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for branch conventions, commit style, and PR process.\nSee [TESTING.md](TESTING.md) for the full test gate matrix and benchmark commands.\n\n## Features\n\nEach row points to the primary module that implements it, so the\ndescription is easy to cross-check against the code.\n\n| Feature | Source | Description |\n|---------|--------|-------------|\n| **Message Cache** | [`server/src/cache/mod.rs`](server/src/cache/mod.rs) | ECS-backed in-memory cache with incremental JSONL parsing. Designed for \u003c5 ms cached responses (see [Performance — Design Goals](#performance--design-goals)). |\n| **Pagination** | [`server/src/cache/mod.rs`](server/src/cache/mod.rs) + [`VirtualScroller.tsx`](frontend/src/components/chat/VirtualScroller.tsx) | Infinite scroll with scroll-anchor preservation. Loads 200 messages at a time. |\n| **Thinking Blocks** | [`components/chat/ThinkingBlock.tsx`](frontend/src/components/chat/ThinkingBlock.tsx) | Animated collapse/expand with measured `scrollHeight`. Token count estimate. |\n| **Session Pinning** | [`stores/session.ts`](frontend/src/stores/session.ts) + [`components/sessions/SessionList.tsx`](frontend/src/components/sessions/SessionList.tsx) | Star sessions, sorted pinned-first. Persisted in localStorage. |\n| **Profiler Metrics** | [`components/profiler/ProfilerPanel.tsx`](frontend/src/components/profiler/ProfilerPanel.tsx) | Real-time FPS, heap usage, events/sec, render time, DOM nodes, transport RTT. |\n| **Command Palette** | [`components/shared/CommandPalette.tsx`](frontend/src/components/shared/CommandPalette.tsx) | Cmd+K with scope prefixes (`\u003e` commands, `#` sessions, `@` tabs). Fuzzy matching with highlights. |\n| **Session Search** | [`components/chat/SearchBar.tsx`](frontend/src/components/chat/SearchBar.tsx) | Cmd+F in-chat search with match counter and prev/next navigation. |\n| **Notifications** | [`lib/notifications.ts`](frontend/src/lib/notifications.ts) | Toasts, Browser Notification API, optional Web Audio cues (gated by `ENABLE_AUDIO`). |\n| **Cost Dashboard** | [`components/cost/CostDashboard.tsx`](frontend/src/components/cost/CostDashboard.tsx) | Per-model token breakdown, cost bars, session ranking, input/output/cache ratios. |\n| **Export** | [`lib/export.ts`](frontend/src/lib/export.ts) + [`components/shared/ExportDialog.tsx`](frontend/src/components/shared/ExportDialog.tsx) | Markdown, JSON, or HTML export with configurable options. Mobile Web Share API support. |\n| **Session Stats API** | [`server/src/main.rs`](server/src/main.rs) | HTTP endpoint with token counts, model breakdown, duration. |\n| **Subagent Tree** | [`components/teams/SubagentTree.tsx`](frontend/src/components/teams/SubagentTree.tsx) | Tree visualization of `agentId`/`parentUuid` hierarchies in the Teams panel. |\n\n### Keyboard Shortcuts\n\n| Shortcut | Action |\n|----------|--------|\n| `Cmd/Ctrl + K` | Open command palette |\n| `Cmd/Ctrl + F` | Search in chat |\n| `Cmd/Ctrl + 1-8` | Switch tabs (Chat, Network, Teams, Gallery, Tasks, Git, Cost, Settings) |\n| `Escape` | Close overlay / search |\n| `Tab` (in palette) | Cycle scope prefixes |\n\n## Project Status\n\nnoaide is in active pre-alpha development. The application compiles, runs, and provides a functional UI for monitoring AI coding sessions.\n\n```\nSprint 1 ── Foundation                             ██████████████  Complete\n             ECS state, Limbo DB, JSONL parser,\n             eBPF watcher, session manager\n\nSprint 2 ── Streaming Pipeline                     ██████████████  Complete\n             Zenoh event bus, WebTransport,\n             SolidJS shell, WASM modules\n\nSprint 3 ── Frontend                               ██████████████  Complete\n             Chat panel, editor, sessions,\n             API proxy, tools, teams, tasks\n\nSprint 4 ── Integration                            ██████████████  Complete\n             Mobile layout, performance\n             tuning, command palette, polish\n\nRC2     ── Cache + UX Polish                       ██████████████  Complete\n             Message cache, pagination, cost\n             dashboard, export, search, profiler\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eBackend modules (see CI for current test count)\u003c/b\u003e\u003c/summary\u003e\n\n- ECS state engine with session, message, file, task, agent components\n- Incremental JSONL parser with byte-offset caching\n- eBPF file watcher with inotify fallback\n- PTY session manager (spawn + tmux attach)\n- Zenoh event bus with shared memory\n- WebTransport server with adaptive quality tiers\n- API proxy with automatic key redaction\n- Git integration (branches, staging, commits, blame)\n- Multi-LLM support (Claude, Gemini, Codex)\n- Whisper voice-to-text sidecar integration\n\n\u003c/details\u003e\n\n## Multi-LLM Support\n\nnoaide supports multiple AI coding agents out of the box:\n\n| Agent | Status | Notes |\n|-------|--------|-------|\n| **Claude Code** | Supported | Full JSONL support, PTY + tmux session control, API proxy |\n| **Gemini CLI** | Supported | JSON conversation parsing, PTY session management |\n| **OpenAI Codex** | Supported | JSONL parsing, image injection, managed sessions |\n\nThe JSONL parser and session manager use pluggable format adapters. Core UI components (chat panel, editor, network tab) are agent-agnostic.\n\n## Operating an Agent\n\nThese four short sections describe the supervisor experience. For the\nfull contract between the supervisor, the agent, and noaide, see\n[AGENTS.md](AGENTS.md).\n\n### Agent Operating Model\n\nnoaide watches agents — it does not run them. The agent (Claude Code,\nGemini CLI, Codex) is a separate process. noaide reads its JSONL log,\nwatches the filesystem with eBPF, hosts its PTY, and proxies its API\ncalls. See [AGENTS.md §1](AGENTS.md#1-operating-model).\n\n### Supervision Boundaries\n\nThe supervisor controls session lifecycle, keyboard/text input, tool\napproval, the API proxy gate (auto vs. manual), and file-edit locks\nduring 3-way merges. noaide enforces an API whitelist, redacts secrets,\nand never spawns shells for PTY input. See\n[AGENTS.md §2](AGENTS.md#2-supervision-boundaries).\n\n### Evidence and Audit Loop\n\nEvery event crossing a component boundary is wrapped in an envelope\ncarrying a Lamport clock, source, PID, and session ID. JSONL is the\nsource of truth; the Limbo DB and ECS world are regeneratable caches.\nNetwork, file, and git activity are rendered in place so they can be\ncorrelated with the conversation. See\n[AGENTS.md §3](AGENTS.md#3-evidence-and-audit-loop).\n\n### Agent Contract\n\nAgents integrate by (1) writing JSONL as they run, (2) honouring the\nconfigured base-URL override when the supervisor enables the proxy, and\n(3) accepting PTY or tmux send-keys input. See\n[AGENTS.md §4](AGENTS.md#4-agent-contract) for per-agent integration\npaths.\n\n## Documentation\n\n| Document | Scope |\n|----------|-------|\n| [AGENTS.md](AGENTS.md) | Contract between supervisor, agent, and noaide |\n| [docs/architecture.md](docs/architecture.md) | Components, data flows, wire format, threading model |\n| [docs/api.md](docs/api.md) | HTTP endpoint reference for the control plane |\n| [docs/agent-operating-model.md](docs/agent-operating-model.md) | How noaide watches agents (JSONL, PTY, filesystem) |\n| [docs/supervision-boundaries.md](docs/supervision-boundaries.md) | Control surfaces and what noaide does vs. does not enforce |\n| [docs/security-deep-dive.md](docs/security-deep-dive.md) | Threat model, redaction rules, eBPF trust model, header rationale |\n| [docs/evidence-loop-details.md](docs/evidence-loop-details.md) | EventEnvelope, Lamport clock, persistence layers, audit-log NDJSON schema |\n| [docs/component-reference.md](docs/component-reference.md) | Per-module reference: what each crate/module owns, what it publishes, where its config lives |\n| [docs/deployment-guide.md](docs/deployment-guide.md) | Operator guide: Docker compose, systemd, TLS, browser support |\n| [docs/adr/001-production-deployment.md](docs/adr/001-production-deployment.md) | ADR-001: production deployment is single-process container, Chromium-only |\n| [CONTRIBUTING.md](CONTRIBUTING.md) | Branch flow, commit discipline, PR checklist |\n| [SECURITY.md](SECURITY.md) | Security controls in place and on the roadmap |\n| [TESTING.md](TESTING.md) | Test gate matrix |\n| [llms.txt](llms.txt) | 11 ADRs behind the architecture decisions |\n\n## Security\n\nAPI keys (`sk-ant-*`, `Bearer *`) are automatically redacted in all logs and UI via regex. The API proxy only forwards to `api.anthropic.com` (whitelist). All transport uses TLS 1.3 via QUIC. See [SECURITY.md](SECURITY.md) for vulnerability reporting.\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\u003csub\u003eBuilt with Rust, SolidJS, and too many late nights reading JSONL files.\u003c/sub\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsilentspike%2Fnoaide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsilentspike%2Fnoaide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsilentspike%2Fnoaide/lists"}