Configuration

SubFrame stores configuration at two levels: application settings that apply globally, and project configuration that lives inside each initialized project. This guide covers both.

Settings Panel

Open the Settings panel with Ctrl+, (or from the menu). It contains six tabs:

  • General -- startup behavior, file tree visibility, default project directory
  • AI Tool -- active AI tool selection, start command overrides, custom tools
  • Terminal -- font size, scrollback buffer, tab auto-rename
  • Editor -- minimap, word wrap, font size, theme selection
  • Appearance -- theme presets, custom themes, color pickers, feature toggles
  • Hooks -- Claude Code event hooks, script generation, templates
  • Integrations -- Local API Server, DTSP, SubFrame Server (web/remote)
  • Updates -- auto-update checks, update channels, check intervals
  • About -- version info, license, links, changelog

Changes take effect immediately and are persisted to disk.

SubFrame Server Settings

SubFrame Server can expose the full SubFrame UI in a browser for remote desktop, tablet, and phone access.

SettingDescriptionDefault
Enable SubFrame ServerStart the web server and WebSocket transport for browser accessfalse
Start Server on LaunchAutomatically start SubFrame Server whenever the desktop app opensfalse
Preferred PortUse a fixed port for bookmarks and integrations, or 0 / blank for auto reuse0
Remote Cursor TrackingShow remote mouse or touch activity on the host desktop while a web client is connectedfalse
Allow LAN accessBind to your local network so devices on the same Wi-Fi can connect directly without SSHfalse

When Allow LAN access is off, SubFrame stays on 127.0.0.1 and you should connect through an SSH tunnel. This is the recommended mode for anything beyond a trusted local network.

When Allow LAN access is on, SubFrame binds to 0.0.0.0 and becomes reachable from other devices on the same network. Use this only on trusted home or office Wi-Fi. Android access works directly in Chrome or via a QR code; no SSH tunnel app is required.

SubFrame exposes both a plain Base URL and a tokenized Connection URL in Settings. The base URL is intended for pairing-code or token-entry login from the browser access screen. The connection URL includes the current auth token and is the fastest direct-connect path.

Pairing codes are generated from the desktop app, expire after 5 minutes, and are useful when you do not want to expose the full tokenized URL. QR codes are especially convenient for phone and tablet access on LAN.

When Preferred Port is left in auto mode, SubFrame tries to reuse the last successful port when it is still available. This helps bookmarks, mobile shortcuts, and repeat remote access stay more stable without forcing a permanently fixed port.

-> For the full setup flow, see Remote Access.

General Settings

SettingDescriptionDefault
Open terminal on startupAutomatically create a terminal tab when SubFrame launchesfalse
Show hidden files (.dotfiles)Display files and directories starting with . in the file treefalse
Default Project DirectoryA directory whose subdirectories appear automatically in the project list. Use the folder icon to browse, or the X button to clear. The Scan Now button re-reads the directory on demand.(empty)
Usage Polling IntervalHow often to refresh Claude usage data (0 = off, click to refresh manually). Uses exponential backoff on failures.0 (off)
Highlight User MessagesShow colored markers on terminal lines where you sent a message to Claudetrue

Terminal Settings

SettingDescriptionDefaultRange
Font SizeTerminal text size in pixels1410 -- 24
Scrollback LinesNumber of lines the terminal keeps in its buffer100001,000 -- 100,000
Max TerminalsMaximum number of terminal instances allowed (global, across all projects)91 -- 20
Auto-rename to session nameRename terminal tabs to the detected AI session nametrue--

Terminal Persistence

SettingDefaultDescription
terminal.restoreOnStartuptrueRestore terminals from last session on app launch
terminal.restoreScrollbackfalseSave and restore terminal scrollback content
terminal.autoResumeAgent"prompt"Resume Claude sessions on restore: "auto", "prompt", or "never"
terminal.agentExitTimeout5000Milliseconds before marking an inactive agent as exited (1000-30000)
terminal.maxScrollbackExport5000Maximum lines to save per terminal for scrollback persistence

Editor Settings

The Editor tab controls the built-in CodeMirror 6 editor:

SettingDescriptionDefault
MinimapShow a code minimap for quick navigationfalse
FullscreenOpen editor in fullscreen mode by defaultfalse
ThemeCodeMirror editor themesubframe-dark
Word WrapWrap long lines in the editorfalse
Font SizeEditor text size in pixels12

Appearance Settings

The Appearance tab controls SubFrame's visual theme:

Theme Presets

SubFrame ships with 4 built-in theme presets:

PresetDescription
Classic AmberWarm neutral tones with amber accent (default)
Synthwave TracesPurple, pink, and cyan neon aesthetic with optional scanlines
Midnight PurpleDeep purple tones with violet accents
Terminal GreenClassic green-on-black terminal look

Click any preset card in the gallery to apply it immediately.

Custom Themes

You can create custom themes by adjusting individual color tokens:

  • Accent -- Primary accent color used for highlights, badges, and active elements
  • Background -- Main background color
  • Text -- Primary text color

Click Save as Custom to persist your custom theme. Saved custom themes appear alongside the built-in presets.

Feature Toggles

