← AppFollowCONTENT HISTORY
WHAT CHANGED
Update to AppFollow
Snapshot Oct 31, 2026 · 01:17 UTC · version 1.2.2
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save AppFollow and check future changes in Following.
Up to 3 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Always-loaded discipline for every AppFollow toolkit skill. Read this before calling any AppFollow MCP tool. Enforces the preview→approval→confirm write ritual, the shared MCP error-code vocabulary, and the public-tools-only posture. Other skills reference this file rather than restating the rules.\n",
"included_files": [
{
"relative_path": "references/costs.md",
"size_in_bytes": 2186
},
{
"relative_path": "references/read-only-tools.md",
"size_in_bytes": 1914
},
{
"relative_path": "references/tool-map.md",
"size_in_bytes": 2870
}
],
"name": "using-appfollow",
"skill_md_contents": "---\nname: using-appfollow\ndescription: >\n Always-loaded discipline for every AppFollow toolkit skill. Read this before calling any AppFollow\n MCP tool. Enforces the preview→approval→confirm write ritual, the shared MCP error-code vocabulary,\n and the public-tools-only posture. Other skills reference this file rather than restating the rules.\n---\n\n# using-appfollow\n\nYou are driving the **AppFollow MCP server** (`mcp__appfollow__*` tools) on the user's own\nOAuth-authenticated session. Every tool call bills the **user's own** workspace credits. There is no\nAPI client and no secret in this toolkit — all data flows through the user's MCP session.\n\n## Session opening (always, every run)\n\n1. **Mint a `session_id` once.** Generate a high-entropy opaque id (e.g. a UUID) at the start of the\n conversation and pass it as an argument on **every** AppFollow tool call from here on — `whoami`,\n `get_credits`, and all the rest — not only `submit_feedback`. One exception: `get_server_info`\n takes no arguments at all — never pass `session_id` to it. The server stamps it on each\n tool-usage record, so an attached tool-usage log auto-links precisely to this conversation by\n reference. `session_id` is not identity — never ask the user for it.\n2. Call `mcp__appfollow__whoami`. On an `AUTH_REQUIRED` error, stop and tell the user to complete the\n AppFollow sign-in in their MCP host, then retry.\n\n## Elicitation\n\nWhen the request is ambiguous — which app/collection, date range, store, country, competitor set, or\nmetric — ask **one** crisp scope-narrowing question and offer a sensible default the user can accept in\none word. Never silently guess, never stall. Volunteer the useful next step the user probably wants (an adjacent\nmetric, a competitor cut, a trend window). This keeps friction low and is separate from the write\nritual below — those stay mandatory regardless.\n\n## Writes: preview → approval → confirm (never skip)\n\nEvery write tool is a pair — `<name>_preview` then `<name>`:\n\n1. Call `<name>_preview(args)` → it returns a single-use, 60-second, args-bound `confirmation_token`\n (it validates nothing upstream — a wrong id fails at confirm).\n2. Show the user exactly what will be written; get **explicit approval**.\n3. Call `<name>(args + confirmation_token)` with **identical** args. On `CONFIRMATION_REQUIRED`\n (expired/mismatched token) re-preview.\n\nNever auto-confirm. The user must approve each write.\n\n## Group runs\n\nFor a collection or a multi-app list, resolve the full app set before running. No silent fan-out, and\nno hard app cap. If `INSUFFICIENT_CREDITS` surfaces mid-run, stop and emit a **partial** report rather\nthan failing.\n\n## MCP error-code vocabulary (surface verbatim; branch per skill)\n\n`AUTH_REQUIRED`, `FEATURE_DISABLED`, `INSUFFICIENT_CREDITS`, `RATE_LIMITED`, `NOT_FOUND`,\n`VALIDATION_ERROR`, `UPSTREAM_ERROR`, `NETWORK_ERROR`, `UNKNOWN_TOOL`, `CONFIRMATION_REQUIRED`.\n\nTwo traps to respect:\n\n- **`FEATURE_DISABLED` is an unreliable plan-gate signal.** Some plan gates surface as `AUTH_REQUIRED`\n (403) instead. Never branch a degrade path solely on `FEATURE_DISABLED`.\n- **`INSUFFICIENT_CREDITS` can be a false positive** (any upstream body mentioning \"credits\" trips it).\n Treat it like any other tool error — the universal rail below applies.\n\nUniversal rail: **a skill never fails the whole report on a single tool error** — skip the affected\nsection, note it, keep going.\n\n## Public tools only\n\nOnly the tools in `references/tool-map.md` exist for you. Never invent or reference an internal tool\nname, internal host, or internal API path.\n\n## Findings hand-off\n\nThe report skills emit a `findings.json` under `appfollow.toolkit.findings/v1`. The toolkit does not\ntalk to any tracker — their own connected tracker agent can file the findings.\n\n## Feedback discipline (optional, free)\n\nAfter you finish a **meaningful unit of work** for the user (a completed report, a finished multi-step\ntask, a resolved request), you may offer a quick satisfaction check. Only do this if `submit_feedback`\nis in your available tools this session — otherwise skip the whole feedback step silently.\n\n- Ask the user to rate the session from **1 (poor) to 4 (great)**. Offer this **at most once or twice\n per conversation and never nag** — if the user declines or ignores it, drop it.\n- On a score, ask the matching question but **accept a bare score** — the comment is always optional,\n never insist on text:\n - Score **1–3** → ask what fell short.\n - Score **4** → ask what they liked and what to add.\n- Call `submit_feedback` with the score and any comment, passing the **same `session_id`** you minted at\n session opening and have been sending on every tool call. Identity and timing attach automatically from\n your session — never ask for or pass personal details.\n- Three attachments are **off unless the user explicitly agrees to each**, asked separately and plainly:\n (a) this session's tool-usage log — on approval set `consent_attach_tool_log: true` (else omit/false);\n (b) a short session summary you compose and **show first** — pass it as `llm_session_summary`;\n (c) the **full transcript of this agent session** — the complete conversation as plain text,\n session-agnostic (works from any agent — Claude, ChatGPT, or Codex), stored verbatim as-is; on\n approval paste it into `session_transcript`. Attach only what the user approves.\n- **Do not paste secrets, tokens, or credentials** into feedback comments **or the transcript**, and\n remind the user of the same — free-text and the transcript are stored as-is.\n- If `submit_feedback` returns `ALREADY_COLLECTED`, feedback for this session is already recorded —\n thank the user and do not offer again. If it returns `UNKNOWN_TOOL`, treat the tool as unavailable and\n drop the feedback step. `submit_feedback` is free and never costs credits.\n"
}SHA-256 of public snapshot: 069c47267affc96cefef69f52eda06f73ee464be91546538f7551983faf99d12