file per
dashboard surface, mounted by `hermes_cli/web_server.py` (+ `web_server_*.py` siblings). Frontend:
`web/src/`. Shared JSON-RPC/WS client: `apps/shared` (`@hermes/shared`), also used by the desktop.
## The dashboard embeds
runner reuses `web/.next/BUILD_ID` when present. Set `E2E_FORCE_WEB_BUILD=1` to force a frontend rebuild. Use `E2E_BROWSER=webkit` for focused cross-browser runs and `E2E_SLOW
Frontend Workflow
- Read `docs/test.md` only for frontend test work and `docs/lint.md` only when running or changing static checks.
- Use the repo-local `how-to-write-component` skill when implementation requires
Refactoring / simplification → `code-simplification`
- API or interface design → `api-and-interface-design`
- UI work → `frontend-ui-engineering`
### Lifecycle Mapping (Implicit Commands)
OpenCode does not support slash commands like `/spec
layers.
## Current stack
- Backend: Python 3.13+, Quart-based API server, Peewee ORM, async workers.
- Frontend: React + TypeScript + Vite in `web/`. When working under `web/`, read and follow `web/AGENTS.md` — it holds
Compiler Architecture
## Intro
Consider reading [fir-basics.md](../docs/fir/fir-basics.md).
## Two Frontends
1. **K1/FE 1.0 (Legacy)**: Located in `compiler/frontend/` - uses PSI and BindingContext
2. **K2/FIR (Current)**: Located in `compiler/fir/` - Frontend
accessibility intact, defaults and stored data preserved, and no backend capability left without a
frontend entry point. Report the pushed head, what you ran locally, CI state, the review result
Frontend Development Guide
> For critical commands and testing rules, see the "Command Execution Guide" section in `/AGENTS.md` in the repository root.
## Frontend Tech Stack
- **Language**: TypeScript
- **Framework**: React 19
- **Build
Guide" section in `/AGENTS.md` in the repository root.
>
> This guide covers Python tests. For frontend React/TypeScript tests (`*.spec.tsx`, RTL, `MockApiClient`), use the **`react-testing`** skill.
## How to Determine Where
columns/tables over adding parallel structures.
### Widget config sync (CRITICAL)
Server widget config (`src/modules/apps/services/widget-config/`) and frontend config (`frontend/src/AppBuilder/WidgetManager/widgets/`) must change together. If a config change moves, renames, or removes
them; `AcpRuntimeCatalogEntry` exposes them over IPC; and
`lib/agentConfigCore.ts` projects them into field descriptors. The frontend
never maintains a rival copy of this table. Setup guidance follows the same
rule: `requires