Make every social-media-tools skill runnable in the background so the main session's context stays free. The router and two background agents already cover seven of nine skills; this closes the remaining gaps โ give media-library a non-interactive mode, make the router reach it, and reconcile the completion-line contract โ then version and document the full capability.
add-background-mode-social-skills.html
docs/plans/add-background-mode-social-skills.html
The user wants the plugin's skills to run in the background, in a separate agent context, so developers can keep working without the share workflow consuming their main session window.
Exploration showed this is mostly already built. Two background chains exist: the social-share router skill classifies a request and dispatches the agent-social-share subagent (background: true), covering share-code, share-blog, share-github, share-video, share-selection, and share-project; and /digest-bg dispatches agent-digest for share-scan. All seven honor the --background non-interactive contract in references/non-interactive-mode.md (v0.9.0).
Three real gaps remain: (1) media-library is purely interactive โ it has no --background mode and the router has no rule to reach it; (2) the digest chain emits its own Digest complete: โฆ line rather than the contract's SOCIAL-SHARE: DONE line, and the contract documents only card-rendering output (png=/html=), not file-producing skills; (3) security-scrub is already non-interactive and stays a sub-step utility โ out of scope by decision.
references/non-interactive-mode.md.png=/html=). A catalog dump and the digest produce a single file, so the contract needs a generic form before media-library can conform. Reconciling this first lets Step 2 reference it.SOCIAL-SHARE: DONE skill=<name> output=<path> for file-producing skills alongside the existing card form, and a short note that share-scan/digest uses its own --days/--base/--max/--codebase flags and Digest complete: line.--background non-interactive mode to skills/media-library/SKILL.md.AskUserQuestion; instead it writes the saved-posts table to .claude/digests/media-library-YYYY-MM-DD.md and emits the generic completion line from Step 1.## Non-interactive mode pointer block; Step 3's AskUserQuestion is marked (Interactive mode only); a background branch writes the catalog file and emits SOCIAL-SHARE: DONE skill=media-library output=<path>; allowed-tools gains Write. Interactive mode (no --background) still asks via AskUserQuestion.skills/social-share/SKILL.md Phase 1 routing browse/library intent to media-library.media-library so a developer can snapshot the catalog in the background. The rule must sit above the git fallbacks (rules 7โ8) so "browse my saved posts" never falls through to share-code.browse, library, saved posts, prior post โ target media-library, placed before rule 7. Dispatching /social-share-bg browse my saved posts classifies to media-library and builds DISPATCH_FLAGS containing --background.agents/agent-social-share.md to list media-library as a valid target and relay the output= form.Skill call and relays the status line verbatim, so it already works mechanically โ but its Step 1 example list and Step 3 should explicitly acknowledge the generic output= completion line so the doc stays accurate. Doc-level change, no behavioral rewrite.TARGET_SKILL examples include media-library; Step 3 notes that a SOCIAL-SHARE: DONE โฆ output=<path> line is relayed as-is just like the card form..claude-plugin/marketplace.json from 1.0.1 to 1.1.0 and add a CHANGELOG.md entry.media-library plus a new router rule is additive new capability โ a MINOR bump per the repo's versioning table. Version lives only in marketplace.json for relative-path plugins.social-media-tools entry in marketplace.json reads "version": "1.1.0" and the auto-validate hook reports no JSON errors; CHANGELOG.md has a ## v1.1.0 โ 2026-05-28 entry describing the media-library background mode, router rule, and contract reconciliation.README.md to document full background coverage./social-share-bg and /digest-bg, and document the new media-library --background catalog-snapshot behavior.media-library, and shows the .claude/digests/media-library-YYYY-MM-DD.md output path.End-to-end background dispatch: from a session in this repo, run /social-media-tools:social-share-bg browse my saved posts. Confirm the router acks with a single line, the agent-social-share subagent runs in the background, and it reports back a SOCIAL-SHARE: DONE skill=media-library output=โฆ line. Confirm .claude/digests/media-library-YYYY-MM-DD.md exists and contains the saved-posts table (or the "no saved posts" notice if the media dir is empty).
Interactive regression: invoke media-library without --background and confirm it still lists posts and asks via AskUserQuestion.
Plugin integrity: run /validate-plugin social-media-tools (or the validate-plugin skill) โ structure, version, and homepage checks pass; the marketplace.json auto-validate hook reports no JSON errors after the version bump.
Existing chains unaffected: spot-check that /social-share-bg share my latest commit still routes to share-code and /digest-bg still routes to share-scan โ the new router rule sits above the git fallbacks and must not shadow them.