Skip to content

Revamp for Agent Grid and fix the drifted tool surface - #3

Merged
macabeus merged 6 commits into
mainfrom
revamp-agentgrid
Aug 5, 2026
Merged

Revamp for Agent Grid and fix the drifted tool surface#3
macabeus merged 6 commits into
mainfrom
revamp-agentgrid

Conversation

@macabeus

@macabeus macabeus commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Why now

The skill has not changed since 2026-03-27, but the repo is live: 132 clones from 60 unique cloners in the last 14 days, driven mostly from animaapp.com. Meanwhile the MCP tool surface was renamed underneath it.

Three of the four documented tools no longer exist. Every customer agent following this guide is calling dead names.

SKILL.md said Reality
playground-create artifact-create
playground-publish artifact-publish
project-download_from_playground removed — no replacement
codegen-figma_to_code ✅ unchanged

Seven shipped tools were undocumented: artifact-status, artifact-duplicate, artifact-unpublish, artifact-update_metadata, artifact-get_zip_upload_url, artifact-get_git_token, workspace-list_artifacts.

What changed

Everything is checked against @animaapp/mcp-tools definitions.ts / schemas.ts and the @animaapp/cli command definitions.

Behavioural corrections

  • Generation is asynchronous. artifact-create returns status: 'generating'; the supported pattern is artifact-status(wait: true) until it resolves. The old skill told agents to hold a single 10-minute call open.
  • framework defaults to html over MCP, not react.
  • Adds the empty / import create types and the zip-upload flow — bringing your own code was entirely undocumented.
  • Editing goes through git, never a browser. New references/git-workflow.md covers clone/push and non-renewable tokens.
  • Publishing makes an app public and is not required for sharing.
  • designSystem publish mode always fails over MCP.
  • l2c accepts vanilla_css; p2c takes no uiLibrary.
  • Headless auth is ANIMA_API_TOKEN, not the advertised ANIMA_API_KEY.
  • Drops anima download, which is not a CLI command.

Rebrand
Agent Grid throughout; endpoint moves to https://api.agentgrid.io/v1/mcp in .mcp.json, server.json, openai.yaml, and the README.

Deliberately unchanged — so nothing already installed breaks:
plugin: anima · marketplace: anima@mcp-server-guide · registry: io.github.AnimaApp/anima · the skills/anima/ path (codex skill install documents it).

