Docs/Agent skill

Agent skill

Drive feega from your coding agent: an infinite canvas of typed nodes (media, social feeds, products, ads, generations), driven by a person, the in-app chat, or an agent here. Prefer MCP tools when connected; otherwise use the feega CLI. Same OAuth identity — no static API tokens.

Prefer MCP. When feega MCP is connected, call tools like query and canvas_tool directly. Fall back to the CLI only when MCP is unavailable.

Choose interface

SituationAction
feega MCP is connectedCall MCP tools (query, canvas_tool, run_node_generation, …)
MCP not availableShell: feega … after feega login

Never guess an org, a brand or a project — read it back with `query` first. Never invent REST endpoints or API keys.

Install the skill

Publishable Agent Skill (agentskills.io / skills.sh):

npx skills add andreabuttarelli/feega --skill feega

Or install the marketplace plugin (skill + remote MCP), or copy the folder into your agent's skills directory:

# Claude Code
/plugin marketplace add andreabuttarelli/feega
/plugin install feega@feega

# Codex
codex plugin marketplace add andreabuttarelli/feega

You can also copy skills/feega/ into .cursor/skills/feega/ or ~/.claude/skills/feega/.

Auth (always OAuth)

  • Local MCP / CLI: run feega login once in a terminal. The session lands in ~/.config/feega/session.json and the CLI and the MCP server share it.
  • Remote MCP (https://mcp.feega.app/mcp): your host does the OAuth round itself. Missing Bearer → 401, which is the challenge, not a failure.
  • There is no sign-in tool. Confirm with a `query` on `brands` (MCP) or `feega brands` (CLI): rows come back, or nobody is signed in.

Operating rules

  1. Never guess an org, a brand or a project. Read it back with `query` first — guessing spends a real organisation's credits.
  2. Post and ad campaign ids accept short unambiguous prefixes from list output — never guess if ambiguous.
  3. run_node_generation needs the node's current version (optimistic concurrency): read it first, and retry on `conflict` — never assume your write landed.
  4. A canvas node is raw material; a post is the promoted artifact ready to schedule. Writing a node is not an action on the world.
  5. Confirm before deleting unless the user clearly asked: delete_row does not come back.
  6. An ad campaign always drafts unapproved — approve_ad_campaign only works from a signed-in person's own session, never an API key.

Examples

"Show me every draft post for flashcamp"
"Draft a post for flashcamp from this photo"
"Approve the post about the new drop"
"What's on flashcamp's calendar this week?"
"Draft a Meta ad campaign for our new arrivals"

Supported agents

  • Claude Code — skill auto-installs, MCP connects out of the box
  • Cursor — MCP + terminal skill
  • GitHub Copilot — via CLI commands
  • Windsurf — via CLI commands

CLI fallback

If MCP is not connected, install the CLI and work from the shell:

curl -sSL https://raw.githubusercontent.com/andreabuttarelli/feega/main/cli/scripts/install.sh | bash
feega login
feega brands
feega content <slug> --status pending_user
feega approve <slug> --all

Next

  • MCP — connect stdio or remote HTTP and authenticate
  • CLI — full terminal reference
  • feega — canonical tool reference and CLI ↔ MCP mapping