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:
| What | Location |
|---|---|
| Sessions, messages, tool history | opencode — ~/.local/share/opencode/ |
| Provider API keys | opencode — ~/.local/share/opencode/auth.json |
| Per-session preview URL | Electron userData — session-prefs.json |
| Active provider selection | Electron userData — app-config.json |
Electron userData paths:
| Platform | Path |
|---|---|
| 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 viash -cin the project directory. A.envfile 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.