Coodeen
Getting Started

Configuration

Where Coodeen stores state, how project scoping works, and what's tunable.

Data Storage

State is split between Electron and the bundled opencode sidecar:

WhatLocation
Sessions, messages, tool historyopencode — ~/.local/share/opencode/
Provider API keysopencode — ~/.local/share/opencode/auth.json
Per-session preview URLElectron userData — session-prefs.json
Active provider selectionElectron userData — app-config.json

Electron userData paths:

PlatformPath
macOS~/Library/Application Support/coodeen/
Windows%APPDATA%/coodeen/
Linux~/.config/coodeen/

Nothing leaves your machine except requests to the AI provider endpoint.

Project Directory

Each session is scoped to a project directory. Opencode requests get an x-opencode-directory header (encoded) and a directory query param, so the agent's reads, writes, and shell commands stay inside that folder.

You pick a folder via the folder button in the chat composer before sending the first message of a session. Once a session has been started, the folder is locked — opencode binds it to the session at create time and there's no in-place rename. Sessions remember their own project dir in opencode and surface it again when you reopen the session via URL or sidebar.

The session list pulls every known project from opencode's global project table, then issues one /session request per project (header-only routing) and merges the results. So a session created against any directory shows up in the sidebar regardless of which folder is currently active.

Preview URL

The preview panel defaults to http://localhost:3000 and is editable inline. It's persisted per session in session-prefs.json.

coodeen.json

Optional file at the project root. Two independent blocks:

  • actions — buttons in the top bar that run scripts via sh -c in the project directory. A .env file alongside is loaded into the child's environment.
  • design — page list rendered on the Design Canvas. Generated automatically the first time you open the Design tab; can also be hand-edited.
{
  "name": "my-app",
  "actions": [
    { "label": "Dev", "script": "bun run dev" },
    { "label": "Test", "script": "bun run test" }
  ],
  "design": {
    "host": "http://localhost:3000",
    "pages": [
      { "route": "/" },
      { "route": "/login" },
      { "route": "/dashboard" }
    ]
  }
}

The main process watches the file via chokidar and broadcasts a coodeen:changed event so the design canvas refreshes live whenever the file is rewritten by you or the agent.