CTerm is a native macOS terminal app built around AI coding workflows. It puts multi-project navigation, Git worktrees, agent presets, split terminals, and project-level automation into one AppKit window. The goal is not to be a general-purpose terminal emulator. The goal is to be a durable workspace for long-running coding sessions, parallel tasks, and fast context switching.
AI-assisted development usually gets spread across too many places:
- agents running in terminal tabs
- project switching in Finder or an editor
- manual worktree creation and cleanup
- copied startup commands for each tool
- repeated setup every time a task changes
CTerm compresses those steps into one flow: choose a project, create a workspace, launch an agent, split panes, inspect status, and run project scripts without leaving the main window.
The preset bar at the top can launch common agents directly instead of forcing you to retype long commands. Presets carry a name, command, description, provider, and whether they should appear in the main window. That makes tools like Claude, Codex, Gemini, and Aider feel like part of the product instead of loose shell aliases.
Creating a workspace produces an isolated Git worktree and binds it to a branch, working directory, and agent session. This is a better fit for parallel task execution than constantly reusing one checkout and cleaning it up by hand.
CTerm supports terminal tabs, horizontal and vertical splits, focus switching, and pane resizing. It is meant for real task decomposition, for example:
- one pane running an agent
- one pane watching tests or logs
- one pane for manual fixes or verification
The terminal surface is backed by Ghostty instead of a hand-rolled text grid. That gives the app more modern terminal behavior and input handling while keeping a native AppKit shell around it.
Projects can define .cterm/config.json with setup, teardown, and run scripts. CTerm executes them at the right points in the workspace lifecycle and injects:
CTERM_ROOT_PATHCTERM_WORKSPACE_NAMECTERM_WORKSPACE_PATH
That makes project bootstrap and cleanup part of the workflow instead of tribal knowledge.
In addition to global presets, a repository can provide its own .cterm/presets.json. This lets each project define the most useful agent entry points for its own workflow while still preserving the user's global tools.
The main window is not just a terminal. It also includes project navigation, workspace management, file browsing, changes, and port-related views. The intent is to reduce how often you need to leave the terminal just to recover context.
The app surfaces token usage, provider status, and performance snapshots. In long-running agent sessions, those are operational signals rather than decoration.
The settings window covers:
- agent preset editing
- top-bar visibility for presets
- terminal font, size, theme, and cursor style
- general path and behavior settings
- shortcut inspection and reset
This is meant to make CTerm usable as a daily workstation, not just a demo shell.
A natural way to use CTerm looks like this:
- Add a local project
- Create a dedicated workspace for a task
- Launch an agent from a preset
- Split panes when you need parallel observation and verification
- Let project scripts handle setup, run, or teardown steps
- Stay in the same window while checking files, changes, and terminal state
It is a strong fit when you:
- run multiple agent-driven tasks in parallel
- rely heavily on temporary branches and worktrees
- want stable, named entry points for AI tooling
- prefer project context and terminal state to live in one native window
CTerm is not trying to be a terminal that does everything. It is closer to a macOS workbench for AI-assisted coding:
- the terminal is central
- projects and workspaces are first-class concepts
- agents are part of the core flow
- Git worktrees are a base unit, not an extra feature
If your day-to-day work already depends on agents, parallel task execution, and project-specific automation, this direction is likely a better fit than a traditional terminal-first setup.
