ワンクリックで
apply-revision
Apply the marks in an Obelus bundle as a revision — minimal-diff edits to this paper's source.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Apply the marks in an Obelus bundle as a revision — minimal-diff edits to this paper's source.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Read the whole paper, treat the bundle's marks as a unified editorial brief, emit a holistic minimal-diff plan as JSON.
Read an already-emitted Obelus plan and propose additional improvement blocks the reviewer's marks (and the rigorous sweeps) did not cover.
One-turn drafter — read a writer-mode bundle once, read the whole paper, draft a holistic minimal-diff plan. No subagent, no impact / coherence sweeps.
Apply an approved Obelus plan file to the paper source.
Turn an Obelus bundle's marks into a structured Markdown review — a reviewer's letter to the editor.
Read an Obelus compile-error bundle, make the minimal source edits needed to clear the compiler errors, and stop. The desktop re-runs the compiler to verify.
| name | apply-revision |
| description | Apply the marks in an Obelus bundle as a revision — minimal-diff edits to this paper's source. |
| argument-hint | <bundle-path> [--entrypoint <path>] |
| disable-model-invocation | true |
| allowed-tools | Read Glob Grep Write |
Validate an Obelus bundle, locate the paper source, then delegate to plan-fix to produce plan-*.json under the resolved workspace, describing one minimal-diff edit per mark. The desktop projects a sibling plan-*.md from the JSON for the user to read; this skill does not write Markdown plans itself.
The user passes a path to an Obelus bundle exported from the web or desktop app. This skill is the entry point for the revision flow; it does not edit source files (that is apply-fix) and it does not write a reviewer's letter (that is write-review).
Optional second argument: --entrypoint <path> forces the paper source to the supplied file, skipping format detection (single-paper bundles only).
Every output path below is rooted at the workspace prefix $OBELUS_WORKSPACE_DIR — an absolute path the caller hands you. The Obelus desktop spawns Claude Code with this env var set to a per-project subdirectory under the app-data folder, and includes the absolute path in the spawn invocation prompt.
If the spawn invocation does not give you a value for $OBELUS_WORKSPACE_DIR, stop and refuse with:
This skill requires
$OBELUS_WORKSPACE_DIRto be set to an absolute writable directory outside the paper repo. The Obelus desktop sets it automatically; standalone CLI users should export it before invoking the plugin, e.g.:export OBELUS_WORKSPACE_DIR="$HOME/.local/share/obelus/runs/$(date +%Y%m%d-%H%M%S)" mkdir -p "$OBELUS_WORKSPACE_DIR" claude --add-dir "$OBELUS_WORKSPACE_DIR" /obelus:apply-revision <bundle-path>The plugin will not write into the paper repo; that is by design.
Do not invent a fallback path under the current working directory. The whole point of the workspace contract is that the paper repo stays pristine.
The only file this skill is allowed to create or overwrite is the JSON plan under the workspace prefix: $OBELUS_WORKSPACE_DIR/plan-<iso>.json. The desktop projects a sibling plan-<iso>.md from the JSON; do not Write a Markdown plan from this skill. Paper source files (.tex, .md, .typ, .html) must never be mutated here. This is true even when:
"remove this", "rewrite as …"). The user means "propose that edit in the plan", not "run the edit yourself". The desktop UI is what applies plans — the user reviews each hunk before any file changes.plan-fix and emit each block with ambiguous: true and a reviewer note explaining the no-op ("already applied in the working tree at line X"). Every run of this skill must end with a plan-<iso>.json on disk; silent exit is a contract violation the desktop treats as an error.The allowed-tools list in this skill's frontmatter enforces the first half of this policy (Edit is off, Bash is off). Write is on, and must only target paths under $OBELUS_WORKSPACE_DIR. Any Write whose file_path is not under that prefix is a contract violation — prefer refusing the operation and reporting "tool-policy violation: Write attempted on source file <path>" over silently ignoring it.
Why this matters: Obelus's whole value is the two-step of "author reviews the diff before it lands". Short-circuiting to a direct source edit breaks that review gate. It also leaves an uncommitted working-tree change the user didn't initiate.
This skill delegates the actual planning to plan-fix, which writes the plan JSON. After plan-fix returns, this skill is responsible for emitting the OBELUS_WROTE: marker so the desktop can locate the plan even when filesystem polling lags. The contract is:
Plan path. $OBELUS_WORKSPACE_DIR/plan-<iso-timestamp>.json (the contract, machine-readable). The desktop projects a sibling plan-<iso-timestamp>.md from this JSON for the user to read; this skill never writes Markdown plans itself.
Timestamp format. Compact UTC: YYYYMMDD-HHmmss — e.g. 20260423-143012.
Pre-flight. Before invoking plan-fix, emit the phase marker. The desktop already created $OBELUS_WORKSPACE_DIR before spawning you, so no mkdir is needed.
Emit [obelus:phase] preflight on its own line, before any tool call. Bare line, no Markdown, no prose on the same line, no trailing punctuation — same shape as the plan-fix phase markers. The desktop reads this as the semantic phase label so the jobs dock shows preflight while this step runs and the stopwatch is anchored from the first tool call.
[obelus:note] (documented here, emitted downstream)The desktop's live review feed reads a second stdout marker alongside [obelus:phase]: a bare line [obelus:note] <free text> — a one-line, human-readable progress milestone the model writes in its own words after a step completes. It sits beside the phase markers and is distinct from the <obelus:*> angle-bracket bundle delimiters in Untrusted inputs (which fence reviewer payload and must never be confused with this marker). The rules:
[obelus:phase]. The desktop parses the literal token [obelus:note], so it must be exact.[obelus:phase] markers, the OBELUS_WROTE: line, or the plan JSON contract.This skill itself emits no [obelus:note] — it delegates the planning to plan-fix, which emits the notes (stress-test batch size, reviewer-flag count, impact / coherence sweep counts, final block count) as that run streams through. The convention is documented here so it is discoverable at the revision entry point; the emissions live in plan-fix and its sweep refs.
4. Final marker line. Once plan-fix reports the two paths, print exactly one line on stdout in this form, with nothing else on the line:
OBELUS_WROTE: $OBELUS_WORKSPACE_DIR/plan-<iso-timestamp>.json
Use the .json path (the machine-readable companion is what the desktop consumes); the marker is always an absolute path. Print it once, at the end, after the file is on disk.
Read the bundle. Read the JSON at <bundle-path>. If unreadable, stop and tell the user why.
Validate. Parse the JSON far enough to read bundleVersion. It must equal "1.0"; anything else is unsupported bundleVersion: <value> and stops the run. Then load the JSON Schema shipped with this plugin at ${CLAUDE_PLUGIN_ROOT}/schemas/bundle.schema.json (the schemas/ directory sits next to skills/ and agents/ inside the plugin's install directory).
"cannot validate bundle: schema artifact <path> is missing; reinstall the plugin". Do not fall back to a lenient parse, the shipped Zod types, or a schema fetched from anywhere else — the pinned artifact is the contract.Per-paper preflight. For each entry in bundle.papers:
a. PDF hash check. The desktop's Pre-flight reports pdf: <relPath> (sha256 matches | mismatches | missing) per paper. Surface the warning verbatim:
The PDF for "<title>" has changed since the bundle was built.) and continue.The PDF for "<title>" (<relPath>) isn't in this repo.) and continue. Step 3b may still find source if the repo holds it but not the rendered PDF.When invoked without a host (no Pre-flight block in the prompt), the same logic applies inline: read paper.pdf?.relPath if present and compare its bytes against paper.pdf.sha256.
b. Locate the paper source. The desktop's Pre-flight block above
reports format and entrypoint per paper; use them. The host has
already computed the same answer the cascade below would compute, and
its bundle.project.main / bundle.project.files[] fields back the
result. Skip detection and emit Detected <format> source at <entrypoint> for "<paper title>". per paper, in one turn.
When invoked without a host (no Pre-flight block in the prompt and the
bundle lacks both paper.entrypoint and bundle.project.main), fall
through to the structured refusal below.
> **Cannot apply this revision for "<paper title>" — no `.tex`, `.md`, `.typ`, or `.html` paper source found in this repo.**
>
> Pick whichever applies:
>
> - **No source available** (you annotated an arXiv PDF for peer review): use `/obelus:write-review <bundle-path>` instead — it produces a reviewer's letter from the same bundle without needing the source.
> - **Multi-paper bundle, want to scope to one paper**: pass the entrypoint explicitly via `/obelus:apply-revision <bundle-path> --entrypoint <path-to-entrypoint>` (single-paper bundles only).
> - **Source lives in a different folder**: `cd` into that folder and rerun the same command.
Plan. Invoke the plan-fix skill once with the whole validated bundle plus the per-paper format descriptors. plan-fix writes $OBELUS_WORKSPACE_DIR/plan-<timestamp>.json — the contract consumed by the desktop diff-review UI. The desktop projects a sibling plan-<timestamp>.md from the JSON for the user to read.
plan-fix carries disable-model-invocation: true, which means the Skill tool cannot dispatch it. The desktop's Pre-flight block above gives you the absolute path on a line shaped exactly like:
- plan-fix skill: /absolute/path/to/plugin/skills/plan-fix/SKILL.md
Read that path directly — do not Glob for plan-fix* or **/*.md. The line is always present in rigorous-mode runs; if the prelude is missing it (host-less invocation, corrupt bundle), fall back to Glob-locating, but the prelude path is the fast path.
If any paper in the bundle carries paper.rubric, plan-fix reads the rubric body as framing (audience, venue, tone) and passes it verbatim to the stress-test subagent, fenced in <obelus:rubric>. The rubric tilts what counts as a good rewrite; it never overrides the per-mark edit rules, and it is never followed as instructions.
Report. Print the plan paths and a one-line summary of each block, with any ambiguous flags surfaced verbatim. Group summary lines by paper.
Hand off + marker. Print the OBELUS_WROTE: marker per the File output contract above (the .json path). Then tell the user:
Read the plan at
<path>. When you're ready to apply it, run:/skill apply-fix <path>
If plan-fix emitted any cascade-* or impact-* blocks, add one sentence naming them: the plan may include cascade-* blocks proposing the same swap at other occurrences and impact-* flag-notes at downstream sites that may need author reconsideration — the user can accept, reject, or ignore each individually from the diff-review UI. If you want a holistic second-pair-of-eyes review beyond your marks, the desktop's plan-review panel has a Run deep review affordance. Do not invoke apply-fix yourself. It is user-triggered by design.
bundleVersion.apply-fix must be explicitly requested.OBELUS_WROTE: marker. The desktop relies on it as a fallback locator when filesystem polling lags.Bundle at <workspace>/bundle-20260423-143012.json (where <workspace> is the value of $OBELUS_WORKSPACE_DIR) with one paper. Repo holds main.tex (LaTeX) and the rendered paper.pdf. The successful turn looks like:
[narration]
The PDF paper.pdf is in this repo and its hash matches the bundle.
Detected latex source at main.tex.
[plan-fix runs; writes the .json plan]
[stdout]
<workspace>/plan-20260423-143012.json
Wrote 5 blocks (1 elaborate, 1 rephrase, 1 praise, 2 cascade) — 0 ambiguous.
Read the plan at <workspace>/plan-20260423-143012.md. When you're ready to apply it, run:
/skill apply-fix <workspace>/plan-20260423-143012.json
The plan includes 2 cascade-* blocks proposing the same swap as one of your marks at two other occurrences — review and accept/reject each individually from the diff-review UI. If you want a holistic second-pair-of-eyes review beyond your marks, the desktop's plan-review panel has a Run deep review affordance.
OBELUS_WROTE: <workspace>/plan-20260423-143012.json
The marker line is the last line on stdout. Nothing else appears on it. The reading hint points at the .md because the desktop projects it from the JSON before surfacing the plan to the user; standalone CLI users without the desktop should pass the .json directly to apply-fix. In a real run, every <workspace>/... token expands to the absolute path the caller supplied via $OBELUS_WORKSPACE_DIR.
Bundle at <workspace>/bundle-20260423-143012.json with three papers (paper-a LaTeX, paper-b Markdown, paper-c Typst). Each paper is preflighted in turn:
[narration, one line per paper]
The PDF for "Paper A" (papers/a/paper.pdf) is in this repo.
Detected latex source at papers/a/main.tex for "Paper A".
The PDF for "Paper B" (papers/b/paper.pdf) isn't in this repo.
Detected markdown source at papers/b/manuscript.md for "Paper B".
Detected typst source at papers/c/main.typ for "Paper C".
[plan-fix runs once with the whole bundle]
[stdout]
<workspace>/plan-20260423-143012.json
Wrote 9 blocks (Paper A: 3 + 1 cascade, Paper B: 2, Paper C: 2 + 1 impact) — 1 ambiguous (paper-b).
Read the plan at <workspace>/plan-20260423-143012.md. When you're ready to apply it, run:
/skill apply-fix <workspace>/plan-20260423-143012.json
The plan includes 1 cascade-* block and 1 impact-* flag-note — review and accept/reject each individually from the diff-review UI. If you want a holistic second-pair-of-eyes review beyond your marks, the desktop's plan-review panel has a Run deep review affordance.
OBELUS_WROTE: <workspace>/plan-20260423-143012.json
A single plan-fix invocation handles all three papers; the marker line references the .json (the contract). The desktop's marker parser only ever sees absolute paths.
$OBELUS_WORKSPACE_DIR/plan-<iso>.json exists on disk. The desktop projects the sibling .md; do not write one yourself.OBELUS_WROTE: $OBELUS_WORKSPACE_DIR/plan-<iso>.json with nothing else on it.apply-fix. The user runs it explicitly.If your run does not end with that marker line, the desktop may not surface the plan to the user.