ToggleDescription
Neon TracesAdds glowing border accents to panels and interactive elements
ScanlinesOverlays subtle CRT-style scanlines on the interface
Logo GlowAdds a soft glow effect to the SubFrame logo

Updater Settings

The Updater tab controls automatic update behavior:

SettingDescriptionDefault
Auto-check for updatesPeriodically check GitHub Releases for new versionstrue
Check intervalHow often to check, in hours4
Allow pre-release updatesWhether to offer beta/alpha/RC versionsauto (matches current version type)

When an update is available, SubFrame shows a notification. You choose when to download and install — updates are never forced.

AI Tool Configuration

SubFrame supports Claude Code, Codex CLI, and Gemini CLI with custom start commands and tool additions.

Full AI Tool Setup guide

Workspace Configuration

SubFrame organizes projects into workspaces. Workspace data is stored globally at ~/.subframe/workspaces.json.

Each workspace contains:

  • A name (e.g., "Default Workspace")
  • A list of projects with their paths, names, SubFrame status, and timestamps

You can:

  • Create new workspaces to group projects by team, client, or purpose
  • Switch between workspaces from the workspace selector in the sidebar
  • Rename or delete workspaces as needed

Projects are added to the active workspace either manually (via the Add Project button) or automatically by scanning the Default Project Directory set in General settings.

Project Configuration

When you initialize a project as a SubFrame project, a .subframe/ directory is created containing project-level configuration and metadata.

.subframe/config.json

This is the per-project configuration file created during initialization:

json
{
  "version": "1.0",
  "name": "my-project",
  "description": "",
  "createdAt": "2025-01-15T10:30:00.000Z",
  "initializedBy": "SubFrame",
  "settings": {
    "autoUpdateStructure": true,
    "autoUpdateNotes": false,
    "taskRecognition": true
  },
  "backlink": {
    "customMessage": "",
    "additionalRefs": []
  },
  "files": {
    "agents": "AGENTS.md",
    "claude": "CLAUDE.md",
    "gemini": "GEMINI.md",
    "structure": ".subframe/STRUCTURE.json",
    "notes": ".subframe/PROJECT_NOTES.md",
    "tasks": ".subframe/tasks.json",
    "quickstart": ".subframe/QUICKSTART.md",
    "docsInternal": ".subframe/docs-internal"
  }
}

Project Settings

SettingDescriptionDefault
autoUpdateStructureAutomatically regenerate STRUCTURE.json (also handled by git pre-commit hook)true
autoUpdateNotesAutomatically update PROJECT_NOTES.md with session contextfalse
taskRecognitionEnable AI recognition and suggestion of Sub-Tasks from user requeststrue
FieldDescription
customMessageOptional custom text for the AGENTS.md reference inserted into CLAUDE.md/GEMINI.md
additionalRefsArray of additional file references to include in the backlink

.subframe/ Directory Structure

File / DirectoryPurpose
config.jsonProject configuration (see above)
STRUCTURE.jsonAuto-generated module map of your codebase
PROJECT_NOTES.mdArchitecture decisions and session notes
tasks.jsonSub-Task index (auto-generated from .md files)
tasks/Individual Sub-Task markdown files with YAML frontmatter
tasks/archive/Completed Sub-Tasks moved here by the archive command
QUICKSTART.mdGetting-started guide generated at initialization
docs-internal/ADRs, architecture overview, changelog, IPC reference
hooks/Claude Code hook scripts (session-start, prompt-submit, stop, etc.)
bin/AI tool wrapper scripts (e.g., Codex CLI wrapper)

Data Locations

SubFrame stores data in several locations on your system:

Application Data (Global)

Electron's userData directory holds all global application state. The path depends on your OS:

OSPath
Windows%APPDATA%\SubFrame\
macOS~/Library/Application Support/SubFrame/
Linux~/.config/SubFrame/

Files in this directory:

FilePurpose
frame-settings.jsonApplication settings (General, Terminal, Editor, AI tool overrides)
ai-tool-config.jsonActive AI tool selection and custom tool definitions
window-state.jsonWindow size and position (restored on next launch)
prompts-history.txtPrompt logging history

Workspace Data (Global)

PathPurpose
~/.subframe/workspaces.jsonWorkspace definitions and project lists

Project Data (Per-Project)

PathPurpose
<project>/.subframe/SubFrame project files (config, structure map, tasks, notes)
<project>/.claude/settings.jsonClaude Code hook configuration (merged, not overwritten)
<project>/.claude/skills/Claude Code slash-command skills (sub-tasks, sub-docs, sub-audit)
<project>/.githooks/Git hooks for auto-updating STRUCTURE.json on commit
<project>/AGENTS.mdAI-agnostic project instructions
<project>/CLAUDE.mdClaude Code instructions (contains backlink to AGENTS.md)
<project>/GEMINI.mdGemini CLI instructions (contains backlink to AGENTS.md)

Resetting Configuration

To reset application settings to defaults, delete the frame-settings.json file from the application data directory. SubFrame will recreate it with default values on next launch.

To reset AI tool configuration, delete ai-tool-config.json from the same directory. The active tool will revert to Claude Code.

To remove SubFrame from a project entirely, use the Uninstall option in the SubFrame Health panel. It supports selective removal of hooks, backlinks, skills, and the .subframe/ directory, with a dry-run preview before making changes.