Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ Press `n` to create a new pane, type a prompt, pick one or more agents (or none
dmux creates a tmux pane for each task. Every pane gets its own git worktree and branch so agents work in complete isolation. When a task is done, open the pane menu with `m` and choose Merge to bring it back into your main branch, or Create GitHub PR to push the branch and file a pull request.

- **Worktree isolation** — each pane is a full working copy, no conflicts between agents
- **Agent support** — Claude Code, Codex, OpenCode, Cline CLI, Gemini CLI, Qwen CLI, Amp CLI, pi CLI, Cursor CLI, Copilot CLI, and Crush CLI
- **Agent support** — Claude Code, Codex, OpenCode, Cline CLI, Gemini CLI, Qwen CLI, Amp CLI, pi CLI, Cursor CLI, Copilot CLI, Crush CLI, and Antigravity CLI
- **Goal launches** — optionally start supported agents in goal mode from the initial prompt
- **Multi-select launches** — choose any combination of enabled agents per prompt
- **AI naming** — branches and commit messages generated automatically
Expand Down Expand Up @@ -87,7 +87,7 @@ dmux can use default branch behavior or let you override branch details when cre
- tmux 3.0+
- Node.js 18+
- Git 2.20+
- At least one supported agent CLI (for example [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex](https://github.com/openai/codex), [Grok Build](https://docs.x.ai/build/overview), [OpenCode](https://github.com/opencode-ai/opencode), [Cline CLI](https://docs.cline.bot/cline-cli/getting-started), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [Qwen CLI](https://github.com/QwenLM/qwen-code), [Amp CLI](https://ampcode.com/manual), [pi CLI](https://www.npmjs.com/package/@mariozechner/pi-coding-agent), [Cursor CLI](https://docs.cursor.com/en/cli/overview), [Copilot CLI](https://github.com/github/copilot-cli), [Crush CLI](https://github.com/charmbracelet/crush))
- At least one supported agent CLI (for example [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex](https://github.com/openai/codex), [Grok Build](https://docs.x.ai/build/overview), [OpenCode](https://github.com/opencode-ai/opencode), [Cline CLI](https://docs.cline.bot/cline-cli/getting-started), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [Qwen CLI](https://github.com/QwenLM/qwen-code), [Amp CLI](https://ampcode.com/manual), [pi CLI](https://www.npmjs.com/package/@mariozechner/pi-coding-agent), [Cursor CLI](https://docs.cursor.com/en/cli/overview), [Copilot CLI](https://github.com/github/copilot-cli), [Crush CLI](https://github.com/charmbracelet/crush), [Antigravity CLI](https://github.com/google-antigravity/antigravity-cli))
- [OpenRouter API key](https://openrouter.ai/) (optional, for AI branch names and commit messages)

## Documentation
Expand Down
8 changes: 8 additions & 0 deletions __tests__/agentLaunch.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ describe('agent launch utils', () => {
expect(getAgentSlugSuffix('codex')).toBe('codex');
expect(getAgentSlugSuffix('grok')).toBe('grok-build');
expect(getAgentSlugSuffix('gemini')).toBe('gemini');
expect(getAgentSlugSuffix('antigravity')).toBe('antigravity');
});

it('returns default-enabled registry agents', () => {
Expand Down Expand Up @@ -243,6 +244,13 @@ describe('command builders', () => {
expect(getSendKeysReadyDelayMs('grok')).toBe(1600);
});

it('uses Antigravity interactive prompt mode for initial prompts', () => {
expect(getPromptTransport('antigravity')).toBe('option');
expect(buildInitialPromptCommand('antigravity', '"fix it"', 'bypassPermissions')).toBe(
'agy --dangerously-skip-permissions --prompt-interactive "fix it"'
);
});

it('builds grok resume command scoped to the current directory', () => {
expect(buildResumeCommand('grok', 'bypassPermissions')).toBe(
'grok --continue --always-approve'
Expand Down
1 change: 1 addition & 0 deletions docs/public/agents/antigravity.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion docs/src/content/agents.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ export const meta = { title: 'Agents' };
export function render() {
return `
<h1>Agents</h1>
<p class="lead">dmux supports 12 AI coding agents. Each agent is automatically detected if its CLI is installed and available in your PATH.</p>
<p class="lead">dmux supports 13 AI coding agents. Each agent is automatically detected if its CLI is installed and available in your PATH.</p>

<h2>Agent Detection</h2>
<p>dmux automatically detects installed agents by searching:</p>
Expand Down
4 changes: 4 additions & 0 deletions docs/src/content/introduction.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions src/utils/agentLaunch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export const AGENT_IDS = [
'cursor',
'copilot',
'crush',
'antigravity',
] as const;

export type AgentName = typeof AGENT_IDS[number];
Expand Down Expand Up @@ -351,6 +352,30 @@ export const AGENT_REGISTRY: Readonly<Record<AgentName, AgentRegistryEntry>> = {
},
defaultEnabled: false,
},
antigravity: {
id: 'antigravity',
name: 'Antigravity CLI',
shortLabel: 'ag',
description: 'Google Antigravity CLI',
slugSuffix: 'antigravity',
installTestCommand: 'command -v agy 2>/dev/null || which agy 2>/dev/null',
commonPaths: [
...homePath('.antigravity/bin/agy'),
'/usr/local/bin/agy',
'/opt/homebrew/bin/agy',
...homePath('.local/bin/agy'),
...homePath('bin/agy'),
...homePath('.npm-global/bin/agy'),
],
promptCommand: 'agy',
promptTransport: 'option',
promptOption: '--prompt-interactive',
permissionFlags: {
bypassPermissions: '--dangerously-skip-permissions',
},
defaultEnabled: false,
resumeCommandTemplate: 'agy --continue{permissions}',
},
};

for (const agentId of AGENT_IDS) {
Expand Down
1 change: 1 addition & 0 deletions src/utils/paneAttentionHeuristics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ export function hasAgentWorkingIndicators(content: string, agent?: AgentName): b
case 'amp':
case 'pi':
case 'crush':
case 'antigravity':
return lines.some((line) => progressWordPattern.test(line));
default:
return lines.some((line) => progressWordPattern.test(line));
Expand Down