ktg-plugin-marketplace/plugins/linkedin-studio/commands
Kjell Tore Guttormsen 3ae8adb6ff feat(linkedin-studio): first-hour/reply-loop command with tracked state
Wire orphan agent #11 (engagement-coach) by giving it a command surface, and
add the tracked first-hour state the plan calls for (remediation Step 16).

- commands/firsthour.md (new, 27th command): post-publish first-hour /
  reply-loop sprint. Delegates plan construction to engagement-coach via
  Task (subagent_type: linkedin-studio:engagement-coach) — returns a grouped
  target list (whales/inner-circle/ICPs/new connections), 2-3 seed
  self-comments + 3-5 CEA replies in the user's voice, and a minute-by-minute
  timeline anchored to publish time. Presents timeline/targets/drafts +
  velocity checkpoints, auto-copies the drafts to clipboard, persists the
  plan, then hands off to post-feedback-monitor for the 48h window.
- hooks/scripts/state-updater.mjs: new pure mutation recordFirstHourPlan()
  mirroring updatePostTracking — additive by contract (inserts
  last_firsthour_date after last_post_date when absent, creates the
  ## First-Hour Plans section when absent, never touches existing fields).
  Section name is deliberately non-R-initial so it stays outside
  pruneContentHistory's "## Recent Posts ... (?=\n## [^R])" capture window.
  + a --record-firsthour CLI branch for parity with the other mutations.
- config/state-file.template.md: additive scalars (last_firsthour_date,
  firsthour_active) + the ## First-Hour Plans section.
- hooks/scripts/__tests__/state-updater.test.mjs: extend (existing file) with
  7 recordFirstHourPlan tests — section creation, field insertion vs in-place
  update (no duplication), round-trip non-interference, graceful empty
  defaults, changes array.
- CLAUDE.md: register the command (## Commands 26 -> 27, table row).
- scripts/test-runner.sh: EXPECT_COMMANDS 26 -> 27 (registration guard).

Verify: grep 'subagent_type: linkedin-studio:engagement-coach' commands/ ->
firsthour.md; node --test state-updater -> 26/26; full hook suite -> 83/83;
bash scripts/test-runner.sh -> exit 0 (62 passed, commands 27/27).

Plan Step 16 (Wave 4 S3).
[skip-docs]: tre-doc + version bump deferred to Step 21 per remediation plan.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 05:35:44 +02:00
..
ab-test.md refactor(linkedin-studio): wire or delete 11 orphan agents (case-by-case) — 9 here, 2 in Steps 14/16 2026-05-30 01:26:36 +02:00
analyze.md refactor(linkedin-studio): wire or delete 11 orphan agents (case-by-case) — 9 here, 2 in Steps 14/16 2026-05-30 01:26:36 +02:00
audit.md fix(linkedin-studio): propagate reconciled algorithm numbers, cite-not-restate 2026-05-29 20:32:17 +02:00
batch.md refactor(linkedin-studio): wire or delete 11 orphan agents (case-by-case) — 9 here, 2 in Steps 14/16 2026-05-30 01:26:36 +02:00
calendar.md refactor(linkedin-studio): wire or delete 11 orphan agents (case-by-case) — 9 here, 2 in Steps 14/16 2026-05-30 01:26:36 +02:00
carousel.md feat(linkedin-studio): short-form de-AI gate via differentiation-checker + voice-guardian 2026-05-30 02:31:41 +02:00
competitive.md refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0) 2026-05-29 11:32:02 +02:00
first-post.md refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0) 2026-05-29 11:32:02 +02:00
firsthour.md feat(linkedin-studio): first-hour/reply-loop command with tracked state 2026-05-30 05:35:44 +02:00
headless-review.md feat(linkedin-studio): v3.1.0 — Endring 9 adversarial review-pakke + per-artefakt personas 2026-05-29 13:01:24 +02:00
import.md docs(linkedin-studio): honest dated API/auto-publish/analytics boundaries 2026-05-30 00:58:05 +02:00
linkedin.md docs(linkedin-studio): reconcile discoverability surfaces + skill naming 2026-05-30 01:05:19 +02:00
monetize.md fix(linkedin-studio): propagate reconciled algorithm numbers, cite-not-restate 2026-05-29 20:32:17 +02:00
multiplatform.md refactor(linkedin)!: rename plugin linkedin-thought-leadership → linkedin-studio (v3.0.0) 2026-05-29 11:32:02 +02:00
newsletter.md feat(linkedin-studio): make long-form review language configurable [skip-docs] 2026-05-30 00:55:04 +02:00
onboarding.md docs(linkedin-studio): reconcile discoverability surfaces + skill naming 2026-05-30 01:05:19 +02:00
outreach.md refactor(linkedin-studio): wire or delete 11 orphan agents (case-by-case) — 9 here, 2 in Steps 14/16 2026-05-30 01:26:36 +02:00
pipeline.md refactor(linkedin-studio): wire or delete 11 orphan agents (case-by-case) — 9 here, 2 in Steps 14/16 2026-05-30 01:26:36 +02:00
pivot.md feat(linkedin-studio): v3.1.0 — Endring 9 adversarial review-pakke + per-artefakt personas 2026-05-29 13:01:24 +02:00
post.md feat(linkedin-studio): short-form de-AI gate via differentiation-checker + voice-guardian 2026-05-30 02:31:41 +02:00
profile.md fix(linkedin-studio): propagate reconciled algorithm numbers, cite-not-restate 2026-05-29 20:32:17 +02:00
quick.md feat(linkedin-studio): short-form de-AI gate via differentiation-checker + voice-guardian 2026-05-30 02:31:41 +02:00
react.md feat(linkedin-studio): short-form de-AI gate via differentiation-checker + voice-guardian 2026-05-30 02:31:41 +02:00
report.md refactor(linkedin-studio): wire or delete 11 orphan agents (case-by-case) — 9 here, 2 in Steps 14/16 2026-05-30 01:26:36 +02:00
setup.md refactor(linkedin-studio): wire or delete 11 orphan agents (case-by-case) — 9 here, 2 in Steps 14/16 2026-05-30 01:26:36 +02:00
strategy.md refactor(linkedin-studio): wire or delete 11 orphan agents (case-by-case) — 9 here, 2 in Steps 14/16 2026-05-30 01:26:36 +02:00
video.md feat(linkedin-studio): video quality gate (captions + aspect guidance, drop 9:16 mandate) 2026-05-30 02:37:51 +02:00