ワンクリックで
ars-apply-review
Apply Studio intents back into the episode source and validate the result.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Apply Studio intents back into the episode source and validate the result.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Run a single-episode coherence checklist after Studio review edits and before prepare/publish; diagnose or patch thesis drift, step seams, stale arguments, visual rhythm, and publish readiness.
Generate 3 YouTube metadata candidates (title/description/tags) grounded in episode context, let the user pick one, then mark the artifact ready.
Usage guide for generating MiniMax TTS audio and subtitles for an episode.
Validate repo bootstrap readiness, ARS config, providers, and environment readiness with npx ars doctor.
Create a new episode scaffold for a series with npx ars episode create.
Generate a new custom card for the active series using ARS primitives. Creates a self-contained CardSpec at src/episodes/<active-series>/cards/.
| name | ars:apply-review |
| description | Apply Studio intents back into the episode source and validate the result. |
| argument-hint | [<intent-id>|latest|all] |
| model | claude-sonnet-4-6 |
| effort | medium |
Use Studio intent files in .ars/studio-intents/ as the input contract. Legacy
review intents in .ars/review-intents/ are migrated automatically on the next
Studio launch — do not read the legacy directory.
Behavior:
SERIES_GUIDE.md at the repo root before applying any content / narration change. If the intent rewrites narration or card text, the rewrite must obey the series guide's banned phrases, contrast examples, and tone rules. If a legacy STYLING.md (or VOICE.md, persona.md) exists at repo root, also read it. Pure pronunciation fixes and build-trigger intents do not need the guide.latest or omitted.all, confirm .ars/studio-intents/_session-end.flag exists before proceeding. Treat it as the signal that the review pass is closed and the remaining intents should be batch-applied..ars/studio-intents/ and inspect its target, source, feedback, and optional attachments..ars/state/workstate.json when it exists. If it is active and contains episodeId, that episodeId must match the intent's target.epId. For cross-episode work, stop and ask for an explicit episode-context switch (usually npx ars workstate switch <epId> --stage review) before applying the intent. Do not let an IDE-opened file, unrelated pending intent, or stale statusline silently change the target episode.attachments.screenshotPath is present, read it before making changes.Classify prepare intents first by reading target.anchorMeta.hash, then use feedback.kind, then feedback.message. Do not infer prepare action from the label alone.
target.anchorMeta.hash starts with prepare: OR feedback.kind is prepare-generate, prepare-select, prepare-edit, or legacy prepare-trigger. This comes from the Studio Prepare UI. Do NOT treat it as an episode narration/content fix.
feedback.kind === 'prepare-generate' should normally pair with hash prepare:youtube:generate.feedback.kind === 'prepare-select' should normally pair with hash prepare:<candidateId>:select.feedback.kind === 'prepare-edit' should normally pair with hash prepare:<candidateId>:title, prepare:<candidateId>:description, prepare:<candidateId>:tags, or prepare:<candidateId>:card.feedback.kind === 'prepare-trigger' is ambiguous. Always route it by target.anchorMeta.hash; never assume it means generate or a duplicate button press.prepare:youtube:generate, run /ars:prepare-youtube <target.epId> so Claude Code generates the candidates and writes output/publish/<series>/<epId>/prepare-youtube.json plus .md.prepare:<candidateId>:select, read output/publish/<series>/<epId>/prepare-youtube.json, find the candidate, and apply it to the exported Episode object's nested metadata.youtube in src/episodes/<series>/<epId>.ts. The youtube object must live inside metadata next to title / subtitle; do not add a top-level youtube field and do not only update the prepare artifact. Then update the prepare artifact so status: "ready", youtube.selected, and flattened youtube.title / youtube.description / youtube.tags exactly mirror the applied episode metadata. Studio should display the applied ep metadata after HMR, not just the selected candidate.prepare:<candidateId>:title, prepare:<candidateId>:description, prepare:<candidateId>:tags, or prepare:<candidateId>:card, edit the matching candidate in the prepare artifact. If that candidate is already selected/applied, also update the nested metadata.youtube object in the episode source to keep the episode source as the source of truth.npx ars episode validate <target.epId>.feedback.kind, then feedback.message:feedback.kind === 'build-trigger'. This comes from the Studio Build phase "觸發 Build" button, not from a review feedback form. Do NOT try to patch the episode source. Instead:
.ars/episodes/<target.epId>/plan.md exists. If not, tell the user to run /ars:plan <epId> first and resolve the intent as a no-op without building./ars:build <target.epId>. The build skill handles its own workstate stage transitions; the Studio Build phase reflects workstate.json, pending build-trigger intents, and episode source mtime./ars:build returns, resolve the intent with a summary and validation evidence. Skip the rest of this classification — build-trigger intents do not route to episode / plan edits.feedback.kind === 'other' (or unspecified) AND message describes a TTS reading error ("XX 念錯"、"讀成了 YY"、"發音不對"、"斷句怪"、specific wrong pinyin). Do NOT edit the episode source. Instead:
cli/pronunciation_dict.yaml.重, 長, 調, 行, 著, 量, 為, 得, 載, neutral-tone particles, and domain-specific Chinese compounds. Use tone numbers 1-5; 5 = neutral."GB/G B" or full word "GB/Gigabyte" based on the feedback.- "詞組/(pinyin1)(pinyin2)" in a sensible Chinese section. Check the file first — the word may already be there with a wrong pinyin; fix it in place instead of duplicating. Keep English entries in the English sections.npx ars audio generate <epId> --step <stepId>. Do not regenerate the whole episode.npx ars episode validate for pronunciation-only fixes — the Episode schema did not change. Verify instead that public/episodes/<series>/<epId>/audio/<stepId>.mp3 was rewritten (newer mtime).feedback.message together with the screenshot:
image card): feedback says "插這張"、"放這個畫面"、"加一頁"、"insert"、"add a slide" — the screenshot IS the content. Copy it to public/episodes/<series>/<epId>/ and use an image card with src pointing to it.target.series, target.epId, and target.stepId (or target.anchorId when target.anchorType is step) to locate the episode source and the single matching step. For target.anchorType === 'markdown-section', the intent describes a plan.md section — apply the change to .ars/episodes/<epId>/plan.md instead of ep.ts. For target.anchorType === 'episode' or 'plan', treat the intent as a whole-episode / whole-plan note.feedback.kind and feedback.message as the change brief.npx ars episode validate <epId>.npx ars audio generate <epId> --step <stepId> since the audio for that step is now stale.After any fix kind, resolve the intent with durable evidence. Do not delete the intent file.
Resolution requirements:
npx ars studio intent clear <id> after applying a fix. clear is reserved for explicit skips or legacy/manual maintenance.npx ars studio intent resolve <id> --summary <text> so the intent gets both processedAt and resolution.--changed-file <path> for each touched file, plus a short --before <text> and --after <text> excerpt that shows the meaningful change. Keep excerpts concise enough for JSON and CLI arguments.--validation <text> with the validation command/result, such as npx ars episode validate ep030 passed or audio regenerated for step-03.resolve with a summary that explains why and any validation or inspection performed.Batch mode:
/ars:apply-review all processes all pending intents in batch._session-end.flag is written automatically by the Vite Studio plugin when the Studio window is closed. It is not a manual file. If it is missing, the Studio session has not been formally closed yet — ask the user to close the Studio window first.