[Docs](/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

| Situation | Action |
| --- | --- |
| feega MCP is connected | Call MCP tools (query, canvas\_tool, run\_node\_generation, …) |
| MCP not available | Shell: 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](/docs/mcp) — connect stdio or remote HTTP and authenticate
-   [CLI](/docs/cli) — full terminal reference
-   [feega](https://github.com/andreabuttarelli/feega) — canonical tool reference and CLI ↔ MCP mapping

[

← Previous

MCP

](/docs/mcp)

---
Source: https://oh.feega.app/docs/agents
