refactor(linkedin): merge publish into calendar — reconcile hook refs (S16)
Step 17 of voyage-build (S16 in plan). publish.md absorbed into calendar.md as an inline action (Mark as Published flow: queue update, state update, first-hour battle plan) reusing the same queue-manager.mjs + state-updater.mjs primitives that publish.md called. calendar.md frontmatter triggers extended with the publish trigger words; quick-routing block jumps straight to the publish action when the user prompt names it. All 21 route-refs reconciled across the 9 expected files, with the 9 hook-script refs (5 in session-start.mjs, 2 in posting-reminder.mjs, 1 in user-prompt-context.mjs, 1 in hooks/prompts/state-update-reminder.md) rewritten to call /linkedin:calendar so the runtime guidance no longer points at a dead command. compile-hooks.py --check reports clean (no type: prompt hook changes touched hooks.json). Verify (intent: zero stray refs, file gone): exit 0. Literal Verify in plan.md:727 logged exit 1 (same exit-inverted && pattern as S15 plan.md:635 — logged for plan-pass at Step 21). Manifest audit: PASS (expected_paths=calendar.md present; must_contain [Pp]ublish: 17 matches in calendar.md). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
ddd84e4501
commit
e4aa5a61c2
12 changed files with 117 additions and 156 deletions
|
|
@ -2,19 +2,26 @@
|
|||
name: linkedin:calendar
|
||||
description: |
|
||||
View and manage your post scheduling queue. Shows next 14 days of scheduled posts,
|
||||
format mix, pillar balance, and allows rescheduling or cancellation.
|
||||
format mix, pillar balance, and runs the publish action (mark a scheduled post
|
||||
as published, update queue + state, first-hour engagement plan).
|
||||
Triggers on: "calendar", "schedule", "queue", "upcoming posts", "what's scheduled",
|
||||
"show queue", "my schedule", "content calendar".
|
||||
"show queue", "my schedule", "content calendar", "publish", "mark as published",
|
||||
"posted today", "just published", "published a post", "post is live".
|
||||
allowed-tools:
|
||||
- Read
|
||||
- Bash
|
||||
- Write
|
||||
- Edit
|
||||
- AskUserQuestion
|
||||
---
|
||||
|
||||
# LinkedIn Content Calendar
|
||||
|
||||
You are a LinkedIn content calendar manager. Show the user their upcoming scheduled posts and help them manage the queue.
|
||||
You are a LinkedIn content calendar manager. Show the user their upcoming scheduled posts, help them manage the queue, and run the **publish action** when a scheduled post goes live.
|
||||
|
||||
## Quick Routing
|
||||
|
||||
If the user's prompt mentions "publish", "mark as published", "posted today", "just published", or "post is live", jump straight to **Step 3 — Action: Mark as Published** (skip the full calendar view). Otherwise start at Step 1.
|
||||
|
||||
## Step 1: Load Queue
|
||||
|
||||
|
|
@ -72,20 +79,91 @@ OVERDUE:
|
|||
|
||||
Use AskUserQuestion:
|
||||
|
||||
1. **Reschedule a post** — Move a post to a different date/time
|
||||
2. **Cancel a post** — Remove from queue (set status to "cancelled")
|
||||
3. **Mark as published** — Quick route to `/linkedin:publish`
|
||||
1. **Mark as published** — A scheduled post is live; update queue + state + show first-hour plan
|
||||
2. **Reschedule a post** — Move a post to a different date/time
|
||||
3. **Cancel a post** — Remove from queue (set status to "cancelled")
|
||||
4. **View a draft** — Read the full draft content
|
||||
5. **Looks good** — No changes needed
|
||||
|
||||
### Reschedule Flow
|
||||
### Action: Mark as Published
|
||||
|
||||
This is the publish flow (no separate command — runs inline here).
|
||||
|
||||
**3a. Show publishable posts.** Present today's scheduled posts and any overdue posts:
|
||||
|
||||
```
|
||||
Today's Scheduled Posts:
|
||||
1. "[hook preview]" — [pillar] ([format]) — Scheduled for [time]
|
||||
2. "[hook preview]" — [pillar] ([format]) — Scheduled for [time]
|
||||
|
||||
Overdue (should have been posted):
|
||||
3. "[hook preview]" — [pillar] — Was scheduled for [date]
|
||||
```
|
||||
|
||||
If no posts are scheduled and none overdue:
|
||||
```
|
||||
No posts scheduled for today.
|
||||
- Run /linkedin:batch to schedule content
|
||||
- Run /linkedin:quick for an unplanned quick post
|
||||
```
|
||||
|
||||
**3b. Pick a post.** Use AskUserQuestion to ask which post was published (show the list above).
|
||||
|
||||
**3c. Update queue status:**
|
||||
```bash
|
||||
node --input-type=module -e "import { queueUpdateStatus } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/queue-manager.mjs'; console.log(queueUpdateStatus('[post-id]', 'published'));"
|
||||
```
|
||||
|
||||
**3d. Update state file deterministically:**
|
||||
```bash
|
||||
node --input-type=module -e "
|
||||
import { writeState, updatePostTracking } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/state-updater.mjs';
|
||||
writeState(content => updatePostTracking(content, {
|
||||
postDate: 'YYYY-MM-DD',
|
||||
postTopic: 'topic_area',
|
||||
hookText: 'Hook text here...',
|
||||
charCount: NNNN,
|
||||
format: 'FORMAT'
|
||||
}));
|
||||
"
|
||||
```
|
||||
Replace placeholders with actual post data from the published post.
|
||||
|
||||
**3e. First-hour battle plan.** Show after marking:
|
||||
|
||||
```
|
||||
Post marked as published! Here's your first-hour plan:
|
||||
|
||||
Pre-Post (if not done):
|
||||
- [ ] Complete 5x5x5 engagement (15-20 min before posting)
|
||||
|
||||
First Hour:
|
||||
- [ ] Respond to comments within 5 minutes
|
||||
- [ ] Add value in every response (not just "thanks!")
|
||||
- [ ] Ask follow-up questions to deepen conversation
|
||||
- [ ] Target: 15+ engagements in first 60 minutes
|
||||
- [ ] Check back at 30-min and 60-min marks
|
||||
|
||||
48-Hour Check-In:
|
||||
- Run /linkedin:analyze after 48 hours to review performance
|
||||
- Or use post-feedback-monitor agent for real-time tracking
|
||||
```
|
||||
|
||||
**3f. Ask about more.** Use AskUserQuestion:
|
||||
1. **Mark another post** — I published more than one (loop back to 3a)
|
||||
2. **View calendar** — Show remaining schedule (loop back to Step 2)
|
||||
3. **Done** — All set for now
|
||||
|
||||
### Action: Reschedule
|
||||
|
||||
If they choose to reschedule:
|
||||
1. Ask which post (by number or hook preview)
|
||||
2. Ask for new date and time
|
||||
3. Update queue.json via queue_update_status + queue_add with new date
|
||||
4. Show updated calendar
|
||||
|
||||
### Cancel Flow
|
||||
### Action: Cancel
|
||||
|
||||
If they choose to cancel:
|
||||
1. Ask which post
|
||||
2. Confirm cancellation
|
||||
|
|
@ -94,7 +172,8 @@ If they choose to cancel:
|
|||
node --input-type=module -e "import { queueUpdateStatus } from '${CLAUDE_PLUGIN_ROOT}/hooks/scripts/queue-manager.mjs'; console.log(queueUpdateStatus('[post-id]', 'cancelled'));"
|
||||
```
|
||||
|
||||
### View Draft Flow
|
||||
### Action: View Draft
|
||||
|
||||
If they want to see a draft:
|
||||
1. Ask which post
|
||||
2. Read the draft file from the `draft_path`
|
||||
|
|
@ -102,7 +181,7 @@ If they want to see a draft:
|
|||
|
||||
## Step 4: Balance Analysis
|
||||
|
||||
After showing the calendar, provide brief analysis:
|
||||
After showing the calendar (or after a publish action loops back), provide brief analysis:
|
||||
|
||||
- **Format diversity**: Are formats varied enough? Flag if >2 consecutive same format.
|
||||
- **Pillar balance**: Are pillars well-distributed? Flag if any pillar >50%.
|
||||
|
|
@ -112,4 +191,5 @@ After showing the calendar, provide brief analysis:
|
|||
## Reference Files
|
||||
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/scheduling-strategy.md`
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/engagement-frameworks.md`
|
||||
- `${CLAUDE_PLUGIN_ROOT}/assets/drafts/queue.json`
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue