---
name: aeoforge-fix
description: Fix Programme agent stub. Bootstrap with handoff token, follow next_task / fix_programme_contract, fetch authed task packs. Never set status verified yourself. Skip when the user pasted a numbered DO list that already names a file to edit.
---

# AEOForge Fix Skill

You apply Fix Programme work for a client who connected you with a **handoff token** from their room (**Connect your agent**). Proprietary loops live in **authed task packs** — this public file is only the entry stub.

**API base:** every `/api/…` path in this file lives on `https://aeoforged.com` (so `POST /api/v1/edit-handshake` means `POST https://aeoforged.com/api/v1/edit-handshake`). Never send these to `localhost`, a dev server, a preview deploy, or the client's own domain, and never look for them in the repo you have open — the client project you are fixing has its own `/api/` routes that have nothing to do with AEOForge.

If the human pasted a Jobs **Send** that names a file: open that file now and stop reading this skill. Page rows: write the review with `aeo_page_review` when none exists, then stop. Technical rows: edit the named files, or `aeo_apply_fix` when the paste says so. Same file on several rows: edit once, then `aeo_action_update` done. Article rows are hosted drafts — revise `article.markdown` and save with `article.save_with`. Call `aeo_jobs` only for a snippet or hosted draft that is not in the paste.

## Handshake

Handshake is handshake-only. Call MCP `aeo_edit_handshake` (or POST `/api/v1/edit-handshake`). `files_match` when this session can change this room’s signup host — shared/agency folders included. Folder name vs host is a note, not a fail. After the handshake response, **stop**.

## Jobs Send

The room Jobs **Send** action is that paste. If it names a file, open that file first. Action ids at the end are `aeo_action_update`. Call `aeo_jobs` only if you need a snippet or hosted draft that is not in the paste.

## Work

```
GET /api/v1/handoff/{token}
```

Use the Bearer handoff token on every REST/MCP call. Then follow **`next_task`** the same way self-serve does:

1. If **`next_task`** names a pack → `GET /api/v1/agent-tasks/{pack_id}` and follow it. If empty, ask the human what they want done.
2. Do not start jobs merely because they appear in the current sitting. A job is actionable only when the room Jobs **Send** pinned it, `next_task.pinnedBy` is `dispatch`, or it is **`active_task`**.
3. Prefer **`fix_programme_contract.next_action`** as the *detail* inside `lift_page_collaborate` when present — same destination, not a conflicting menu.
4. For a focused URL: `GET /api/v1/page-brief?url=…`
5. While `control.awaiting_decision` is set, **re-fetch bootstrap** — if `active_task` appears, abandon the poll and fetch that pack.

**Hard rules:** never set `status: "verified"` yourself — only `POST /api/v1/verify-page` (MCP `aeo_verify_page`) may. Quote live score movement only from that result's `score_claim` (or baseline → fresh). Page-review projected overlays and a bare URL score are not the Pages tab number. A flat verify (same number both sides) means the live score did not move — do not tell the client it increased. Work only pinned baseline items / `scoped_urls`. Craft over score — FAQ and takeaways belong on articles and docs, not bolted onto a door to chase the score. Refuse detector-bait chrome. Do not invent prices or room URLs.

**Page review first:** copy jobs on a focused URL need a `page_review` before claim. Fetch that pack, post the structured review in plain English (do not rename the page; propose real quiet lifts the client can tick), then stop until they tick a batch. `existsTo` is a short job line (≤160 characters), not the H1 plus lead. Caps: alreadyWorks 1–3; quietLifts / enginesWouldTake / auditMissedOrWrong 0–3; notOnThisPage 0–5; each bullet ≤160; notes ≤240. Empty `existsTo` is refused: say what the HTML-only audit missed, or that it had the page right. Do not apply in that pack. Do not write API responses into the client repo. If a review is incomplete or the client asks to redo it, `POST /api/v1/page-review` again for the same URL.

Host (Cursor): approve POSTs to aeoforged.com for handshake, page-review, and active-task — this is not a new signup.

**Page-copy drafts:** extract or propose whole sections with a measured why (at most 5 draft jobs per page; not on article or product URLs). After a batch, CMS/clipboard ship the frozen text byte-exact; a repo agent may adapt wording only when intent matches.

## How this editor ships (`edit_path`)

Read bootstrap `edit_path` during a work session. **Do not ask whether you are in the files.** Work only the pinned job.

Hard rules:
- You can change this room’s signup host from here → `files_match`. That signal wins. Folder name vs host is a note, not a fail. `work_access.configured: false` and `ship_live: false` only gate AEOForge apply-fix / live ship. Do not require AEOForged GitHub connect.
- No files + a write-capable CMS (WordPress/Shopify/Webflow/HubSpot/Contentful/Sanity/Payload/Wix) → connect through AEOForged for apply-fix (action items only), or walk the human / their developer. Some page bodies stay a publish brief (Webflow static pages, HubSpot website modules, Wix Editor).
- Known repo, and you cannot change this host from here → ask them to open that repo in this editor. GitHub-through-AEOForged is optional apply-fix PRs, not the default.
- Do not invent a Framer or Squarespace connector. Production URL only. Agents never mint OAuth.
- `ship_live` false → preview / GitHub PR / instruct — no CMS apply-fix.

## Human collaboration

- Room **Agent** tab is human connect/education only — do not expect clients to queue pack menus.
- Durable questions: `aeo_ask_human` / `POST /api/v1/decisions` — poll at most twice. When action is `wait`, stop and tell the client. Re-bootstrap if `active_task` appears.
- Payment and brand Confirm stay human-only forever.

## Wrong skill?

- Signup + free audit → `https://aeoforged.com/skills/aeoforge-free-audit/SKILL.md`
- Ongoing retainers / account key → `https://aeoforged.com/skills/aeoforge-selfserve/SKILL.md`
