- JavaScript 79.5%
- TypeScript 11.8%
- Go 7.4%
- CSS 0.5%
- HTML 0.5%
- Other 0.1%
Two small UX fixes following the local-first tasks switch: 1. Panel rename to "Tasks". User-facing label, panel id, route, and keyboard shortcut binding all use 'tasks' now. The internal file path (pages/dev/mantis/mantis.component.ts) stays — that's a bigger refactor and the Lit migration will move it anyway. Touched: builtin-panels.ts (id+label+route), app.routes.ts (path), ide.component.ts (keyboard shortcut id list + command palette entry). 2. Systray icon-only on macOS. Snider 2026-05-11 screenshot showed "core-ide" text alongside the icon in the menu bar — macOS shows EITHER icon OR text. Setting TaskSetTrayLabel.Label="" yields icon-only, which is the intended shape for a status-bar resident app. Menu dropdown items still say "core-ide" (those are rows, not the bar label). Touched: pkg/server/gui.go. Co-Authored-By: Virgil <virgil@lethean.io> |
||
|---|---|---|
| .core | ||
| .forgejo/workflows | ||
| .github/workflows | ||
| build | ||
| docs | ||
| external | ||
| frontend | ||
| go | ||
| icons | ||
| workspace/conventions | ||
| .gitignore | ||
| .gitmodules | ||
| .woodpecker.yml | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| go.work | ||
| go.work.sum | ||
| LICENCE | ||
| README.md | ||
| sonar-project.properties | ||
| Taskfile.yml | ||
| wails3-angular-template.jpg | ||
core/ide
Lethean Desktop's IDE — the compile target. Wails frontend + Go binary; mounts agent + scm + workspace. The default brand is Lethean (cool indigo, hue 270); Host UK customers can flip the brand at runtime via
[data-brand="hostuk"].
What this binary IS
core/ide compiles to the binary that ships as Lethean Desktop — the native umbrella product across Darwin / Linux / Windows / iOS / iPadOS. The plan that defines what Lethean Desktop is, what it composes, how the platform profiles work, and where the design system comes from lives in the canonical plans tree:
- Plan:
plans/project/lthn/desktop/RFC.md— Lethean Desktop convergence + service composition + Vi Control Panel as the spine - Design system:
plans/ops/hostuk/website/_design/lethean-3/— Lethean-3 unified design drop, Wails Darwin / iOS / iPadOS native profiles, Vi mascot canon - Vi Control Panel pattern: the spine of the desktop shell (per the native handoff README in the design drop). Same logical component tree across web (
control.host.uk.com) + native (this binary). Brand swap via[data-brand], platform swap via[data-platform]. - Service composition rule: if a capability isn't defined in the plans tree, it isn't real. This binary owns the composition (which packages it pulls in, how they wire at boot, how Vi surfaces them); the implementation of each capability lives in its canonical home (blockchain, mining, encryption, etc.).
What Does core-ide Actually Do
core-ide exposes the Core IDE runtime as MCP tools, named Core actions, and a local chat shell.
It wires workspace inspection, OpenBrain memory, subagent relay, navigation, and package marketplace helpers into one process.
It can run as stdio MCP for editor clients, HTTP MCP for local agents, or a Wails desktop shell.
The GUI mode mounts chat and MCP against the same in-process executor so tool results match non-GUI mode.
HTTP mode is local-only and bearer-token gated by default.
Connect It To Claude Code
{
"mcpServers": {
"core-ide": {
"command": "core-ide",
"args": ["--mcp"]
}
}
}
Running Modes
| Mode | Command | Use case |
|---|---|---|
| stdio MCP | core-ide --mcp |
Claude Code, Cursor, Continue |
| HTTP MCP | core-ide --no-gui --http 127.0.0.1:9880 --token $TOK |
JetBrains, remote agents |
| GUI shell | core-ide (default) |
local desktop with chat |
Wildcard binds such as :9880 and 0.0.0.0:9880 are rejected; use an explicit loopback address.
Tools You Get
The 19-tool MCP/action parity check is enforced in pkg/server/integration_action_parity_test.go.
brain_recallbrain_rememberbrain_forgetbrain_listbrain_contextworkspace_statusworkspace_conventionsworkspace_impactworkspace_scansubagent_guidesubagent_asksubagent_progresssubagent_watch(supportscursor,limit,nextCursor, andhasMorefor paged event history)subagent_answersubagent_dispatch_guidedcore_navigatepkg_searchpkg_infopkg_install
What's Hardened
- HTTP mode refuses to start without a bearer token.
- REST and MCP-over-HTTP requests require
Authorization: Bearer <token>; missing or wrong tokens return401. - HTTP and relay listeners must bind to
localhostor a loopback IP; wildcard and externally routable addresses are rejected. - HTTP read-header, read, write, and idle timeouts are bounded.
- HTTP headers are capped at 1 MiB and request bodies at 10 MiB.
- The relay listener is only enabled when a relay path, loopback bind, and bearer token are configured.
Live OpenBrain Smoke
The live OpenBrain test is build-tagged and skipped by default:
CORE_BRAIN_INTEGRATION=1 CORE_BRAIN_KEY=$CORE_BRAIN_KEY \
go test -tags integration -run TestLive ./pkg/brain/...
End-to-End Smoke
After building changes, run:
tests/smoke/run-end-to-end.sh
The script builds /tmp/core-ide, verifies stdio MCP exposes 19 tools, verifies HTTP bearer auth exposes the same 19 tools, calls workspace_status through the HTTP tool bridge, checks malformed tool input and schema validation failures, checks unauthenticated HTTP returns 401, and confirms HTTP mode without a token exits with status 1.