Skip to main content
Version: 0.0.5

Providers

A provider is a target AI-coding tool that graft reads from and writes to. Each provider has its own file layout and schema; graft hides those differences behind one interface.

What graft supports

graft targets 8 active providers, defined in the frozen Provider contract (internal/contract):

Provider idToolActive
claude-codeClaude CodeYes
codexCodexYes
cursorCursorYes
github-copilotGitHub CopilotYes
opencodeOpenCodeYes
roo-codeRoo CodeYes
gooseGooseYes
grok-cliGrok CLIYes
gemini-cliGemini CLINo (deprecated 2026-06-15)
antigravityAntigravityCatalog only — see note below

:::note antigravity antigravity has a catalog entry (schema, models, capabilities) but is currently not registered in the sync engine. The agent-definition format and home-scope paths need a research spike before it can be wired up. Until then it is excluded from graft sync, graft agent, and provider-count summaries. It will be re-registered once the format is confirmed. :::

What a provider does

Every provider implements the same interface:

  • Detect — find this provider's agent files under the workspace root.
  • Parse — read one provider file into a provider-shaped form.
  • ToCanonical — map a parsed provider agent into the neutral canonical form, preserving non-canonical fields under providerOverrides.
  • Serialize — render a canonical agent into this provider's file(s), restoring stashed overrides.
  • Schema — return the provider's JSON Schema for validation.

Because every provider speaks this one interface, the sync engine and transform registry treat them uniformly.

providerOverrides

Providers carry settings that have no neutral home in the canonical model. These are stored under providerOverrides[<provider>] in agent.yaml and restored verbatim when serializing back to that provider.

Rules:

  • name is never overridable via providerOverrides — it is the agent's identity and is enforced at the serialization layer.
  • An unknown provider key under providerOverrides is an error (blocks sync). graft uses Levenshtein distance to suggest the nearest valid provider id.
  • Override values are validated against the provider's catalog schema. Unrecognized fields produce a warning (never blocking) because catalog schemas may be incomplete.

Enabling a subset

You do not have to sync all providers. providers.mode and providers.enabled[] / providers.disabled[] control which providers participate. See Config reference.