| name | search |
| description | Navigate the agnt codebase โ find where features live, how subsystems connect, and which files own what |
agnt Codebase Search Guide
Use this skill when you need to find where something is implemented, understand how subsystems connect, or orient yourself before making changes.
Package Map
| Package | Owns |
|---|
cmd/agnt/ | CLI entry points, PTY wrapper, MCP server bootstrap |
internal/daemon/ | Background service, session/process/proxy lifecycle, IPC hub |
internal/proxy/ | Reverse HTTP proxy, traffic logging, JS injection, WebSocket |
internal/tools/ | All MCP tool implementations and schemas |
internal/overlay/ | Terminal status bar, popup menus, ANSI output filtering |
internal/chromedp/ | Browser automation sessions (CDP) |
internal/browser/ | Chrome/Chromium process lifecycle |
internal/tunnel/ | Cloudflare/ngrok tunnel management |
internal/snapshot/ | Visual regression: baseline capture, image diffing |
internal/aichannel/ | AI agent CLI/API abstraction (Claude, Gemini, Copilotโฆ) |
internal/automation/ | Prompt-driven task processing via claude-go |
internal/project/ | Project type detection (Go/Node/Python) |
internal/config/ | .agnt.kdl parsing, proxy/script config |
internal/protocol/ | IPC verb definitions and request/response types |
internal/store/ | Persistent key-value storage (global/folder/page scopes) |
internal/debug/ | Debug logging to ~/.cache/agnt/logs/ |
Feature Search Index
MCP Tools
- All tool registrations:
grep -r "Register.*Tools\|mcp.NewTool" internal/tools/
- Tool handler pattern:
internal/tools/daemon_tools.go โ handleProxy*, handleProc*
- Tool schemas (input/output structs):
grep "json:\"" internal/tools/*.go
- get_errors tool:
internal/tools/get_errors.go
- responsive_audit tool:
internal/tools/responsive_audit.go
- daemon MCP tools (proc, proxy, proxylog, daemon):
internal/tools/daemon_tools.go
Daemon โ Process Lifecycle
- Process start/stop:
internal/daemon/daemon.go โ StartScript, autostartScript, CleanupSessionResources
- Autostart orchestration:
daemon.go โ RunAutostart, startAutostartScripts
- Dependency ordering:
internal/daemon/process_readiness.go โ ProcessReadiness, MarkReady/Failed/Exited, Wait
- See also:
docs/plans/2026-03-15-process-dependency-ordering-design.md
- Process state machine:
internal/daemon/daemon.go + go-cli-server/process
- Script registry (ephemeral, rebuilt per session):
go-cli-server/script.Registry
CleanupSessionResources clears it on last session disconnect
- Auto-restarter:
internal/daemon/auto_restart.go
- Port conflict pre-flight:
internal/daemon/port_preflight.go
- Alert scanning (compile errors, panics):
internal/overlay/alerts.go โ internal/daemon/alert_store.go
Daemon โ Proxy Lifecycle
- Event pipeline (URLDetected โ proxy creation):
internal/daemon/proxy_events.go
handleURLDetected โ URL in script output โ find matching proxy config โ create proxy
handleFallbackPortCheck โ fallback-port used when URL detection fails
handleScriptStopped โ cleans up proxies linked to a script
- See also:
.claude/rules/proxy-events.md
- Proxy creation from config:
internal/daemon/daemon.go โ autostartProxy
- Scriptโproxy tracking (which proxies belong to which script):
scriptProxies map + trackScriptProxy
Daemon โ Sessions & IPC
- Hub handlers (all IPC verbs):
internal/daemon/hub_handlers.go
- PROC LIST/START/STOP, PROXY LIST/START/STOP, SCRIPT LIST, SESSION LIST, ALERTS QUERY, DOCTOR RUN
- Session registration:
internal/daemon/daemon.go โ handleSessionRegister
- Session registry:
go-cli-server/session.Registry
- IPC verb constants:
internal/protocol/commands.go
- Client-side IPC:
internal/daemon/client.go
Daemon โ Health & Diagnostics
- Doctor checks (all check functions):
internal/daemon/doctor.go
checkProcessHealth, checkProxyHealth, checkMissingProxies, checkRunningWithErrors, checkSessionHealth, checkStartupErrors, checkProcessTree
- Startup log (per-process events):
internal/daemon/startup_log_store.go
- Alert store (ring buffer of process alerts):
internal/daemon/alert_store.go
- Rogue process detection:
hub_handlers.go โ detectRogueProcess
- Reconciliation model:
.claude/rules/daemon-architecture.md
Reverse Proxy
- ProxyServer (HTTP reverse proxy + WS + JS injection):
internal/proxy/server.go
- ProxyManager (registry, fuzzy lookup, path-scoped):
internal/proxy/manager.go
GetWithPathFilter โ project-scoped lookup
ErrProxyAmbiguous โ multiple fuzzy matches
- Traffic logging (1000-entry ring buffer, 14 log types):
internal/proxy/logger.go
- JS injection into HTML responses:
internal/proxy/injector.go
- WebSocket upgrade:
internal/proxy/websocket.go
- URL tracking (detects dev server URLs in process output):
internal/daemon/urltracker.go
- URL matchers (config-driven regex):
internal/daemon/urlmatcher.go
Overlay & PTY
- PTY wrapper entry point:
cmd/agnt/run.go โ runCommand
- Output filtering (blocks alt-screen, clamps scroll region):
internal/overlay/filter.go
- Output gate (freeze/unfreeze during menus):
internal/overlay/gate.go
- Summarizer (formats process/proxy data for overlay):
internal/overlay/summarizer.go
- Alert scanner (classifies output: compile errors, panics, warnings):
internal/overlay/alerts.go
- Cross-process data flow:
cmd/agnt/pty_common.go โ wires scanner โ daemon alert push
Browser Automation
- CDP session management:
internal/chromedp/manager.go, session.go
- Screenshot capture:
internal/chromedp/session.go โ CaptureScreenshot
- Browser process lifecycle:
internal/browser/browser.go
Configuration
.agnt.kdl parsing: internal/config/agnt.go
- Proxy config (script linking, fallback-port, url-matchers):
internal/config/agnt.go โ ProxyConfig
- Script config (run, cwd, depends-on, ports, autostart):
internal/config/agnt.go โ ScriptConfig
- Dependency parsing + topo sort:
internal/config/agnt_deps.go
- Config contracts (what fields must be honored):
.claude/rules/config-contracts.md
Platform (WSL / Windows / Linux)
- Platform detection:
internal/platform/wsl.go โ IsWSL(), ShouldUseWindowsShell(path)
- Never use
runtime.GOOS directly in WSL-aware code โ always use platform package
- Cross-platform mandate:
.claude/rules/daemon-architecture.md
Key Architectural Rules
Before changing anything in internal/daemon/ read:
.claude/rules/daemon-architecture.md โ personas, source of truth, silent failure rules
.claude/rules/daemon-lifecycle.md โ process/proxy state machines, session ownership
.claude/rules/proxy-events.md โ event pipeline, known silent failure points
Before changing anything in internal/proxy/ or internal/config/ read:
.claude/rules/config-contracts.md โ fields that are parsed must be acted on
Import cycle constraint:
daemon cannot import overlay (overlay imports daemon via status types)
- Use string parameters or interfaces to cross this boundary
- Conversion happens in
cmd/agnt/pty_common.go
Common Search Patterns
grep -n "VerbProxy\|\"PROXY\"" internal/daemon/hub_handlers.go internal/protocol/commands.go
grep -n "URLDetected\|ScriptStopped\|FallbackPortCheck\|ExplicitStart" internal/daemon/
grep -n "type.*Input\|type.*Output" internal/tools/*.go
grep -n "MarkReady\|MarkFailed\|MarkExited\|MarkStarting\|\.Wait(" internal/daemon/daemon.go
grep -rn "scriptRegistry\." internal/daemon/daemon.go
grep -rn "FallbackPort\|fallback.port" internal/
grep -n "^func (d \*Daemon) hubHandle" internal/daemon/hub_handlers.go
grep -n "^func check" internal/daemon/doctor.go
Data Flow Diagrams
Dev Server URL โ Proxy Creation
Process stdout โ URLTracker.Scan()
โ url-matchers (or regex scan)
โ onURLDetected(processID, url)
โ processReadiness.MarkReady(processID)
โ proxyEvents <- URLDetected{...}
โ handleURLDetected()
โ load .agnt.kdl
โ find ProxyConfig where Script == scriptName
โ proxym.Create(proxyID, targetURL)
Process Exit โ Dependency Unblocked
ProcessManager removes process
โ URLTracker.cleanupRemovedProcesses()
โ onProcessStopped(processID)
โ processReadiness.MarkExited(processID) โ unblocks all waiters immediately
โ proxyEvents <- ScriptStopped{...}
โ handleScriptStopped() โ stop linked proxies
MCP Tool Call โ Daemon IPC
AI Agent calls MCP tool (e.g. proc {action:"list"})
โ internal/tools/daemon_tools.go handler
โ DaemonTools.client.SendCommand("PROC LIST", filter)
โ Unix socket โ daemon hub_handlers.go
โ hubHandleProcList() โ ProcessManager.List()
โ JSON response โ tool output
Session Connect โ Autostart
agnt run / Claude Code session
โ daemon.handleSessionRegister()
โ session added to registry
โ RunAutostart(projectPath)
โ load .agnt.kdl
โ port conflict pre-flight
โ TopologicalSort(scripts) โ layers
โ for each layer: startAutostartScripts()
โ processReadiness.MarkStarting(pid)
โ waitForDependencies() โ processReadiness.Wait(depPid)
โ autostartScript() โ StartScript()