AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Emacs for the agentic era. One app for everything: a dockable workspace of
panes where a local-model agent is a first-class citizen — it opens your windows,
reads your library, drives a real browser, queries your databases, plays Doom
against your friends' agents, and phones other people's nodes over a peer-to-peer
fabric. One React frontend, two layouts: the browser (apps/web) and a
cross-platform desktop app (apps/desktop, Tauri). A Python FastAPI backend
(backend/) is the brain.README 전문 보기 ↗
Emacs for the agentic era. A unified, one-stop operating environment where local and cloud AI models are first-class desktop citizens — opening your windows, reading your library, driving a real headless browser, querying your SQL & vector databases, coordinating across an end-to-end peer-to-peer fabric, and battling agents in Doom or humans in a full 3D tactical FPS.
One monorepo powers the entire ecosystem:
apps/web) — the full browser desktop experience.apps/desktop) — cross-platform Electron shell that supervises and manages its own local FastAPI backend.apps/assault-web & apps/native-fps) — tactical 3D multiplayer FPS playable in-browser or via an ultra-low-latency native Rust client.apps/mobile-android) — native Android client pairing via QR code to control panes, stream chat, and expose mobile sensors over the peer wire.deploy/) — multi-tenant hosted hub on Fly.io, central game server, and WebRTC media relay.agent.ask_peer), WebRTC WHIP/WHEP screen sharing, and a signed Commons with @username profiles and mutual consent.| Requirement | Version | Purpose |
|---|---|---|
| Node.js | ≥ 20 LTS | Frontend runtime for Vite and pnpm |
| pnpm | 10.28.2 | Workspace package manager (corepack enable) |
| Python | ≥ 3.12 | FastAPI backend runtime (backend/) |
| uv | latest | Python virtual environment and dependency manager |
| Rust (optional) | stable toolchain | Needed for apps/native-fps only |
# Enable the pinned pnpm version and install dependencies
corepack enable
pnpm install
# Set up backend Python virtual environment and core dependencies
uv sync
# 1. Full Browser Stack (Backend :8000 + Vite UI :5173 + Game Server :9200)
pnpm dev
# 2. Desktop Layout (Electron window supervising the local backend)
pnpm dev:desktop
# 3. Dedicated HorribleAssault Web Game
pnpm dev:assault-web
# 4. Native Rust 3D Client for HorribleAssault
cargo run --manifest-path apps/native-fps/Cargo.toml --release
Open http://localhost:5173 to land on home: your 3D avatar, an ask bar wired to your local model (defaulting to Ollama gemma4:e2b or any OpenAI-compatible provider), and your external connector tiles.
pnpm dev:lan — bind backend and frontend to 0.0.0.0 for LAN access (needed for phone pairing and peer fabric).pnpm dev --no-gameserver — run without the bundled central game server.pnpm dev:web — run the frontend only against an existing backend.horrible-dashboard/
├── apps/
│ ├── web/ # Browser dashboard layout (Vite + React 19)
│ ├── desktop/ # Desktop shell (Electron + backend supervisor)
│ ├── assault-web/ # Dedicated browser client for HorribleAssault
│ ├── native-fps/ # High-performance native 3D Rust client (wgpu + prediction)
│ └── mobile-android/ # Native Android companion app (Kotlin + QR pairing)
├── packages/
│ ├── core/ # Module registry, state stores, commands, API client
│ ├── ui/ # Floating window shell, taskbar, start menu, themes
│ ├── sdk/ # Public frontend plugin authoring SDK
│ ├── webml/ # In-browser WebGPU / WASM GGUF inference engine
│ └── scrive-runtime/ # Document generation and outline runtime
├── backend/
│ ├── app.py # FastAPI entrypoint, router aggregation, lifespan hooks
│ ├── modules/ # 40+ modular backend domains (agent, hassault, db, etc.)
│ ├── games_server/ # Central games platform, matchmaker, ELO ladder, store
│ ├── games_engine/ # Match simulation engines (games + native ViZDoom)
│ ├── hub/ # Multi-tenant user instance spawner (Fly & Docker)
│ └── sdk/ # Server-side plugin SDK and extension hooks
├── deploy/ # Dockerfiles and configs for Fly.io and cloud services
├── docs/ # Docusaurus documentation (kept in strict sync with code)
└── tools/ # Blender procedural map generators, baking, audio scripts
Everything in horrible-dashboard is a module: it declares its panes, commands, keybindings, agent tools, and settings in one place, plugging seamlessly into the desktop shell.
llama-server instances, vLLM, LM Studio, or cloud providers (NIM, OpenRouter, Anthropic, OpenAI).stdio, http, or sse. External tools inherit permission gating and context budgeting.SKILL.md format with progressive disclosure, on-demand loading, and dynamic tool group activation.hd_mirage — Moroccan palace colonnades, coffered ceilings, sniper pergola, and skyline.hd_inferno — Tuscan villas, cantilevered balconies, church ruins with rose windows.hd_nuke — Nuclear facility with ceiling MEP, telemetry stations, clerestory buttresses.hd_office — Corporate high-rise with acoustic baffles, cable trays, and city skyline.hd_junkflea — Industrial container depot with crane runway girders and lean-to roofs.hd_facility — High-bay bunker with mezzanine control consoles and coolant pit.hd_aim — Dedicated target practice range with monorail targets and scoring monitors.apps/native-fps). Shared vector fixtures guarantee cross-client simulation consistency.rec_*) with an agent write path that proposes field values with provenance tags for human-in-the-loop verification.llms.txt-first crawler that indexes versioned API docs directly into your local vector collection.git.commit stamps active conversation IDs into commit history so you can click from git blame directly to the chat turn that wrote the code).point), symbol outline, and semantic codebase search..ipynb notebook combining JupyterLab execution with a marimo-style reactive dataflow engine, native ipywidgets, and custom anywidget ESM/CSS views.yt-dlp, pitch-shifting, and a VoiceMeeter-style virtual audio matrix routing multiple inputs to multiple output buses.agent.ask_peer) with progressive trust boundaries and read-only sandboxing.@username handles bound to device certificates. Adding a friend grants mutual fabric trust across all their devices.mobile.*).A dedicated arena where agents play the games:
| Surface | Package | Capabilities |
|---|---|---|
| Frontend | @horrible/sdk | Panels, widgets, commands, context menus, themes, keybindings |
| Backend | backend.sdk | HTTP routes, agent tool groups, WebSocket channels, lifespan hooks |
| Scripting | dash REPL | Drive the running application from Python (panes, workspaces, layout, settings) |
| Telemetry | horrible-trajectories | Python client for exporting agent trajectory steps and evaluations |
| Protocols | MCP & Skills | Standard Model Context Protocol servers and Anthropic SKILL.md bundles |
Core dependencies install on any system. Specialized modules are lazy-imported and enabled via uv extras:
# CLIP visual embeddings for appearance-based image search
uv sync --extra clip
# Headless Chromium for the embedded browser (run once: npx playwright install chromium)
uv sync --extra browser-engine
# Native ViZDoom engine for agent Deathmatch duels
uv sync --extra games-native
# Voice support (local Whisper speech-to-text + Edge TTS)
uv sync --extra voice
# Additional vector databases (Chroma, Qdrant, Weaviate)
uv sync --extra vectordb
# Oracle Database & 23ai AI Vector Search driver
uv sync --extra oracle
# In-process llama.cpp tensor activation tracing
uv sync --extra llamacpp
# WebRTC datachannel transport for NAT traversal
uv sync --extra webrtc
# Hosted Hub Docker spawner (for multi-tenant hub hosts)
uv sync --extra hub
Horrible Dashboard can be deployed across modern cloud infrastructure:
vercel.json rewrites to the hub).horrible-hub): Runs on Fly.io (fly.hub.toml), managing user authentication and orchestrating dedicated per-user containerized backend instances (fly.hub-instances.toml).horrible-games): Standalone, always-on game server hosted on Fly.io (fly.lobby.toml & Dockerfile.lobby). Deploy via pnpm deploy:games.share-relay): Dedicated WebRTC SFU for low-latency video streaming (fly.share.toml).docs/.
pnpm --filter @horrible/docs start # run docs locally with live reload
pnpm --filter @horrible/docs build # build Docusaurus site
CLAUDE.md.