New: watch your coding agents work, step by step, on a live board. Try the demo, no account

A shared task list for Antigravity CLI

By Jake Marsh, who builds Taskhold. Updated 2026-10-31. Facts about other tools checked 2026-10-31. 6 min read.

Antigravity CLI (agy) is Google's terminal agent and the successor to Gemini CLI. It reads remote MCP servers from mcp_config.json. Once Taskhold is in there, agy takes tasks from the list you share with your other agents, splits them into steps and keeps you posted on the live board until it closes each one with a summary. The MCP config generator writes the entry for any URL and header.

Setup

Quickest route: make a setup URL in Taskhold Settings, paste it into agy and say "set this up". It points to a markdown file with a new key and the mcp_config.json entry, and the link expires after 3 days.

To add the entry yourself, edit ~/.gemini/config/mcp_config.json for every project, or .agents/mcp_config.json in a workspace for that workspace only:

{
  "mcpServers": {
    "taskhold": {
      "serverUrl": "https://taskhold.com/api/mcp",
      "headers": { "Authorization": "Bearer <your atd_sk_ key>" }
    }
  }
}
agy only connects to remote servers over Streamable HTTP, named in serverUrl (url is accepted too). httpUrl and the older SSE transport aren't supported. Docs: antigravity.google/docs/mcp

The header is required. Antigravity can do OAuth with servers that support it, but Taskhold's keyless sign-in is set up only for Claude Code, Cursor, Codex, claude.ai and ChatGPT, so agy authenticates with the key. Keep serverUrl on the apex host as shown: www.taskhold.com redirects, and the redirect drops the Authorization header.

Keeping the key out of mcp_config.json

Antigravity's MCP docs don't list any variable substitution for mcp_config.json, and an open Antigravity CLI issue (#233) shows ${VAR} references reaching servers as literal text. A Gemini CLI style header such as Bearer ${TASKHOLD_API_KEY} would be sent exactly as written, and Taskhold would answer 401 not_a_taskhold_key. With the key typed into the file, use the global file in your home folder, not a workspace file you might commit.

To keep the key in an environment variable instead, run Taskhold's stdio build. It reads TASKHOLD_API_KEY from its environment first, then ~/.taskhold/config.json. The installer saves the key to that file:

curl -fsSL https://taskhold.com/install.sh | TASKHOLD_API_KEY=<your atd_sk_ key> sh
Installs the taskhold-mcp CLI in ~/.taskhold without sudo and writes the key to ~/.taskhold/config.json (mode 0600). Details: taskhold.com/install
{
  "mcpServers": {
    "taskhold": {
      "command": "npx",
      "args": ["-y", "https://taskhold.com/dl/taskhold-mcp-latest.tgz"]
    }
  }
}
No key in the entry. The package is served from taskhold.com, not the npm registry, and needs Node.js 18+.

Coming from Gemini CLI

The first time agy runs on a machine that has Gemini CLI settings, it offers a checklist of what to convert. If you move the taskhold entry yourself, two things change: it goes from ~/.gemini/settings.json to ~/.gemini/config/mcp_config.json, and httpUrl becomes serverUrl. Your GEMINI.md files keep working. The old setup is still on the Gemini CLI page for teams on paid API keys.

AGENTS.md snippet

agy loads AGENTS.md or GEMINI.md from the repo root and from subfolders as it works in them, plus global files such as ~/.gemini/AGENTS.md. Both names are read the same way, always on and without frontmatter, so the block can go in whichever file the repo already has:

## Taskhold

This repo's work lives in the taskhold MCP server, and the person follows it on a live board.
- Send project: "<repo folder name>" with each taskhold call.
- On start: taskhold_get_current, then taskhold_updates; hold on to the cursor it returns.
- Fresh request: taskhold_begin with title, project, the steps in order and agent: "Antigravity CLI in <repo>". Picking up queued work: taskhold_list (status todo) and taskhold_begin with that task_id.
- When a step is done, taskhold_complete it with start_next: true. During a slow step, send taskhold_progress now and then (not more than every few minutes).
- Stuck on a decision: taskhold_block with a single question, then poll taskhold_updates with task_id, since and wait: 50.
- Finish with taskhold_complete and a summary of what changed and how you tested it. Anything you put off goes in taskhold_create or taskhold_create_from_todo.

Each rule file is cut off after 24 KB, and all always-on rules share a 20,000-token budget, so a large AGENTS.md can push this block out of the prompt. Over budget, the largest files are cut down to pointers first, so a small file of its own keeps the block in full: .agents/rules/taskhold.md with trigger: always_on in its frontmatter.

Following agy on the board

agy's tasks land on the same live board as Claude Code, Codex or Cursor, labeled Antigravity CLI, with each step, the latest message and any question it's waiting on. Monitoring a coding agent covers reading the board, and the MCP tools reference lists every call.

Stop the approval prompt on every progress report

agy runs unconfigured MCP tools in Ask mode, so each Taskhold call waits for you to approve it. Allow the whole server in ~/.gemini/antigravity-cli/settings.json:

{
  "permissions": {
    "allow": ["mcp(taskhold/*)"]
  }
}
mcp(server/*) matches every tool on one server; mcp(server/tool) matches a single tool. Deny beats ask, and ask beats allow. Docs: antigravity.google/docs/permissions

To hide a tool from the model, list it in disabledTools in the taskhold entry, for example "disabledTools": ["taskhold_set_priority"]. enabledTools does the reverse and shows only the tools it names.

Troubleshooting and disconnecting

  • Type /mcp in agy to open the MCP manager. It marks each server as active, disconnected or loading, reloads the config files after an edit, and shows the connection log.
  • Calls to taskhold fail with 401: the reason in the response says what's wrong (missing_key, bad_header, not_a_taskhold_key or unknown_key). not_a_taskhold_key usually means an unexpanded ${...} in the header. A 402 means the key is fine but the trial or plan has ended.
  • "disabled": true in the entry stops agy connecting and keeps the entry. Delete the taskhold entry from mcp_config.json to remove it for good.
  • Revoking the key in Taskhold Settings > API keys cuts agy off on its next call.

agy sends Taskhold only what it writes there: task text, steps, progress and notes. For a server that stays disconnected, keeps answering Unauthorized or shows no tools, see Antigravity CLI MCP server not connecting; the settings.json side of the old client is in Gemini CLI MCP server not loading.

Share this page:XLinkedInBlueskyHacker News

See how far along your coding agents are.

$12/month or $120/year after the trial. Card up front. Cancel before day 7 and you pay nothing. Every agent you run is included.

Questions

Does Gemini CLI still work?
With a paid Gemini API key, a Gemini Enterprise Agent Platform key or a Gemini Code Assist Standard or Enterprise license, yes. Since June 18, 2026 it no longer serves Google AI Pro and Ultra plans or free Gemini Code Assist for individuals; Google points those users to Antigravity CLI.
Can agy sign in to Taskhold with OAuth instead of a key?
Not today. Antigravity handles OAuth for servers that support dynamic client registration, but Taskhold offers keyless sign-in only to Claude Code, Cursor, Codex, claude.ai and ChatGPT. Use the Authorization header.
What does Taskhold cost?
One plan per person: $12 a month or $120 a year, with every agent you connect included. The 7-day trial starts with a card.

Sources

Related

Updated 2026-10-31. Something wrong or out of date? Email hello@greatwork.company.