Structure

  • anima-skill-references/skills/anima/references/, so the plugin reads them from disk instead of fetching github.com mid-task.
  • anima/SKILL.md stays (it's the most-read file in the repo — 39 unique readers vs 1 for the skills/ copy) but is now generated by scripts/build-mirror.sh and enforced by CI instead of hand-synced.
  • Adds assets/anima-icon.svg, which openai.yaml referenced without the file existing.

Verification

  • Every tool name in the docs exists in definitions.ts, and all 10 real tools are documented — both set differences are empty.
  • Every anima <cmd> in the docs is a registered CLI command.
  • All JSON parses; both SKILL.md frontmatters parse; no relative link is dead; no public-api.animaapp.com or ANIMA_API_KEY remains.

Needs a human before merge

  • assets/anima-icon.svg is a placeholder I generated — a plain geometric mark in the existing #FF6250. Design should replace it.
  • Confirm api.agentgrid.io is the endpoint to publish to customers (both it and public-api.animaapp.com currently answer).
  • The MCP tools return dev.animaapp.com/chat/<sessionId> URLs while the docs lead with app.agentgrid.io/artifacts/<sessionId>. Docs teach both and explain the id is the last path segment either way — but the split is worth closing product-side.
  • server.json is bumped to 2.0.0; the MCP Registry entry needs a separate publish to pick it up.
  • Naming: MCP tool descriptions say "Agent Grid", the CLI README says "AgentGrid". This PR uses Agent Grid.

The skill documented four MCP tools, three of which no longer exist. Agents
following it have been calling dead names since the artifact-* rename.

Tool surface, checked against @animaapp/mcp-tools definitions.ts/schemas.ts:

  playground-create                 -> artifact-create
  playground-publish                -> artifact-publish
  project-download_from_playground  -> removed (no replacement; use git)
  codegen-figma_to_code             -> unchanged

All seven previously undocumented tools are now covered: artifact-status,
artifact-duplicate, artifact-unpublish, artifact-update_metadata,
artifact-get_zip_upload_url, artifact-get_git_token, workspace-list_artifacts.

Corrections that change agent behaviour:

- Generation is async. artifact-create returns status:'generating'; the
  supported pattern is artifact-status(wait:true) in a loop, not a single
  10-minute client timeout, which is what the old skill taught.
- framework defaults to html over MCP, not react.
- Adds the empty/import create types (bring your own code) and the zip
  upload flow, neither previously documented.
- Editing an artifact goes through git (artifact-get_git_token), never a
  browser. New references/git-workflow.md covers clone/push and the fact
  that tokens cannot be renewed.
- Publishing makes an app public and is not needed for sharing.
- designSystem publish mode always fails over MCP.
- l2c styling accepts vanilla_css; p2c takes no uiLibrary.
- Headless auth is ANIMA_API_TOKEN, not the advertised ANIMA_API_KEY.
- Drops `anima download`, which is not a CLI command.

Rebranding to Agent Grid, endpoint moved to https://api.agentgrid.io/v1/mcp
across .mcp.json, server.json, openai.yaml and README. Install ids are
deliberately unchanged (plugin `anima`, marketplace `anima@mcp-server-guide`,
registry io.github.AnimaApp/anima, skills/anima path) so existing installs
and `codex skill install` keep working.

References move from anima-skill-references/ to skills/anima/references/ so
the plugin reads them from disk instead of fetching github.com mid-task.
anima/SKILL.md stays as the mirror it has always been (it is the most-read
file in the repo by traffic) but is now generated by scripts/build-mirror.sh
and enforced by CI rather than hand-synced.

Also adds assets/anima-icon.svg, which openai.yaml has been pointing at
without the file existing.
Two independent reviewers audited the rewrite against tools/*/handlers.ts,
the api package, and the CLI; both converged on the same three CRITICALs.
Each fix below is confirmed against source, not just the tool descriptions.

CRITICAL
- The CLI does NOT wait for generation. artifact-create is non-blocking
  (handlers.ts:400) and the CLI calls it exactly once then prints "Artifact
  created!" (create.ts:123-140); `artifact-status` appears nowhere in the CLI
  and no status command is registered. The skill claimed the CLI "handles the
  status wait for you", which would make agents report unfinished apps as done.
  Now documented as fire-and-forget, with MCP preferred for generation.
- CLI l2c/f2c examples passed --ui-library without --framework react. The CLI
  defaults generation to html (create.ts:253) and the server rejects uiLibrary
  unless framework is react (schemas.ts:239-246), so both documented commands
  always failed. Added --framework react and an explicit rule.
- /plugin install anima@mcp-server-guide could not resolve: Claude Code keys
  marketplaces by marketplace.json `name` (was "anima"), not the repo name.
  Renamed the marketplace to mcp-server-guide so the already-published command
  works. Plugin id stays `anima`.

MAJOR
- codegen-figma_to_code defaults framework to react, not html (codegen
  schemas.ts:29). The html default belongs to artifact-create only; the skill
  had contradicted its own reference doc.
- Inline `files` caps are 1000 files / 10MB enforced (api projectZip.ts:10-11),
  not the ~100KB the tool description states. Agents were being pushed into the
  zip flow ~100x under the real limit, and the file count cap was undocumented.
- A user may have only 3 active jobs across generation/codegen/deploy
  (claimMcpGeneration.lua:93). Explore mode's "fire 3 in parallel" sits exactly
  on that cap; documented with the "Too many concurrent jobs" recovery.
- codegen `files` is filtered (filterBoilerplate, CodegenEventHandler.ts:40-66):
  config, entry points, *.d.ts and ALL of src/components/ are stripped — where
  extracted and shadcn components live. Documented so agents don't read the
  absence as a failed generation.
- type empty is not a bare repo; it lands a seed README commit
  (ownCodeArtifact.ts:129-139), so "add the remote and push" is a
  non-fast-forward. Now says clone first.

MINOR
- The git token in a create response is not unconditional (mint is skipped for
  some clients and can fail) — softened the absolute "do not call
  artifact-get_git_token".
- language is a no-op for p2c; l2c is only TypeScript under framework react.
- workspace-list_artifacts: sessionId only on app rows, plus truncated and the
  silent empty list for agents lacking read.
- codegen uiLibrary also accepts clean_react.
- artifact-publish also takes packageName/packageVersion, and passing either
  with mode webapp is a hard error.
- artifact-status returns thumbnailUrl; own-code create returns framework/notes.
- framework's html default applies to generation types only; import detects it.
- ANIMA_TEAM_ID is only read alongside ANIMA_API_TOKEN; --api-url is on every
  command except the config subcommands.
- Noted the enterprise design_system-* tool group.
- Moved the icon to skills/anima/assets/ so openai.yaml's ./assets/ path
  resolves from the skill root that `codex skill install` uses.
@macabeus

macabeus commented Aug 5, 2026

Copy link
Copy Markdown
Contributor Author

Adversarial review pass — 25 defects found, all fixed

Two independent reviewers audited this branch against tools/*/handlers.ts, the api package, the Redis job scripts, and the CLI. They ran separately and converged on the same three CRITICALs, which is the part I'd trust most.

I re-verified every material finding against source myself before changing anything.

CRITICAL

  1. The CLI does not wait for generation — the worst one, and mine. artifact-create is non-blocking (handlers.ts:400); the CLI calls it once and prints "Artifact created!" (create.ts:123-140). artifact-status appears nowhere in the CLI and there is no status command. The skill told agents the CLI "handles the status wait for you" — they would have reported still-building apps as finished. Now documented as fire-and-forget, with MCP preferred for generation.
  2. Two CLI examples always failed. -t l2c/-t f2c with --ui-library but no --framework react: the CLI defaults generation to html (create.ts:253) and the server rejects uiLibrary unless the framework is react (schemas.ts:239-246).
  3. /plugin install anima@mcp-server-guide could not resolve. Claude Code keys marketplaces by marketplace.json's name (was "anima"), not the repo name — verified against a real known_marketplaces.json, where anthropics/claude-code is keyed claude-code-plugins. Renamed the marketplace to mcp-server-guide so the already-published command works; plugin id stays anima. This bug predates this PR.

MAJOR

  1. codegen-figma_to_code defaults to react, not html — the html default belongs to artifact-create. The skill contradicted its own reference doc.
  2. Inline files caps are 1000 files / 10 MB enforced (api/src/utils/projectZip.ts:10-11), not the "~100 KB" in the tool description. Agents were being pushed into the 3-step zip flow ~100× under the real limit, and the file-count cap — the one that actually bites — was undocumented.
  3. A user may have only 3 active jobs, shared across generation, codegen, and deploy (claimMcpGeneration.lua:93). Explore mode's "fire 3 in parallel" sits exactly on the cap, so any concurrent publish silently kills a variant. Documented with the Too many concurrent jobs recovery.
  4. codegen files is filtered (filterBoilerplate, CodegenEventHandler.ts:40-66) — config, entry points, *.d.ts, and all of src/components/, which is exactly where extracted and shadcn components live. Documented so agents don't read the absence as a failed generation.
  5. type: empty is not a bare repo — it lands a seed README.md commit (ownCodeArtifact.ts:129-139), so "add the remote and push" is a non-fast-forward. Now says clone first.

MINOR (9 more)

Git token in the create response isn't unconditional; language is a no-op for p2c; l2c is TypeScript only under react; workspace-list_artifacts returns sessionId only on app rows (plus truncated, plus a silent empty list without read); codegen also accepts clean_react; artifact-publish also takes packageName/packageVersion and rejects them with mode: webapp; artifact-status returns thumbnailUrl; the html default applies to generation types only; ANIMA_TEAM_ID is read only alongside ANIMA_API_TOKEN; --api-url is on every command except config.

Also fixed

The icon moved to skills/anima/assets/ so openai.yaml's ./assets/ path resolves from the skill root that codex skill install targets.

Executable verification

Rebuilt the CLI from source and ran all 13 documented example invocations: every one parses and fails only at AUTH_REQUIRED. anima mcp-config emits {"anima":{"type":"http","url":"https://api.agentgrid.io/v1/mcp"}} — matching .mcp.json exactly. Three documented validation rules fire verbatim. build-mirror.sh is idempotent and the CI staleness check was verified empirically.

Still open for a human

  • The assets/anima-icon.svg placeholder still needs a real mark from design.
  • Product bug, not a docs bug: the artifact-create schema description advertises "~100 KB" for inline files while the enforcing code allows 10 MB / 1000 files, and the CLI hardcodes 10 MB with a comment claiming it is "kept in sync with artifact-create". Two of those three should change.
  • Product gap: the CLI has no way to await or query generation. Today anima create -t p2c is unusable for agents that need to know when the app is ready. A status command (or a --wait flag) would close it.

Artifact content is editable in the Agent Grid webapp too — editing a
markdown artifact there, for example. The wording came from the
artifact-get_git_token tool description ("the only way to change its
files"), and had spread to five places.

Reframed by audience rather than capability: the git flow is how an agent
edits content, the webapp is how a human does. The practical guidance for
an agent is unchanged — use git, don't drive the webapp with browser
automation, don't re-generate to edit — but it no longer states something
false about the product.

Touches SKILL.md (x2), git-workflow.md, mcp-tools.md, troubleshooting.md
and workflows.md, plus the regenerated mirror.
Version-scoped wording dates the docs and tells an agent nothing actionable
— it cannot condition on a release number. State the capability instead:
duplicating across teams is not currently supported.
ANIMA_API_URL and --api-url exist to point the CLI at staging or a local
API. Neither belongs in customer-facing setup: they invite an agent to
override the endpoint it should never override, and the whole "Pointing at
another environment" section existed only to serve them.

Dropped the env var row and the section. --api-url went with it for the
same reason — keeping a flag whose stated purpose is "target staging or a
local API" while removing its env equivalent would be incoherent.

Headless setup now documents ANIMA_API_TOKEN, ANIMA_TEAM_ID and
FIGMA_TOKEN only.
The entry blamed a CLI/MCP split. There isn't one: anima create defaults to
html to match artifact-create (create.ts:252-254 says so explicitly), and
anima codegen defaults to react to match codegen-figma_to_code. The split
is between the two tools, and it is consistent across both surfaces.

Replaced the prose with the actual 2x2 so nobody "fixes" it by changing one
surface and creating the divergence the doc claimed.
@macabeus
macabeus merged commit 8039750 into main Aug 5, 2026
1 check passed
@macabeus
macabeus deleted the revamp-agentgrid branch August 5, 2026 20:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant