One UI to configure every AI coding agent on your machine.
Abyss is a cross-platform desktop app that reads and writes the real config of Claude Code, OpenAI Codex and more: instructions, MCP servers, hooks, agents, skills, permissions and themes, all from one interface that adapts to whichever agent you have selected.
AI coding agents keep their settings in a scatter of dotfiles and JSON: a
CLAUDE.md here, a settings.json there, MCP servers buried in ~/.claude.json,
subagents as loose markdown, hooks nested inside a config blob. Editing them by
hand is fiddly and error-prone.
Abyss is a single, themed control panel for all of it. It auto-detects where each agent stores its config, edits the actual files (with a diff preview and atomic, non-destructive writes), and re-skins the whole UI around whichever agent you have selected.
Abyss ships light and dark plus a set of per-agent palettes, and a no-code Theme Builder for rolling your own. Switch the active agent and the whole app re-themes instantly.
- Switch the active agent from the top bar; the sidebar, status bar and theme all follow.
- Each surface is capability-gated, so an agent only shows the sections it actually supports.
- Instructions. Edit
CLAUDE.mdin a syntax-highlighted editor. - Agents / Commands / Skills. Full CRUD over your markdown collections
(
agents/*.md,commands/*.md,skills/<name>/SKILL.md), with frontmatter scaffolding for new items. - MCP servers. Auto-detected from
~/.claude.json; add, edit, remove or toggle one without touching the rest of the file. - Hooks. A structured editor for
settings.jsonhooks (PreToolUse, PostToolUse, Stop, …) with matcher and command. - Permissions. Allow / ask / deny rule lists.
- Model & Env. Default model and environment variables.
- Settings (raw). A direct JSON editor for
settings.json/settings.local.jsonwith validation, for anything without a dedicated UI.
- Light and dark, plus per-agent color palettes.
- A Theme Builder with live preview and native color pickers. Build and save your own themes without writing any code.
- Diff preview before saving real files (toggleable).
- Atomic writes (temp file plus rename), so a crash can't leave a half-written config.
- Edits to big shared files like
~/.claude.jsonpreserve every other key (projects, account, caches) and unknown fields.
- A Cmd/Ctrl+K command palette to jump to any agent, page or theme.
- A companion
abyssCLI (detect/export/apply) that shares the same core logic as the app.
| Agent | Status | Surfaces |
|---|---|---|
| Claude Code | Full | Instructions, Agents, Commands, Skills, MCP, Hooks, Permissions, Model & Env, Raw settings |
| OpenAI Codex | Basic | Instructions (AGENTS.md) |
| Gemini CLI | Example | Ships as the worked example for "add an agent" (one line to enable) |
Adding another agent is intentionally tiny. See Extending Abyss.
Grab Abyss-<version>-x86_64.AppImage from
Releases (published by CI on
tagged builds), then:
chmod +x Abyss-*-x86_64.AppImage
./Abyss-*-x86_64.AppImageIf you hit a FUSE error, run it extracted:
./Abyss-*-x86_64.AppImage --appimage-extract-and-runmkdir -p ~/Applications ~/.local/share/applications
cp Abyss-*-x86_64.AppImage ~/Applications/Abyss.AppImage
chmod +x ~/Applications/Abyss.AppImage
cat > ~/.local/share/applications/abyss.desktop <<EOF
[Desktop Entry]
Type=Application
Name=Abyss
Comment=Unified configuration UI for AI coding agents
Exec=$HOME/Applications/Abyss.AppImage %U
Icon=abyss
Terminal=false
Categories=Development;
StartupWMClass=Abyss
EOF
update-desktop-database ~/.local/share/applications 2>/dev/null || trueDownload the NSIS installer (Abyss-<version>-x64.exe) or the portable build
from Releases and run it.
Requires Node 20+ and pnpm.
git clone https://github.com/Fxbixn03/Abyss.git
cd Abyss
pnpm install
pnpm dev # run in development (Vite + Electron, hot reload)
pnpm build # type-check, bundle, and package an installer/AppImageThe packaged artifact lands in release/<version>/.
On first launch Abyss auto-detects each agent's config directory and shows a quick setup so you can confirm or override the locations. Paths that exist get a green check, missing ones a warning, and you can always point to your own with the folder browser. Your choices are saved; change them any time under Settings → Config Paths.
- Switch agents. Use the toggle in the top bar (or Cmd/Ctrl+K → "Switch to …"). The UI re-themes instantly.
- Edit instructions. Open Instructions, edit, and save. With diff preview on (the default) you review the change against the on-disk file first.
- Manage MCP servers. The MCP Servers page lists your existing user-scoped
servers (read from
~/.claude.json). Add a stdio/http/sse server, edit env, or toggle one off. - Subagents / commands / skills. Pick Agents (or Commands / Skills), edit the prompt and frontmatter, or hit New to scaffold one.
- Hooks. The Hooks page groups your
settings.jsonhooks by event; add a matcher and command in a couple of clicks. - Build a theme. Open Settings → Theme Builder, tweak colors for light and dark, preview live, then save and use.
Abyss edits your agents' real files. Nothing proprietary, nothing hidden:
| Surface | Location |
|---|---|
| Claude · Instructions | ~/.claude/CLAUDE.md |
| Claude · Permissions / Model / Env / Hooks | ~/.claude/settings.json |
| Claude · MCP servers (user scope) | ~/.claude.json → mcpServers |
| Claude · Agents / Commands / Skills | ~/.claude/{agents,commands,skills}/… |
| Claude · Raw settings | ~/.claude/settings.json, settings.local.json |
| Codex · Instructions | ~/.codex/AGENTS.md |
| Abyss · its own preferences | OS userData (abyss-settings.json) |
The two
claude.aiaccount connectors (Google Drive, etc.) are managed in your Claude account, not a local file, so Abyss shows a note instead of pretending to edit them.
The same engine that powers the app is available in your terminal:
# Show where each agent keeps its config
$ pnpm cli -- detect
Claude Code (claude)
✓ /home/you/.claude
· /home/you/.config/claude
OpenAI Codex (codex)
· /home/you/.codex
· /home/you/.config/codex
# Export a portable bundle of your config (instructions, MCP, permissions)
$ pnpm cli -- export --out abyss-bundle.json
# Preview what applying a bundle would change — without writing
$ pnpm cli -- apply abyss-bundle.json --dry-runAfter packaging, the binary is exposed as abyss (abyss detect, …).
The animated logo and theme reel above are generated procedurally (see
Brand assets). Short screen recordings of real usage make the
best feature demos. Here's a quick storyboard. Record with
wf-recorder + gifski (Wayland) or
Peek, drop the file in assets/, then uncomment
the matching line.
| File | What to show |
|---|---|
assets/demo-switch.gif |
Toggle Claude ↔ Codex; the whole UI re-themes |
assets/demo-mcp.gif |
Open MCP Servers → your real servers appear → add one |
assets/demo-instructions.gif |
Edit CLAUDE.md, hit Save, review the diff dialog |
assets/demo-theme-builder.gif |
Build a theme with the color pickers + live preview |
Record a GIF on Wayland (example)
wf-recorder -g "$(slurp)" -f /tmp/demo.mp4 # select a region, ⌃C to stop
ffmpeg -i /tmp/demo.mp4 -vf "fps=18,scale=820:-1" -f yuv4mpegpipe - \
| gifski -o assets/demo-switch.gif -Abyss is built feature-first, with a strict typed boundary between the renderer and the OS:
- The renderer (React 19 + TS) never touches
fs/path/os; all disk work goes through a single typed IPC bridge. - Core (
core/) holds the framework-agnostic config IO and is reused by both the Electron main process and the CLI. - Theming runs entirely on CSS variables, so themes switch with no reload and components never hard-code colors.
See CLAUDE.md for the full architecture and contributor rules.
Add an agent in three small steps, no plumbing:
- Add an
AgentDefinition(id, paths, config files) tosrc/shared/agents/defs.ts. - Create one adapter in
src/features/agents/adapters/<id>.adapter.tsand register it. - Add a theme preset in
src/features/themes/presets/.
The switcher, sidebar, command palette, detection (app + CLI) and theming all pick it up automatically. (Gemini ships as the worked example.)
Add an IPC channel or theme using the step-by-step recipes in CLAUDE.md.
pnpm dev # Vite + Electron, hot reload
pnpm build # type-check → bundle → package
pnpm build:dir # unpacked build (faster, no installer)
pnpm typecheck # both TS projects
pnpm lint # ESLint (zero warnings)
pnpm format # Prettier
pnpm cli -- ... # run the abyss CLI in devcore/ Node-only config IO (reused by main + CLI)
electron/ Main process: window, security, typed IPC handlers
cli/ The `abyss` CLI
src/
shared/ Types, typed IPC client, agent definitions, UI primitives
features/ Feature-first: agents, config, mcp, hooks, themes, settings, …
app/ Shell: router, layout (sidebar + top bar + status bar), Cmd+K
The logo and theme GIFs are reproducible:
python3 scripts/gen-logo-gif.py # -> assets/abyss-logo.gif
python3 scripts/gen-themes-gif.py # -> assets/abyss-themes.gif(Requires rsvg-convert and ImageMagick.)
- Project-scoped config (per-project MCP,
.mcp.json, scope tabs) - Profiles (switch between named config sets)
- More agents (Gemini CLI on by default, others)
- Auto-update via GitHub Releases
- Custom theme import/export
Issues and PRs are welcome. Please keep the project's invariants intact: typed
IPC only, no Node in the renderer, CSS-variable theming, and a clean
pnpm lint + pnpm typecheck. See CONTRIBUTING.md for the
full workflow and CLAUDE.md for the architecture deep-dive.
MIT © 2026 Fxbixn03

