Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
535a43e
feat(agent): scaffold antigravity agent with hook payload types
peyton-alt May 20, 2026
bf6a83d
feat(agent): wire antigravity hook install and event parsing
peyton-alt May 20, 2026
7b40b04
test(agent): integration coverage and transcript fixture for antigravity
peyton-alt May 21, 2026
7ddeae7
test(e2e): register antigravity for the e2e suite
peyton-alt May 21, 2026
f141838
fix(agent): gate antigravity TurnStart on real 0-indexed invocationNum
peyton-alt May 28, 2026
fafeb56
fix(agent): address PR review feedback for antigravity
peyton-alt May 28, 2026
b5562c4
Merge remote-tracking branch 'origin/main' into feat/antigravity-agent
peyton-alt May 28, 2026
aeefff3
fix(e2e): harness fixes so agy E2E runs against a real session
Soph May 28, 2026
4088f7a
feat(antigravity): title-tee shim and token snapshot store
peyton-alt Jun 3, 2026
a6da145
feat(antigravity): install title tee into agy global settings
peyton-alt Jun 4, 2026
7680a4d
feat(antigravity): out-of-band token usage from agy status snapshots
peyton-alt Jun 4, 2026
fa59584
test(antigravity): token integration coverage and doctor title-tee check
peyton-alt Jun 4, 2026
b893d9b
fix(antigravity): repair title-tee on idempotent install; harden loca…
peyton-alt Jun 4, 2026
6bd81f2
fix(antigravity): address PR review (gate, silent-failure log, tests,…
peyton-alt Jun 4, 2026
acad86f
test(antigravity): drop duplicate --wrap test, tighten clamp assertion
peyton-alt Jun 4, 2026
92757fb
feat(antigravity): implement PromptExtractor for transcript USER_INPU…
peyton-alt Jun 4, 2026
5d66e30
test(antigravity): pin ExtractPrompts against the captured transcript…
peyton-alt Jun 4, 2026
c871a54
test(antigravity): pin ExtractPrompts offset-skipping behavior
peyton-alt Jun 5, 2026
5522996
docs(antigravity): update transcript.go header now that prompt extrac…
peyton-alt Jun 5, 2026
fe88d68
feat(strategy): re-extract prompts from live transcript at condensati…
peyton-alt Jun 5, 2026
1758e8b
test(antigravity): assert prompt lands in committed checkpoint metadata
peyton-alt Jun 5, 2026
ff78c96
feat(antigravity): implement TranscriptAnalyzer (position + modified-…
peyton-alt Jun 5, 2026
a530791
refactor(antigravity): explicit empty-path guard, accurate header, pi…
peyton-alt Jun 5, 2026
7833440
fix(antigravity): resolve transcript path, session write, and mid-tur…
peyton-alt Jul 1, 2026
18f4b38
test(antigravity): e2e harness ADC support and transient-error classi…
peyton-alt Jul 1, 2026
65324e4
fix(e2e): fail fast on agy quota/entitlement walls instead of restart…
peyton-alt Jul 1, 2026
17e82e9
feat(antigravity): implement review skill discovery
peyton-alt Jul 1, 2026
a963c29
fix(antigravity): track resumed sessions (state-aware conditional Tur…
peyton-alt Jul 1, 2026
32612e9
refactor(antigravity): drop duplicate prompt extraction (owned by #1381)
peyton-alt Jul 1, 2026
48baffd
Merge remote-tracking branch 'origin/feat/antigravity-tokens' into HEAD
peyton-alt Jul 1, 2026
f08f522
Merge remote-tracking branch 'origin/feat/antigravity-transcript-deco…
peyton-alt Jul 1, 2026
f83a3df
Merge branch 'feat/antigravity-review-discovery' into HEAD
peyton-alt Jul 1, 2026
dd95db0
Merge branch 'feat/antigravity-resume-tracking' into HEAD
peyton-alt Jul 1, 2026
0ce1c3b
fix(antigravity): correctness fixes from integration review
peyton-alt Jul 2, 2026
d83879b
refactor(antigravity): remove no-op hooks and dead wire-format surface
peyton-alt Jul 2, 2026
1e7e207
docs(antigravity): document the agent across repo docs and e2e wiring
peyton-alt Jul 2, 2026
ee3a3d7
Merge remote-tracking branch 'origin/main' into antigravity-review-fixes
peyton-alt Jul 2, 2026
4b10b75
fix(strategy): adapt merged antigravity tests and condensation to main
peyton-alt Jul 2, 2026
29588bc
fix(antigravity): address full-implementation review findings
peyton-alt Jul 2, 2026
f06ac1f
refactor(antigravity): single-owner offset iterator and streaming bas…
peyton-alt Jul 2, 2026
c45d979
feat(agents): surface preview status in selector and agent list; docu…
peyton-alt Jul 2, 2026
dba54df
docs: mention Antigravity everywhere supported agents are enumerated
peyton-alt Jul 2, 2026
0763362
docs(antigravity): add AGENT.md integration one-pager
peyton-alt Jul 2, 2026
d259605
docs: add Antigravity to CONTRIBUTING agent lists
peyton-alt Jul 2, 2026
c2f04e9
fix(e2e): detect agy quota wall from CLI logs when headless output hi…
peyton-alt Jul 3, 2026
7c11cdf
fix(strategy): ghost active sessions no longer pin shadow branches
peyton-alt Jul 3, 2026
487b2b5
docs(antigravity): document the headless subagent ghost-parent quirk
peyton-alt Jul 3, 2026
449a97a
Merge remote-tracking branch 'origin/main' into feat/antigravity-agent
peyton-alt Jul 7, 2026
80d2b6b
fix(antigravity): address trail review findings
peyton-alt Jul 7, 2026
099fe00
fix(cli): satisfy exhaustive lint for ClaudeErrorKind switch
peyton-alt Jul 7, 2026
42abc77
refactor(antigravity): LateTranscriptWriter capability + deferred off…
peyton-alt Jul 7, 2026
1c5b1b3
docs(antigravity): document verified stdin semantics of agy -p placeh…
peyton-alt Jul 7, 2026
13b3d23
Merge remote-tracking branch 'origin/main' into feat/antigravity-agent
peyton-alt Jul 7, 2026
1cbaec4
fix(antigravity): scan agy 1.1 skill roots; refresh version-pin claims
peyton-alt Jul 13, 2026
85310b3
fix(e2e): resolve agy log peek against the ADC-isolated HOME
peyton-alt Jul 13, 2026
bd1e2ff
fix(antigravity): doctor agy-binary guard, Stop timeout, remove warning
peyton-alt Jul 13, 2026
478a880
Merge remote-tracking branch 'origin/main' into feat/antigravity-agent
peyton-alt Jul 13, 2026
b7ac022
fix(antigravity): resolve trail 444 mechanical findings
peyton-alt Jul 13, 2026
126f2ac
Merge remote-tracking branch 'origin/main' into feat/antigravity-agent
peyton-alt Aug 27, 2026
72b3595
feat(antigravity): Gemini API-key e2e mode, agy /hooks doctor probe, …
peyton-alt Aug 27, 2026
a243eb9
fix(e2e): locate the agy binary as 'antigravity' inside the release t…
peyton-alt Aug 27, 2026
700c923
fix(e2e): pre-trust the test repo in agy's isolated HOME so workspace…
peyton-alt Aug 27, 2026
73e1998
test(e2e): capture agy's isolated-HOME logs and a hook probe as antig…
peyton-alt Aug 27, 2026
c14b0cd
test(e2e): make the antigravity probe smoke test symlink-safe and jso…
peyton-alt Aug 27, 2026
e182882
ci(e2e): keep antigravity dispatch-only — agy skips hook execution in…
peyton-alt Aug 28, 2026
dcaaaf9
docs(antigravity): link the upstream agy hooks/API-key issue (#893)
peyton-alt Aug 28, 2026
eb33679
Merge origin/main into feat/antigravity-agent
peyton-alt Sep 21, 2026
38f4b00
ci(e2e): run the antigravity leg in the default matrix; bump agy model
peyton-alt Sep 21, 2026
0a1185e
test(antigravity): satisfy main's guard tests
peyton-alt Sep 21, 2026
663ebb9
ci(nightly): add the antigravity smoke leg on Linux and macOS
peyton-alt Sep 22, 2026
9f688a8
fix(antigravity): anchor the status store on the cache root and lock …
peyton-alt Sep 22, 2026
6d3b018
test: register the antigravity status store with main's guard ledgers
peyton-alt Sep 22, 2026
f8b9f76
fix(antigravity): route every hooks, settings and transcript write th…
peyton-alt Sep 22, 2026
e04e3c5
fix(antigravity): a cancelled context still leaves the transcript pla…
peyton-alt Sep 22, 2026
e2f32e8
fix(antigravity): close the remaining trail 444 findings on top of th…
peyton-alt Sep 22, 2026
1e1e93c
refactor(antigravity): remove the redundancy the root-anchoring commi…
peyton-alt Sep 22, 2026
9474a2d
fix(antigravity): contain transcript reads and the placeholder to agy…
peyton-alt Sep 22, 2026
9217199
test(mirror): count submissions atomically in the resubmission test
peyton-alt Sep 22, 2026
e4381f0
fix(antigravity): never prune a lock file another tee has just taken
peyton-alt Sep 22, 2026
872bee0
fix(antigravity): lock the status readers and the settings rewrite; d…
peyton-alt Sep 22, 2026
8db3c06
fix(antigravity): bound the status readers' lock wait inside hooks
peyton-alt Sep 22, 2026
773d480
fix(antigravity): stat a late transcript through its session store; c…
peyton-alt Sep 22, 2026
541535f
test(strategy): do not shadow the real builtin in the store-stat test
peyton-alt Sep 22, 2026
f81987c
fix(antigravity): install the bare cmd.exe silent wrapper on Windows …
peyton-alt Sep 22, 2026
084ce33
fix(antigravity): slash-separated names in the status store; refuse b…
peyton-alt Sep 22, 2026
2fd61de
fix(antigravity): uninstall leaves a hooks.json without an Entire ent…
peyton-alt Sep 22, 2026
6611879
fix(antigravity): status readers check for a snapshot before taking t…
peyton-alt Sep 22, 2026
f9454f9
revert(agents): no preview label in the selector or `entire agent list`
peyton-alt Sep 22, 2026
97fac35
docs(antigravity): --add-dir must be absolute; the probe refuses a re…
peyton-alt Sep 22, 2026
cebe163
ci(e2e): pin the antigravity leg to agy 1.2.7 in the merge-gating wor…
peyton-alt Sep 22, 2026
12c5843
Merge origin/main into feat/antigravity-agent (IsPreview removal, #2554)
peyton-alt Sep 22, 2026
91f80cf
fix(doctor): antigravity hooks check proves the host shape; the agy p…
peyton-alt Sep 22, 2026
165b0ad
fix(strategy): resolve condensation prompts from the transcript bytes…
peyton-alt Sep 22, 2026
9e834cf
test(e2e): seed agy's first-run onboarding in isolated HOMEs; click t…
peyton-alt Sep 22, 2026
637c542
fix(antigravity): pass the headless prompt in argv; condense agy tran…
peyton-alt Sep 22, 2026
a4e976a
Merge origin/main into feat/antigravity-agent (session-store tests, t…
peyton-alt Sep 22, 2026
822b261
fix(strategy): pin the shadow branch for any uncondensed content, not…
peyton-alt Sep 22, 2026
408fc68
e2e(windows): make the antigravity leg dispatchable on the Windows ru…
peyton-alt Sep 23, 2026
6babb12
e2e(antigravity): do not install the sh-based hook probe on Windows
peyton-alt Sep 23, 2026
38dd27c
e2e(nightly): run antigravity on the Windows smoke leg
gtrrz-victor Sep 23, 2026
3801cdd
e2e(antigravity): install agy through its official installer
gtrrz-victor Sep 23, 2026
802c2f7
fix(agent): create session directories at 0700 in CreateExclusive
gtrrz-victor Sep 23, 2026
8fe7e20
e2e(nightly): point the agy install comment at the workflow that pins
gtrrz-victor Sep 23, 2026
c2db75e
fix(antigravity): keep empty tool-arg strings out of the generic decode
gtrrz-victor Sep 23, 2026
4a08683
refactor(antigravity): match not-exist checks to the wrapping-safe idiom
gtrrz-victor Sep 23, 2026
792c2ab
fix(doctor): stay quiet about Antigravity hooks the user switched off
gtrrz-victor Sep 23, 2026
7ddc4f6
fix(strategy): scope summaries with the agent's own offset metric
gtrrz-victor Sep 23, 2026
8ad8edc
fix(summarize): bound the transcript a summary prompt carries
gtrrz-victor Sep 23, 2026
bea7676
fix(strategy): log the skipped turn-end offset advance
gtrrz-victor Sep 23, 2026
ead34ed
fix(hooks): set up the hook session per verb, not per agent
gtrrz-victor Sep 23, 2026
41fdeae
fix(antigravity): claim agy's global title slot only where agy exists
gtrrz-victor Sep 23, 2026
5ee124a
test(agent): scope the flock import exception to Antigravity
gtrrz-victor Sep 23, 2026
cfa65b0
fix(skills): point the Antigravity review-skill hint at agy 1.1+'s root
gtrrz-victor Sep 23, 2026
7066240
fix(antigravity): tell a failed hooks probe from an empty hook list
gtrrz-victor Sep 23, 2026
e570755
docs(hooks): stop saying the hook session is inherited from the parent
gtrrz-victor Sep 23, 2026
2b193e4
fix(antigravity): lock a conversation before pruning its snapshots
gtrrz-victor Sep 23, 2026
1e53b5f
fix(antigravity): do not create a lock for a snapshot being pruned
gtrrz-victor Sep 23, 2026
f10b551
e2e: stop pinning agy, and say why a pin cannot work
gtrrz-victor Sep 23, 2026
743190a
test(antigravity): stand up an agy on PATH where the title-tee is exp…
peyton-alt Sep 23, 2026
69b1f3c
fix(summarize): bound the file list a summary prompt carries too
peyton-alt Sep 23, 2026
9b00c00
e2e: remove Antigravity's isolated home with the test repo
peyton-alt Sep 23, 2026
200eefa
test(antigravity): drop an unused nolint directive
peyton-alt Sep 23, 2026
4657d8a
fix(strategy): only a missing or refused transcript is "no content" o…
peyton-alt Sep 23, 2026
0c85c35
fix(antigravity): preserve a user's title command on Windows hosts
peyton-alt Sep 23, 2026
d9fbda1
fix(strategy): let hook-captured files carry a mid-turn commit before…
peyton-alt Sep 23, 2026
6e53962
fix(summarize): bound the transcript for prompts only, not for display
peyton-alt Sep 23, 2026
860383c
fix(skills): keep the Antigravity install hint backtick-free
peyton-alt Sep 23, 2026
5003b80
fix(strategy): resolve condensation prompts outside the transcript gate
Soph Sep 24, 2026
fb7518a
fix(hooks): exempt the antigravity title-tee from the .entire guard
Soph Sep 24, 2026
a8390b3
fix(strategy): keep the deferred offset advance pending until it reso…
Soph Sep 24, 2026
7472423
fix(strategy): scope the hook-captured-files short-circuit to late-tr…
Soph Sep 24, 2026
563d942
refactor(agent): thread ctx through ExtractModifiedFilesFromOffset
Soph Sep 24, 2026
7382e5b
test(agent): clone the allowlist before appending scoped imports
Soph Sep 24, 2026
498a240
Merge origin/main into feat/antigravity-agent (Gemini CLI removal)
Soph Sep 24, 2026
c2838b4
docs(e2e): stop calling GEMINI_API_KEY shared with gemini-cli
Soph Sep 24, 2026
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
2 changes: 1 addition & 1 deletion .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Repository Overview

Entire CLI is a Go CLI tool that captures AI coding agent sessions (Claude Code, Codex, OpenCode, Cursor, Factory AI Droid, Copilot CLI, etc.) as searchable metadata stored separately from code commits. It uses a strategy pattern for session/checkpoint management with minimal impact on commit history.
Entire CLI is a Go CLI tool that captures AI coding agent sessions (Claude Code, Codex, Antigravity, OpenCode, Cursor, Factory AI Droid, Copilot CLI, etc.) as searchable metadata stored separately from code commits. It uses a strategy pattern for session/checkpoint management with minimal impact on commit history.

**Tech Stack**: Go (version in `mise.toml`), Cobra (CLI), charmbracelet/huh (interactive prompts), go-git/v5 (with caveats)

Expand Down
19 changes: 17 additions & 2 deletions .github/workflows/e2e-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
type: string
default: ""
agent:
description: "Agent to test (claude-code, factoryai-droid)"
description: "Agent to test (claude-code, factoryai-droid, antigravity)"
required: false
type: string
default: claude-code
Expand All @@ -27,6 +27,7 @@ on:
options:
- claude-code
- factoryai-droid
- antigravity

concurrency:
group: e2e-windows-tests-${{ inputs.agent }}
Expand Down Expand Up @@ -67,15 +68,28 @@ jobs:
# droid.exe lands in %USERPROFILE%\bin, not .local\bin.
"$env:USERPROFILE\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append

- name: Install antigravity
if: inputs.agent == 'antigravity'
run: |
# agy's official installer: it resolves the architecture, verifies a
# SHA-512 from the release manifest, and installs into
# %LOCALAPPDATA%\agy\bin. It always takes latest and has no version
# flag — right for a dispatch-only workflow, which wants whatever agy
# users actually have. e2e.yml pins instead; see its own comment.
irm https://antigravity.google/cli/install.ps1 | iex
"$env:LOCALAPPDATA\agy\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append

- name: Bootstrap agent
shell: bash
env:
AGENT: ${{ inputs.agent }}
# droid's runner writes ANTHROPIC_API_KEY into its BYOK settings, so
# both agents bootstrap off the same key; FACTORY_API_KEY is droid's
# own auth.
# own auth. antigravity runs in agy's Gemini API-key mode off the
# shared GEMINI_API_KEY, as on Linux.
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
FACTORY_API_KEY: ${{ secrets.FACTORY_API_KEY }}
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
run: go run ./e2e/bootstrap "$AGENT"

- name: Run isolated test
Expand All @@ -85,6 +99,7 @@ jobs:
AGENT: ${{ inputs.agent }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
FACTORY_API_KEY: ${{ secrets.FACTORY_API_KEY }}
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts
E2E_PARALLEL: 1
run: |
Expand Down
57 changes: 54 additions & 3 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ on:
- ''
- claude-code
- opencode
- antigravity
- factoryai-droid
- cursor-cli
- copilot-cli
Expand Down Expand Up @@ -52,7 +53,14 @@ jobs:
if [ -n "$input" ]; then
echo "agents=[\"$input\"]" >> "$GITHUB_OUTPUT"
else
echo 'agents=["claude-code","opencode","factoryai-droid","cursor-cli","copilot-cli","roger-roger","codex"]' >> "$GITHUB_OUTPUT"
# antigravity runs in agy's Gemini API-key mode (the
# GEMINI_API_KEY repo secret, no account session). agy < 1.1.25 loaded
# .agents/hooks.json on that route but never executed the hooks
# (google-antigravity/antigravity-cli#893); the install step above
# always fetches the latest release, which has executed them since
# 1.1.25. With the optional ANTIGRAVITY_GOOGLE_APPLICATION_CREDENTIALS_JSON
# secret the leg runs on ADC instead.
echo 'agents=["claude-code","opencode","factoryai-droid","cursor-cli","copilot-cli","roger-roger","codex","antigravity"]' >> "$GITHUB_OUTPUT"
fi

e2e-tests:
Expand Down Expand Up @@ -93,6 +101,32 @@ jobs:
case "${{ matrix.agent }}" in
claude-code) curl -fsSL https://claude.ai/install.sh | bash ;;
opencode) curl -fsSL https://opencode.ai/install | bash ;;
antigravity)
# Deliberately NOT pinned, because pinning agy does not work.
# agy self-updates IN PLACE — the updater replaces the executable
# at its own path, which in CI is the file installed here — and
# it spawns that updater on essentially every launch, ~0.4s in,
# with auth not gating it. Its only brake is a 15-minute check
# keyed on state a fresh CI home never has. So a pinned tarball
# governs only the FIRST agy spawn of the job, and the harness
# spawns agy once per prompt (e2e/agents/antigravity.go), so
# everything after prompt one runs whatever the updater fetched.
# Measured on Windows 11 ARM64: 1.2.7 installed, one headless
# prompt, 1.2.9 at the same path afterwards. agy offers no way
# out — no flag, no settings key, no env var.
#
# The consequence, stated rather than implied: this job's agy
# version floats, so a third-party agy regression CAN redden PRs
# that never touched Antigravity (see #893). That exposure was
# always real; the pin that used to sit here only read like
# protection. Closing it needs the updater actually blocked —
# an unwritable install path, or no egress for this step — and
# neither is tested yet.
#
# nightly-e2e.yml also tracks latest, but for its own reason:
# that job exists to report agy drift.
curl -fsSL https://antigravity.google/cli/install.sh | bash
;;
codex) npm install -g @openai/codex ;;
cursor-cli) curl https://cursor.com/install -fsS | bash ;;
factoryai-droid) curl -fsSL https://app.factory.ai/cli | sh ;;
Expand All @@ -109,6 +143,23 @@ jobs:
command -v roger-roger
command -v entire-agent-roger-roger

- name: Configure Antigravity ADC
if: matrix.agent == 'antigravity'
env:
ANTIGRAVITY_GOOGLE_APPLICATION_CREDENTIALS_JSON: ${{ secrets.ANTIGRAVITY_GOOGLE_APPLICATION_CREDENTIALS_JSON }}
run: |
set -euo pipefail
# ADC is optional since agy 1.1.13: without the secret the harness runs
# agy in Gemini API-key mode (the GEMINI_API_KEY repo secret).
if [ -z "${ANTIGRAVITY_GOOGLE_APPLICATION_CREDENTIALS_JSON:-}" ]; then
echo "No ANTIGRAVITY_GOOGLE_APPLICATION_CREDENTIALS_JSON secret; Antigravity E2E uses GEMINI_API_KEY (agy API-key mode)"
exit 0
fi
creds="$RUNNER_TEMP/antigravity-google-credentials.json"
install -m 600 /dev/null "$creds"
printf '%s' "$ANTIGRAVITY_GOOGLE_APPLICATION_CREDENTIALS_JSON" > "$creds"
echo "GOOGLE_APPLICATION_CREDENTIALS=$creds" >> "$GITHUB_ENV"

- name: Bootstrap agent
if: matrix.agent != 'roger-roger'
env:
Expand Down Expand Up @@ -162,9 +213,9 @@ jobs:
retention-days: 7

e2e-windows:
# Windows covers the two agents e2e-windows.yml can install. An unset agent
# Windows covers the agents e2e-windows.yml can install. An unset agent
# (the push path) means claude-code, as before.
if: inputs.agent == '' || inputs.agent == 'claude-code' || inputs.agent == 'factoryai-droid'
if: inputs.agent == '' || inputs.agent == 'claude-code' || inputs.agent == 'factoryai-droid' || inputs.agent == 'antigravity'
uses: ./.github/workflows/e2e-windows.yml
permissions:
contents: read
Expand Down
75 changes: 58 additions & 17 deletions .github/workflows/nightly-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ concurrency:
jobs:
smoke:
runs-on: ${{ matrix.os }}
# Above the sum of the agents' own retry ceilings (~85m: 9 + 18 + 13.5 +
# 13.5 + 18 + 13.5, see the step caps below) plus setup, so the per-step cap
# is always the one that binds — a step timeout leaves an attributable row
# in the table, a job timeout kills Summarize and the artifact upload with
# it. Legs measure 6m30s-8m40s; this only binds on a hang in one of the
# uncapped setup steps.
timeout-minutes: 90
# Above the sum of the agents' own retry ceilings (~108m: 9 + 18 + 13.5 +
# 13.5 + 18 + 13.5 + 22.5, see the step caps below) plus setup, so the
# per-step cap is always the one that binds — a step timeout leaves an
# attributable row in the table, a job timeout kills Summarize and the
# artifact upload with it. Legs measure 6m30s-8m40s; this only binds on a
# hang in one of the uncapped setup steps.
timeout-minutes: 115
permissions:
contents: read
actions: read
Expand Down Expand Up @@ -181,32 +181,50 @@ jobs:
# unauthenticated api.github.com call it gives no way to authenticate,
# so it is rate-limited at random.
npm install -g @openai/codex @github/copilot opencode-ai
# agy's official installer: it resolves OS and architecture itself,
# verifies a SHA-512 from the release manifest, and installs latest
# into ~/.local/bin, which the line below puts on PATH.
curl -fsSL https://antigravity.google/cli/install.sh | bash
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
echo "AGENTS=claude-code opencode codex cursor-cli factoryai-droid copilot-cli" >> "$GITHUB_ENV"
echo "AGENTS=claude-code opencode codex cursor-cli factoryai-droid copilot-cli antigravity" >> "$GITHUB_ENV"

# cursor-cli is absent: its E2E driver sends every prompt through tmux
# (e2e/agents/cursor_cli.go), because Cursor's headless -p mode fires no
# hooks — and there is no tmux on Windows.
# cursor-cli is the only absence here: its E2E driver sends every prompt
# through tmux (e2e/agents/cursor_cli.go), because Cursor's headless -p
# mode fires no hooks — and there is no tmux on Windows.
#
# antigravity matters most on this leg: it is the one agent whose Windows
# hook path differs from its Unix one (agy hands hook commands to
# cmd.exe, not sh), and a hook that fails there is silent — agy still
# reports success. Nothing else exercises that path automatically.
- name: Install agent CLIs (Windows)
if: matrix.os == 'windows-latest'
shell: pwsh
run: |
irm https://claude.ai/install.ps1 | iex
irm https://app.factory.ai/cli/windows | iex
irm https://antigravity.google/cli/install.ps1 | iex
npm install -g @openai/codex @github/copilot opencode-ai
# Stop does not cover native commands ($PSNativeCommandUseError-
# ActionPreference defaults to $false), so npm's failure needs this.
if ($LASTEXITCODE -ne 0) { throw "npm install failed (exit $LASTEXITCODE)" }
# Neither iex line needs such a guard: both installers throw or exit
# on every failure path, and that ends this step. Verified 2026-09-09
# for claude, 2026-09-10 for droid, whose installer shadows
# Write-Error with one that exits 1.
# None of the three iex lines needs such a guard: each installer
# throws or exits on every failure path, and that ends this step.
# Verified 2026-09-09 for claude, 2026-09-10 for droid, whose
# installer shadows Write-Error with one that exits 1, and
# 2026-09-23 for agy, which throws rather than exits when it is run
# sourced, as `| iex` runs it.
"$HOME\.local\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
# droid's Windows installer puts droid.exe in %USERPROFILE%\bin, not
# .local\bin, and updates only the stored user PATH, which later
# steps do not re-read.
"$HOME\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
"AGENTS=claude-code codex copilot-cli opencode factoryai-droid" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
# agy lands in %LOCALAPPDATA%\agy\bin, and its installer updates the
# stored user PATH the same way. It picks the architecture itself and
# always serves latest, so there is nothing to keep in sync here;
# e2e.yml downloads a release tarball instead only because it pins an
# exact version, which this installer has no flag for.
"$env:LOCALAPPDATA\agy\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
"AGENTS=claude-code codex copilot-cli opencode factoryai-droid antigravity" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append

# One step per agent: a step timeout is the only per-agent bound that
# works on all three runners (macOS has no timeout(1)), and one hung agent
Expand All @@ -233,7 +251,8 @@ jobs:
# E2E_ENTIRE_BIN (job env, set above) is what makes this the *installed*
# nightly: the mise task skips its build when it is set.
#
# The six bodies are byte-identical; only AGENT and the key differ.
# The seven bodies are byte-identical; only AGENT, the key and (for
# antigravity, whose TimeoutMultiplier is 2.5x) the step cap differ.
- name: Smoke test claude-code
if: ${{ !cancelled() && contains(format(' {0} ', env.AGENTS), ' claude-code ') }}
timeout-minutes: 20
Expand Down Expand Up @@ -351,6 +370,28 @@ jobs:
echo "$AGENT $rc" >> e2e/artifacts/results.txt
exit "$rc"

# 25 minutes: 3 attempts x 3 min x the 2.5x multiplier is 22.5 min.
# GEMINI_API_KEY selects agy's API-key mode (no account session); the
# harness writes modelProvider=gemini into an isolated HOME itself.
- name: Smoke test antigravity
if: ${{ !cancelled() && contains(format(' {0} ', env.AGENTS), ' antigravity ') }}
timeout-minutes: 25
shell: bash
env:
AGENT: antigravity
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
run: |
set +e
set -uo pipefail
mkdir -p e2e/artifacts
go run ./e2e/bootstrap "$AGENT" &&
E2E_ARTIFACT_DIR="$ARTIFACT_ROOT/$AGENT" \
mise run test:e2e --agent "$AGENT" "$TEST_FILTER"
rc=$?
grep -q '^Total: 0 ' "$ARTIFACT_ROOT/$AGENT/report.txt" 2>/dev/null && rc=1
echo "$AGENT $rc" >> e2e/artifacts/results.txt
exit "$rc"

- name: Summarize
if: always()
shell: bash
Expand Down
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ These are markdown files that define specialized behaviors for Claude Code (e.g.

### 2. Coding Agent Integrations (Go)

These are Go implementations that integrate Entire with different AI coding tools (Claude Code, Codex, OpenCode, Cursor, Factory AI Droid, Copilot CLI, etc.) using the Agent abstraction layer.
These are Go implementations that integrate Entire with different AI coding tools (Claude Code, Codex, Antigravity, OpenCode, Cursor, Factory AI Droid, Copilot CLI, etc.) using the Agent abstraction layer.

- **Location:** `cmd/entire/cli/agent/`
- **Steps:**
Expand Down Expand Up @@ -272,7 +272,7 @@ Addressing Copilot feedback upfront is the fastest path to maintainer review.

Entire exists to help you work with AI coding agents, so it would be odd if you weren't using one to contribute. There's no need to tell us you did. Our general thinking: use whatever agent and methodology you like, but until the robot revolution comes, you are responsible for the final code. Before submitting a PR for review, make sure you have reviewed it yourself. We'll close PRs that obviously skipped this step.

Entire supports Claude Code, Codex, OpenCode, Cursor, Factory AI Droid, Copilot CLI, and Pi, so feel free to use whichever one you're most comfortable with.
Entire supports Claude Code, Codex, Antigravity, OpenCode, Cursor, Factory AI Droid, Copilot CLI, and Pi, so feel free to use whichever one you're most comfortable with.

One thing to watch out for is LLM eagerness. Agents like to please and they're in a hurry. A few common failure modes to push back on:

Expand Down
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ With Entire, you can:
- **Understand why code changed, not just what** — Transcripts, prompts, files touched, token usage, tool calls, and more are captured alongside every commit.
- **Resume from any checkpoint** — Go back to any previous agent session and pick up exactly where you or a coworker left off.
- **Full context preserved and searchable** — A versioned record of every AI interaction tied to your git history, with nothing lost.
- **Zero context switching** — Git-native, two-step setup, works with Claude Code, Codex, Cursor, Pi, and more.
- **Zero context switching** — Git-native, two-step setup, works with Claude Code, Codex, Cursor, Antigravity, Pi, and more.

## Table of Contents

Expand Down Expand Up @@ -377,7 +377,7 @@ These are visible in developer and nightly builds and hidden in stable releases,

| Flag | Description |
| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| `--agent <name>` | Agent to set up hooks for: `claude-code`, `codex`, `copilot-cli`, `cursor`, `factoryai-droid`, `opencode`, `pi` (external agents on `$PATH` also work). Enables non-interactive mode |
| `--agent <name>` | Agent to set up hooks for: `antigravity`, `claude-code`, `codex`, `copilot-cli`, `cursor`, `factoryai-droid`, `opencode`, `pi` (external agents on `$PATH` also work). Enables non-interactive mode |
| `--yes`, `-y` | Accept all defaults without prompting |
| `--force`, `-f` | Force reinstall hooks (removes existing Entire hooks first) |
| `--checkpoint-remote <provider:owner/repo>` | Push checkpoint data to a separate repo; providers `github`, `gitlab` (e.g., `github:org/checkpoints-repo`) |
Expand Down Expand Up @@ -526,6 +526,7 @@ Each agent stores its hook configuration in its own directory. When you run `ent

| Agent | Hook Location | Format |
| ---------------- | ----------------------------- | ----------------- |
| Antigravity | `.agents/hooks.json` | JSON hooks config |
| Claude Code | `.claude/settings.json` | JSON hooks config |
| Codex | `.codex/hooks.json` | JSON hooks config |
| Copilot CLI | `.github/hooks/entire.json` | JSON hooks config |
Expand Down Expand Up @@ -616,7 +617,7 @@ When enabled, Entire automatically generates AI summaries for checkpoints at com

Summaries are also generated on demand, with or without this setting, by `entire checkpoint explain --generate`.

**Which agent writes them.** By default Claude Code (`claude` on your `PATH`, model `sonnet`). Set a different one with `summary_generation.provider` — `claude-code`, `codex`, `copilot-cli`, `cursor`, `opencode`, or `pi`, plus an optional `summary_generation.model` hint:
**Which agent writes them.** By default Claude Code (`claude` on your `PATH`, model `sonnet`). Set a different one with `summary_generation.provider` — `antigravity`, `claude-code`, `codex`, `copilot-cli`, `cursor`, `opencode`, or `pi`, plus an optional `summary_generation.model` hint:

```bash
entire configure --summarize-provider codex
Expand Down
Loading
Loading