- Create AGENTS.md (90 lines) as shared foundation for Claude Code + Antigravity - Slim CLAUDE.md from 113 to 45 lines (Claude-specific only, references AGENTS.md) - Slim GEMINI.md from 58 to 26 lines (Antigravity-specific only, references AGENTS.md) - Add 6 Antigravity workflows in .agent/workflows/ (session-start, preflight, token-sync, visual-qa, build-component, page-review) - Add docs/reference/cross-tool-workflow.md with task routing, quality gates, file ownership, error mitigation - Zero content overlap between CLAUDE.md and GEMINI.md (was ~80%) - File ownership boundaries defined for current phase and future backend work Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
7.5 KiB
Cross-Tool Workflow: Claude Code + Google Antigravity
How the tools work together
Claude Code (terminal) — code generation, refactoring, quality analysis, memory management. Has 18 custom skills, 3 agents, MCP access (Figma, Storybook). Strengths: deep code reasoning, multi-file refactors, token architecture, grief-sensitive copy review, git operations.
Antigravity (IDE) — visual verification, browser interaction, page-level review.
Has 6 custom workflows in .agent/workflows/. Strengths: built-in browser for
Storybook verification, screenshot comparison across breakpoints, multi-agent
parallelism via Manager View.
Both read: AGENTS.md (shared rules), docs/memory/ (shared state), all source files.
Task routing
Always Claude Code
- Creating new components (
/build-atom,/build-molecule,/build-organism) - Token creation and architecture (
/create-tokens,/sync-tokens) - Code quality analysis (
/audit,/critique,/harden,/normalize) - Writing tests and stories (
/write-tests,/write-stories) - Visual polish skills (
/polish,/typeset,/adapt,/quieter,/clarify) - Memory file updates (decisions-log, component-registry, session-log)
- Git operations (commit, push)
- Multi-file refactors
- Figma MCP interactions (design extraction)
Always Antigravity
- Browser-based visual QA (
/fa-visual-qaworkflow) - Screenshot comparison across breakpoints (375/768/1280px)
- Page-level visual review (
/fa-page-reviewworkflow) - Storybook visual regression checks
Either tool (user's choice)
- Preflight checks (Claude:
/preflight| Antigravity:/fa-preflight) - Token sync rebuild (Claude:
/sync-tokens| Antigravity:/fa-token-sync) - Session status report (Claude:
/status| Antigravity:/fa-session-start) - Reading and analysing existing code
- Copy and content review
The sandwich workflow
Every significant change should follow a three-step pattern that uses both tools.
For new components or features
- Plan (Claude Code): Read memory files, check registry, design the approach
- Build (Claude Code): Implement — component, tokens, stories, tests
- Verify (Antigravity): Open in Storybook, screenshot at 3 breakpoints, report issues
For page tweaking (current phase)
- Assess (Antigravity): Run
/fa-page-review, screenshot current state, identify issues - Fix (Claude Code): Make targeted fixes to spacing, copy, alignment, responsive
- Verify (Antigravity): Re-run
/fa-visual-qa, confirm fixes, screenshot final state
The sandwich ensures no change goes live without both code quality AND visual verification.
Quality gates
The 10-stage component lifecycle (docs/reference/component-lifecycle.md) applies
regardless of which tool does the work.
| Stage | Primary tool | Gate |
|---|---|---|
| 1. BUILD | Claude Code | — |
| 2. STORIES | Claude Code | — |
| 3. INTERNAL QA | Claude Code (/audit, /critique, /harden) |
P0 = blocking |
| 4. FIX | Claude Code | Until P0/P1 = 0 |
| 5. POLISH | Claude Code (/polish, /typeset, /adapt) |
— |
| 6. PRESENT | Antigravity (/fa-visual-qa) |
Visual sign-off |
| 7. ITERATE | Both (Claude fixes, Antigravity verifies) | User approves |
| 8. NORMALIZE | Claude Code (/normalize) |
— |
| 9. PREFLIGHT | Either (/preflight or /fa-preflight) |
Critical = blocking |
| 10. COMMIT | Claude Code | — |
Enforcement: No component moves past PRESENT without Antigravity visual sign-off. No component moves to COMMIT without preflight passing.
File ownership boundaries
Current phase (frontend only)
| Scope | Claude Code | Antigravity |
|---|---|---|
src/components/**/*.tsx |
write | read only |
src/components/**/*.stories.tsx |
write | read only |
src/components/**/index.ts |
write | read only |
tokens/**/*.json |
write | read only |
src/theme/** |
write | read only |
docs/memory/** |
write | read only |
docs/conventions/**, docs/reference/** |
write | read only |
.agent/workflows/*.md |
read only | write (own workflows) |
AGENTS.md |
write (coordinate first) | write (coordinate first) |
CLAUDE.md |
write | never |
GEMINI.md |
never | write |
When backend starts (Payload CMS)
- Backend agent writes:
src/payload/**,src/api/**, database schemas, server config - Frontend agents never touch: anything in
src/payload/orsrc/api/ - Backend agent never touches:
src/components/**,tokens/**,src/theme/** - Shared contract:
documentation/flow-definition.yamlis the interface between frontend and backend. Field names, step IDs, and visibility rules in that file dictate both component props and API data shapes. Changes require both sides to acknowledge.
Conflict resolution
- If two agents need to edit the same file: STOP, flag it in
docs/memory/session-log.md, let the user decide who proceeds. - If agents produce conflicting output:
docs/memory/decisions-log.mdis the tiebreaker. Whoever's approach matches a logged decision wins.
Error mitigation
Pre-flight checklist (before any agent work)
- Read
docs/memory/session-log.md— is another agent mid-task? - Read
docs/memory/component-registry.md— is the target component in-progress by someone else? - Confirm file ownership — am I allowed to write these files?
- Storybook running? (
localhost:6006) - Git clean? No uncommitted changes from a previous session
Memory file update protocol
- Read the file before writing (always)
- Append, do not overwrite existing entries
- Use the established format (each file documents its own format)
- Include decision IDs (D001, D002...) for traceability
- Log agent name and date in every session-log entry
Verification after every change
- TypeScript compiles:
npx tsc --noEmit - Storybook renders the specific story (not just builds)
- Visual check: at least desktop breakpoint for small changes, all three for layout changes
- Token sync: if tokens changed, run
npm run build:tokensand verify output
When agents produce conflicting output
- Check
docs/memory/decisions-log.mdfor a prior decision - If a decision exists: follow it, flag the conflict in session-log
- If no decision exists: STOP, do not proceed, ask the user
- Never silently override another agent's work
Common failure modes and recovery
| Failure | Symptom | Recovery |
|---|---|---|
| Stale tokens | Generated files older than source JSON | Run npm run build:tokens |
| Hardcoded values | Hex colours in .tsx files |
Run preflight scan, replace with theme refs |
| Memory drift | Session log not updated | Always update session-log as last step |
| Story rendering failure | Component changed but stories broken | Run /write-stories to regenerate |
| File ownership violation | Two agents edited same file | git diff to see both changes, manually merge |
Adapting for backend work
When Payload CMS implementation begins:
- Add a
## Backend (Payload CMS)section toAGENTS.mdwith Payload-specific rules - Add backend file ownership to the boundaries above
documentation/flow-definition.yamlbecomes the API contract — field names, step IDs, and visibility rules dictate both frontend props and backend data shapes- Backend agent reads
documentation/flow-definition.yamlanddocumentation/steps/*.yamlas its primary specifications - Frontend agents continue unchanged — the boundary is the data interface, not the UI