-
Notifications
You must be signed in to change notification settings - Fork 0
Data Storage and Migration
Every persistent file ClusterSpace writes, where it lives, what's in it, and how the fleet-term → clusterspace rename migration runs.
<userData>/clusterspace-data/
├── *.json # electron-store state files (see below)
├── config/
│ ├── personas/<id>.md # user-authored personas (overrides defaults)
│ ├── skills/<id>.md # user-authored skills
│ ├── tasks/<category>/<id>.md # user-authored task templates
│ └── tools/<name>.js # user plugin tools (hot-reload)
└── browser-screenshots/ # vision tool screenshots (auto-cleanup roadmap)
<userData> paths:
- Windows:
%APPDATA%\ClusterSpace\ - macOS:
~/Library/Application Support/ClusterSpace/ - Linux:
~/.config/ClusterSpace/
All written by electron-store. JSON only — no binary blobs, no DB.
| File | Owner | Contents |
|---|---|---|
clusterspace-workspaces.json |
workspace-store.ts |
Array of workspaces. Each has grid config, pane list, settings |
clusterspace-settings.json |
workspace-store.ts |
Global app settings + active workspace ID + window bounds reference |
clusterspace-window-state.json |
workspace-store.ts |
Window x/y/width/height + maximized flag |
clusterspace-ssh-servers.json |
credentials-store.ts |
SSH server list (passwords safeStorage-encrypted) |
clusterspace-ai-providers.json |
ai-store.ts |
AI provider configs (API keys safeStorage-encrypted) |
clusterspace-ai-memory.json |
ai-memory-store.ts |
Conversations (per provider × workspace × pane, max 50, max 100 msgs each) |
clusterspace-agents.json |
agent-store.ts |
Per-pane agent state |
clusterspace-goals.json |
goal-store.ts |
Goal checkpoints (max 50, in-flight always kept) |
clusterspace-orchestration.json |
orchestration-store.ts |
Multi-pane orchestration goals + event log (last 500) |
clusterspace-browser-pane-state.json |
browser-store.ts |
Browser tabs, bookmarks, history, downloads, find-in-page |
clusterspace-browser-credentials.json |
browser-credentials-store.ts |
Saved logins (passwords safeStorage-encrypted) |
clusterspace-recipes.json |
browser-recipes.ts |
Saved browser recipes |
Each is independent — corrupt one and the others still load. Default values fill in if a file is missing.
Three classes of secret material:
| Secret | Where | Encryption |
|---|---|---|
| SSH passwords | clusterspace-ssh-servers.json |
safeStorage (OS keychain), base64 fallback with warning |
| AI provider API keys | clusterspace-ai-providers.json |
safeStorage |
| Browser saved logins | clusterspace-browser-credentials.json |
safeStorage |
Conversation history, bookmarks, history, goal logs, agent state — not encrypted. Treat the userData dir as sensitive even though only the keychained values are encrypted.
| Store | Cap | Trim policy |
|---|---|---|
| AI conversations | 50 × 100 msgs | Oldest first; current always kept |
| Goal log | 50 goals | Finished oldest dropped first; in-flight always kept |
| Goal step log | 500 steps per goal | head 50 + tail 450 (middle dropped) |
| Orchestration events | 500 | Oldest first |
| Browser action log | 500 (in-memory ring) | Oldest first; not persisted |
| Browser history | 500 entries | Oldest first |
These are constants in the respective store files; edit and rebuild to change.
The app was originally Fleet Term. On the first launch after the rename, src/main/legacy-rename.ts runs a one-time migration:
- Check for
<userData>/fleet-term-data/(the legacy directory) - If found and
<userData>/clusterspace-data/doesn't exist:- Copy the entire directory tree to
clusterspace-data/ - Rename
fleet-term-*.jsonfiles toclusterspace-*.json(in place inside the new dir) - Do not delete the legacy dir — keep it as a backup
- Copy the entire directory tree to
- If
clusterspace-data/already exists, skip (avoid overwriting user data)
User-authored config files (personas, skills, tasks, tools) under config/ are copied as-is; their names don't include the app name.
The rename does not touch tmux sessions on remote hosts. Sessions named fleet-term-pane-<short> continue to exist on remote hosts; ClusterSpace creates new sessions with clusterspace-pane-<short> names. The SSH-and-tmux surfaces a "Legacy suggestion" chip to recover old sessions one-click.
To migrate a remote session name yourself:
ssh user@host tmux rename-session -t fleet-term-pane-abc clusterspace-pane-abcRecommended backup scope:
| Priority | Path | Why |
|---|---|---|
| Critical |
<userData>/clusterspace-data/ (whole dir) |
Workspaces, providers, agents, goals, all secrets |
| Critical | <userData>/clusterspace-data/config/ |
Your custom personas / skills / templates / plugins |
| Optional | <userData>/clusterspace-data/browser-screenshots/ |
Vision tool outputs; usually not worth backing up |
| Don't bother |
dist/, node_modules/, the app installer |
Reproducible from source |
⚠ Encryption portability: safeStorage-encrypted blobs are tied to your OS user's keychain key. If you restore the userData dir on a different machine or user, encrypted fields (SSH passwords, API keys, saved logins) won't decrypt. You'll need to re-enter them manually.
To start fresh:
# Quit ClusterSpace first.
# Linux/macOS
rm -rf ~/.config/ClusterSpace/clusterspace-data/ # Linux
rm -rf "~/Library/Application Support/ClusterSpace/clusterspace-data/" # macOS
# Windows (PowerShell)
Remove-Item -Recurse -Force "$env:APPDATA\ClusterSpace\clusterspace-data\"Launching ClusterSpace again recreates everything at defaults.
To wipe specific subsets:
# Just AI providers (re-add them)
rm clusterspace-ai-providers.json
# Just conversation history
rm clusterspace-ai-memory.json
# Just goal log
rm clusterspace-goals.json
# Just browser saved logins
rm clusterspace-browser-credentials.jsonClusterSpace silently regenerates each on next launch.
All state files are plain JSON. Open in any editor:
cat ~/.config/ClusterSpace/clusterspace-data/clusterspace-workspaces.json | jq .Encrypted fields look like base64 blobs (e.g., "apiKey": "AQAAAAA..."). The non-encrypted JSON structure around them is browsable.
⚠ Don't hand-edit while the app is running — electron-store caches values in memory; your edits will be overwritten on next save. Quit first, edit, relaunch.
- Saved-Logins — browser credential storage in detail
- AI-Providers — API key storage
- SSH-and-tmux — SSH server passwords
- Architecture-Overview — which class owns which file
- Troubleshooting — when state files get corrupted
ClusterSpace · Issues · Releases · MIT License · Edit any page via the Edit button (top right of the wiki).
- Workspaces-and-Layout
- Terminal-Panes
- Per-Pane-Tabs
- SSH-and-tmux
- Browser-Panes
- Saved-Logins
- Command-Palette
- Broadcast-Mode
- Settings-and-Configuration
- AI-Overview
- AI-Providers
- AI-Chat-Panel
- AI-Tools-Reference
- Personas
- Skills
- Task-Templates
- Agent-Orchestration
- Fleet-Dashboard
- Goal-Runner-Overview
- Starting-a-Goal
- Success-Criteria
- Goal-Policy-and-Risk-Levels
- Critic-and-Replan
- Vision-Verification
- Goal-Dashboard