ide/CLAUDE.md
Snider e2281f8c88
Some checks failed
Security Scan / security (push) Successful in 8s
Test / test (push) Failing after 58s
feat: modernise IDE with ecosystem packages
Replace 7 hand-rolled service files (mcp_bridge, webview_svc, brain_mcp,
claude_bridge, headless_mcp, headless, greetservice) with ecosystem
packages from core/gui, core/mcp, and core/go-ws.

Three operating modes: GUI (Wails systray), MCP (--mcp stdio for Claude
Code), and headless (no display). Core framework manages all service
lifecycles via dependency injection.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-14 09:18:55 +00:00

3.5 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Build & Development Commands

# Development (hot-reload GUI + Go rebuild)
wails3 dev

# Production build (preferred)
core build

# Frontend-only development
cd frontend && npm install && npm run dev

# Go tests
core go test                    # All tests
core go test --run TestName     # Single test
core go cov                     # Coverage report
core go cov --open              # Coverage in browser

# Quality assurance
core go qa                      # Format + vet + lint + test
core go qa full                 # + race detector, vuln scan, security audit
core go fmt                     # Format only
core go lint                    # Lint only

# Frontend tests
cd frontend && npm run test

Architecture

Thin Wails shell wiring ecosystem packages via core.Core dependency injection. Three operating modes:

GUI Mode (default)

main() → Wails 3 application with embedded Angular frontend, system tray (macOS: accessory app, no Dock icon). Core framework manages all services:

  • display (core/gui) — window management, webview automation, 74 MCP tools across 14 categories
  • MCP (core/mcp) — Model Context Protocol server with file ops, brain subsystem, GUI subsystem
  • IDE bridge (core/mcp/pkg/mcp/ide) — WebSocket bridge to Laravel core-agentic backend
  • WS hub (core/go-ws) — WebSocket hub for Angular frontend communication

MCP Mode (--mcp)

core-ide --mcp → stdio MCP server for Claude Code integration. No GUI, no HTTP. Configure in .claude/.mcp.json:

{
    "mcpServers": {
        "core-ide": {
            "type": "stdio",
            "command": "core-ide",
            "args": ["--mcp"]
        }
    }
}

Headless Mode (no display or gui.enabled: false)

Core framework runs all services without Wails. MCP transport determined by MCP_ADDR env var (TCP if set, stdio otherwise).

Frontend

Angular 20+ app embedded via //go:embed. Two routes: /tray (system tray panel, 380x480 frameless) and /ide (full IDE layout).

Configuration

# .core/config.yaml
gui:
  enabled: true          # false = no Wails, Core still runs
mcp:
  transport: stdio       # stdio | tcp | unix
  tcp:
    port: 9877
brain:
  api_url: http://localhost:8000
  api_token: ""          # or CORE_API_TOKEN env var

Environment Variables

Variable Default Purpose
CORE_API_URL http://localhost:8000 Laravel backend WebSocket URL
CORE_API_TOKEN (empty) Bearer token for Laravel backend auth
MCP_ADDR (empty) TCP address for MCP server (headless mode)

Workspace Dependencies

This module uses a Go workspace (~/Code/go.work) with replace directives for sibling modules:

  • ../goforge.lthn.ai/core/go
  • ../guiforge.lthn.ai/core/gui
  • ../mcpforge.lthn.ai/core/mcp
  • ../go-configforge.lthn.ai/core/go-config
  • ../go-wsforge.lthn.ai/core/go-ws

Conventions

  • UK English in documentation and user-facing strings (colour, organisation, centre).
  • Conventional commits: type(scope): description with co-author line Co-Authored-By: Virgil <virgil@lethean.io>.
  • Licence: EUPL-1.2.
  • All Go code is in package main (single-package application).
  • Services are registered via core.WithService or core.WithName factory functions.
  • MCP subsystems implement mcp.Subsystem interface from core/mcp.