Skip to main content

Coding agents

A coding agent can write a template and the code that sends it data, but it does not know Formfeed: where a template's files go, how each template language calls a helper, which command checks what, and what costs units. Formfeed's plugin tells it. It has two parts:

  • Two skills, instructions the agent loads when a task needs them:
    • formfeed-templates writes, changes, checks, previews and renders templates as files with the formfeed CLI. The agent uses it when a project has a formfeed.json, when you ask for a PDF, image, Word or PowerPoint template, or when templates move over from another provider.
    • formfeed-api writes the application code that creates documents: a render, waiting for an asynchronous one, batches, webhooks and errors, with the TypeScript or Python SDK, or over HTTP from any other language.
  • The hosted MCP server, so the agent can list your templates, read the data each one expects, check data and render, signed in with your Formfeed account.

The skills carry what the agent looks things up in: every command of the CLI with its flags, every helper in all three template languages, the API's error codes, and the same request in eight languages. Each release writes them from that release's CLI, engine and documentation, so a skill never names a flag or a helper the version you install lacks.

Install​

Claude Code​

claude plugin marketplace add formfeed-dev/skills
claude plugin install formfeed@formfeed-dev

Claude Code 2.1.292 and later do both in one command, claude plugin install formfeed --marketplace formfeed-dev/skills. Inside a session, /plugin install formfeed --marketplace formfeed-dev/skills opens the plugin's details, where you choose whether it is yours in every project, the repository's for everyone, or yours in this repository only.

The plugin loads in the next session, or at once with /reload-plugins. Its skills then show in the / menu as /formfeed:formfeed-templates and /formfeed:formfeed-api, though the agent loads them by itself when a task needs them, and Claude Code lists the server as plugin:formfeed:formfeed, waiting for authentication until you sign in (see below).

Claude Code does not update a plugin from this marketplace by itself: run claude plugin update formfeed@formfeed-dev, or turn on auto-update for formfeed-dev on the Marketplaces tab of /plugin. claude plugin uninstall formfeed@formfeed-dev removes the plugin.

Cursor​

Install the server with one click from Formfeed's listing on cursor.directory, or add it to ~/.cursor/mcp.json as the MCP page shows. The skills come with the skills command line:

npx skills add formfeed-dev/skills

It asks which of your agents to install them for, and puts them in the project (.agents/skills) or, with -g, in ~/.cursor/skills for every project.

Any other agent​

npx skills add formfeed-dev/skills installs the two skills for the agents the skills command line knows, among them Codex, GitHub Copilot, Gemini CLI and Windsurf. --skill formfeed-templates installs one of them. The server is added in each client's own way; formfeed.dev/agents has a guide for each.

Signing in​

Two things sign in, each on its own.

  • The server. The first time the agent connects, Formfeed's sign-in opens in your browser (in Claude Code, run /mcp and choose the server). Sign in, choose the workspace the agent works in, and allow it. What a signed-in agent may do, and how to change its workspace or revoke it, is in Signing in with your account.
  • The command line the skills run. Run npx formfeed login yourself, which stores a live key with the scopes of your role, or store a test key with npx formfeed login ff_test_…, or put one into FORMFEED_API_KEY. See Templates as code.

The skills never ask for a key in the chat and never write one into a file.

What the agent does on its own, and what it asks first​

The skills hold the agent to these rules:

  • init, validate, test, dev and einvoice run on your machine and need no account. The agent works there until the template is right.
  • Before the first command that calls the API, it runs formfeed whoami --json to see which key is in use. A test key renders free, with a test mark on the Free plan. A live key counts every render against your plan's units: the agent tells you, renders once when validate and test pass, and never in a loop.
  • It runs a command that changes the workspace your team shares only when the conversation asked for it: templates push, channels set, channels promote, channels rollback, channels delete, partials push, files push, files delete, renders delete-outputs, webhooks resend and workspaces delete.
  • In application code it reads the key from FORMFEED_API_KEY, never writes a key into code, a file or a commit, and keeps it on the server.

A skill is an instruction the agent follows, not a lock. What can happen is decided by the key: give the agent a test key while it works, and keep the live key for CI and production. Through the server, a signed-in agent always renders live; connect the server with a test key instead to render for free while you build.

What it runs, sends and fetches​

The plugin collects nothing. The skills run the formfeed CLI through npx, which fetches it from npm, and the CLI sends to the Formfeed API what it sends when you run it yourself. The server's address is https://mcp.formfeed.dev/mcp. The skills' sources are public in formfeed-dev/skills, under the MIT licence.

Without the plugin​

For an agent that reads neither plugins nor skills, paste the same loop into AGENTS.md or CLAUDE.md: the snippet is on formfeed.dev/agents.