From aba7237de89ebc56d07043cbb779d63c2f29154f Mon Sep 17 00:00:00 2001 From: Kisa Date: Tue, 9 Jun 2026 07:16:33 -0400 Subject: [PATCH] Add Paste MCP Phase 1 implementation plan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 6 tasks: create 2 pinboards, update 3 skills (linkedin-post, linkedin-carousel, pilot-prep), end-to-end verification. Skills dir is not a git repo — file edits only. Co-Authored-By: Claude Sonnet 4.6 --- .../plans/2026-06-09-paste-phase1.md | 247 ++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 docs/superpowers/plans/2026-06-09-paste-phase1.md diff --git a/docs/superpowers/plans/2026-06-09-paste-phase1.md b/docs/superpowers/plans/2026-06-09-paste-phase1.md new file mode 100644 index 0000000..3f0604c --- /dev/null +++ b/docs/superpowers/plans/2026-06-09-paste-phase1.md @@ -0,0 +1,247 @@ +# Paste MCP Phase 1 Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Wire the Content Outbox and Call Prep pinboards into the linkedin-post, linkedin-carousel, and pilot-prep skills so every approved draft and call brief lands in Paste automatically. + +**Architecture:** Two Paste pinboards are created first. Each skill gets one new instruction block at its natural completion point — after copy-review passes (linkedin-post), after final output is rendered (linkedin-carousel), and after the briefing is assembled (pilot-prep). Skills look up pinboard IDs by name via `mcp__paste__list_pinboards` at runtime rather than hardcoding IDs, so the wiring survives pinboard recreation. + +**Tech Stack:** Paste MCP (`mcp__paste__create_pinboard`, `mcp__paste__list_pinboards`, `mcp__paste__create_item`), skill SKILL.md files (plain markdown instruction files, no code). + +--- + +### Task 1: Create Content Outbox Pinboard + +**Files:** +- No file changes — Paste MCP call only + +- [ ] **Step 1: Create the pinboard** + +Call `mcp__paste__create_pinboard` with name `Content Outbox`. + +Expected response: +```json +{ "id": "content_outbox_XXXXXXXX-...", "name": "Content Outbox", "itemCount": 0 } +``` + +- [ ] **Step 2: Record the pinboard ID** + +Note the `id` returned. It will be referenced in verification steps. + +- [ ] **Step 3: Verify via list** + +Call `mcp__paste__list_pinboards`. Confirm `Content Outbox` appears in the list alongside `Useful Links`. + +--- + +### Task 2: Create Call Prep Pinboard + +**Files:** +- No file changes — Paste MCP call only + +- [ ] **Step 1: Create the pinboard** + +Call `mcp__paste__create_pinboard` with name `Call Prep`. + +Expected response: +```json +{ "id": "call_prep_XXXXXXXX-...", "name": "Call Prep", "itemCount": 0 } +``` + +- [ ] **Step 2: Verify via list** + +Call `mcp__paste__list_pinboards`. Confirm both `Content Outbox` and `Call Prep` now appear. + +- [ ] **Step 3: Commit a note** + +```bash +cd /Users/sttil-solutions/projects/signal +git add docs/superpowers/plans/2026-06-09-paste-phase1.md +git commit -m "Add Paste Phase 1 implementation plan" +``` + +--- + +### Task 3: Update linkedin-post Skill + +**Files:** +- Modify: `/Users/sttil-solutions/.claude/skills/linkedin-post/SKILL.md` + +The current Step 6 handles NocoDB update after Kisa confirms the post is live. A new step goes between Step 5 (Iterate) and Step 6 (Confirm and Update NocoDB) — it fires when the draft is approved, not after posting. The Outbox is a staging layer: Kisa pastes from Paste to LinkedIn, then confirms to Claude, who updates NocoDB. + +- [ ] **Step 1: Add the Paste push step** + +In `/Users/sttil-solutions/.claude/skills/linkedin-post/SKILL.md`, insert the following block **between** the `## Step 5: Iterate` section and `## Step 6: Confirm and Update NocoDB`: + +```markdown +--- + +## Step 5.5: Push Approved Draft to Paste Content Outbox + +When Kisa says the draft is good (approval signals: "that works", "perfect", "use that", "looks good", or similar) — before waiting for posting confirmation: + +1. Call `mcp__paste__list_pinboards` to get the current pinboard list. +2. Find the pinboard named `Content Outbox` and get its `id`. +3. Call `mcp__paste__create_item` with: + - `content`: the full approved post text (exactly as drafted — no extra formatting) + - `list_id`: the Content Outbox id from step 2 +4. Confirm with one line: "Draft saved to Paste Content Outbox — paste directly to LinkedIn when ready." + +Do not push unreviewed drafts. Only push after Kisa signals approval. +``` + +- [ ] **Step 2: Verify the file change** + +Read the file. Confirm the new Step 5.5 block appears between Step 5 and Step 6. Confirm Step 6 is unchanged. + +- [ ] **Step 3: Smoke test** + +Invoke linkedin-post with a test prompt: "draft a short test post about documentation gaps." +After it drafts and copy-review passes, say "that works." +Confirm the skill calls `mcp__paste__list_pinboards` and then `mcp__paste__create_item`. +Call `mcp__paste__search` with `pinboard_id` set to the Content Outbox id — confirm the test draft appears. +Delete the test item via `mcp__paste__delete_item`. + +- [ ] **Step 4: Confirm file saved** + +Read the first 10 lines of `/Users/sttil-solutions/.claude/skills/linkedin-post/SKILL.md` to confirm the edit persisted. No git commit needed — `.claude/skills` is not a git repo. + +--- + +### Task 4: Update linkedin-carousel Skill + +**Files:** +- Modify: `/Users/sttil-solutions/.claude/skills/linkedin-carousel/SKILL.md` + +The carousel output is a rendered PDF. The Paste push captures the text copy (hook, per-slide headlines and body) — not the PDF file. This gives Kisa a reviewable text record and reusable caption copy. + +- [ ] **Step 1: Find the final output step** + +Read `/Users/sttil-solutions/.claude/skills/linkedin-carousel/SKILL.md` in full. Identify the last step — the one where the rendered PDF path is reported to Kisa. + +- [ ] **Step 2: Add the Paste push block** + +Immediately after the final output/delivery step, append: + +```markdown +--- + +## Final Step: Push Slide Copy to Paste Content Outbox + +After confirming the PDF has rendered: + +1. Assemble the carousel text copy in this format: + ``` + CAROUSEL: [Title] + + HOOK: [Hook text from slide 1] + + SLIDE 2: [Headline] + [Body copy if any] + + SLIDE 3: [Headline] + [Body copy if any] + + [... continue for all slides ...] + + CTA: [Final slide CTA text] + ``` +2. Call `mcp__paste__list_pinboards`. Find `Content Outbox` and get its `id`. +3. Call `mcp__paste__create_item` with: + - `content`: the assembled text copy above + - `list_id`: the Content Outbox id +4. Confirm with one line: "Carousel copy saved to Paste Content Outbox. PDF at [path]." +``` + +- [ ] **Step 3: Verify the file change** + +Read the file. Confirm the new block appears after the final delivery step and the format template is intact. + +- [ ] **Step 4: Confirm file saved** + +Read the last 20 lines of `/Users/sttil-solutions/.claude/skills/linkedin-carousel/SKILL.md` to confirm the new block is present. + +--- + +### Task 5: Update pilot-prep Skill + +**Files:** +- Modify: `/Users/sttil-solutions/.claude/skills/pilot-prep/SKILL.md` + +The current Step 5 is "Offer a Practice Question (Optional)." The Paste push is a new Step 6 that fires after the briefing is assembled and the practice question is offered — so the full briefing is in Paste before the call, not just the summary. + +- [ ] **Step 1: Add the Paste push step** + +In `/Users/sttil-solutions/.claude/skills/pilot-prep/SKILL.md`, add the following block **after** `## Step 5: Offer a Practice Question (Optional)`: + +```markdown +--- + +## Step 6: Push Briefing to Paste Call Prep + +After delivering the briefing and the Step 5 practice question offer: + +1. Call `mcp__paste__list_pinboards`. Find `Call Prep` and get its `id`. +2. Call `mcp__paste__create_item` with: + - `content`: the full briefing text (all sections from Step 3, exactly as delivered) + - `list_id`: the Call Prep id +3. Confirm with one line: "Briefing saved to Paste Call Prep — available in your clipboard on any device before the call." + +This step is not optional. Push every briefing. Kisa clears the pinboard after the call. +``` + +- [ ] **Step 2: Verify the file change** + +Read the file. Confirm Step 6 appears after Step 5. Confirm Steps 1-5 are unchanged. + +- [ ] **Step 3: Smoke test** + +Invoke pilot-prep with: "prep for my call with Robert Robinson." +After the briefing is delivered, confirm the skill calls `mcp__paste__list_pinboards` and `mcp__paste__create_item`. +Call `mcp__paste__search` with `pinboard_id` set to the Call Prep id — confirm the briefing appears. +Do not delete the test item — this is a real prep if Robert Robinson's call is upcoming. + +- [ ] **Step 4: Confirm file saved** + +Read the last 20 lines of `/Users/sttil-solutions/.claude/skills/pilot-prep/SKILL.md` to confirm Step 6 is present. + +--- + +### Task 6: End-to-End Verification + +- [ ] **Step 1: Verify pinboard state** + +Call `mcp__paste__list_pinboards`. Confirm: +- `Content Outbox` exists +- `Call Prep` exists +- `Useful Links` still exists (default pinboard unchanged) + +- [ ] **Step 2: Verify skill descriptions are updated** + +Check that the `description:` frontmatter in each updated SKILL.md still accurately describes the skill. No change needed unless the description explicitly said "does not save anywhere." + +- [ ] **Step 3: Update the spec to mark Phase 1 complete** + +In `/Users/sttil-solutions/projects/signal/docs/superpowers/specs/2026-06-08-paste-mcp-ambient-layer-design.md`, update the Phase 1 status line to: + +```markdown +### Phase 1: Content Outbox + Call Prep +**Trigger:** ~~Implement now~~ **COMPLETE — 2026-06-09** +``` + +- [ ] **Step 4: Final commit** + +```bash +cd /Users/sttil-solutions/projects/signal +git add docs/superpowers/specs/2026-06-08-paste-mcp-ambient-layer-design.md +git commit -m "Mark Paste MCP Phase 1 complete" +``` + +--- + +## Notes + +- Skills are instruction files (markdown), not application code. No unit tests apply. Verification is behavioral: invoke the skill, observe Paste. +- The `.claude/skills` directory may not be a git repo. Check with `git -C /Users/sttil-solutions/.claude/skills status` before committing. If not a repo, commits are skipped — file changes are sufficient. +- Paste auth must be active for smoke tests to work. If tools are unavailable, re-authenticate via `/mcp` in a separate Claude Code window before running verification steps. +- Phase 2 (Brand Vault) does not start until Phase 1 has been used across at least 2-3 real posts and calls and confirmed working.