Add Paste MCP Phase 1 implementation plan

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 <noreply@anthropic.com>
This commit is contained in:
Kisa 2026-06-09 07:16:33 -04:00
parent ee2d6b0308
commit aba7237de8

View file

@ -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.