japanese-writing-drafter

SkillAI & models

Turns your corrections to your AI's Japanese phrasing into draft writing rules. When you rewrite a sentence or call out a style problem mid-conversation, it drafts a pending proposal and saves it to a file for later review. Proposals stay pending until you look at them.

Available today. Use it from your connected AI after setup.

After adding the skill, correct your AI's Japanese phrasing as you normally would during a conversation. Check ~/.claude/writing-lint/proposals.jsonl to review the rule proposals it has drafted.

Then ask your AI: use the japanese-writing-drafter skill

What your AI can do with it

  • Notice when you rewrite its Japanese sentences mid-conversation
  • Pick up style corrections like 'this wording is bad, say it like X instead'
  • Turn each correction into a draft writing rule
  • Save pending rule proposals to a file for your review
  • Keep proposals pending until you decide on them

What this skill tells your AI

The instructions your AI receives, as published by chachamaru127/claude-code-harness in skills/japanese-writing-drafter/SKILL.md and read by ahel’s review.

会話内で operator が agent の日本語表現を直したときだけ、その指摘を pending の writing-rule 提案として ~/.claude/writing-lint/proposals.jsonl に追記する。提案の追記のみを行い、承認・却下・rules.jsonl への昇格は一切行わない。

核心契約

  • 書き込みはこの skill 経由のみ: proposals.jsonl に status: pending の行を追記できるのはこの skill だけ。他のどのスクリプト・hook もこのファイルに書き込まない。
  • 自動昇格経路は存在しない: rules.jsonl を更新できるのは人間が手で実行する scripts/writing-rule-approve.sh --id <id> だけ。この skill からも、他のどの hook からも writing-rule-approve.sh を自動起動しない。
  • 1 回の検知につき 1 提案。status は常に "pending" で書く。

トリガー条件

会話の中で、次のいずれかが起きたときだけ発動する(雑談・通常の作業指示では発動しない)。

  • operator が直前の agent 発言・生成物の日本語表現をそのまま書き直した
  • operator が「その言い方はNG」「〜じゃなくて…と書いて」のように文体・言い回しを名指しで指摘した
  • operator が明示的に「これルール化して」「writing-lint に登録して」と言った

手順

  1. before / after を確定する: 直された元の表現 (before) と、operator が示した / 暗に求めた書き直し後の表現 (after) を会話から抽出する。before が具体的な語句・言い回しに絞れないほど曖昧なら、提案せずに終える(無理に一般化しない)。
  2. pattern を作る: before の該当フラグメントを Go 正規表現 (RE2) として書く。特殊文字はエスケープする。ヒット範囲を広げすぎない(writing-rule.v1pattern は文全体ではなく該当箇所のみでよい)。
  3. good を作る: after をそのまま、または要点を保った短い言い換えとして書く。
  4. scenes を決める: 会話の文脈から分かるときだけ ["external"] / ["chat"] / ["docs"] 等を付ける。不明なら省略する(省略は「全シーン適用」の意味になる。無理に推測しない)。
  5. id を作る: 内容が分かる kebab-case スラッグに 8 桁の一意サフィックスを付ける(例: no-meta-narration-a1b2c3d4)。
  6. 追記する: 以下のコマンドで templates/schemas/writing-rule-proposal.v1.json に対する手書きバリデーション(必須キー + additionalProperties: false)を通してから 1 行追記する。CLAUDE_WRITING_LINT_PROPOSALS が設定されていればそのパスを、無ければ ~/.claude/writing-lint/proposals.jsonl を使う。
python3 - <<'PY'
import json, os, sys, uuid
from datetime import datetime, timezone

repo_root = "REPO_ROOT"  # 呼び出し時に実際のリポジトリルートへ置き換える
schema_path = os.path.join(repo_root, "templates/schemas/writing-rule-proposal.v1.json")
proposals_path = os.environ.get("CLAUDE_WRITING_LINT_PROPOSALS") or os.path.join(
    os.path.expanduser("~"), ".claude/writing-lint/proposals.jsonl"
)

with open(schema_path, encoding="utf-8") as f:
    schema = json.load(f)

record = {
    "id": "SLUG-" + uuid.uuid4().hex[:8],
    "pattern": "PATTERN_HERE",
    "good": "GOOD_HERE",
    "status": "pending",
    "evidence": "EVIDENCE_HERE",
    "created_at": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
}
# scenes / severity は分かるときだけ足す:
# record["scenes"] = ["external"]
# record["severity"] = "warning"


def validate(data, sch):
    required = set(sch.get("required", []))
    props = sch.get("properties", {})
    if sch.get("additionalProperties") is False:
        extra = set(data.keys()) - set(props.keys())
        if extra:
            raise ValueError(f"additional properties not allowed: {sorted(extra)}")
    for key in required:
        if key not in data:
            raise ValueError(f"missing required property: {key}")


validate(record, schema)

os.makedirs(os.path.dirname(proposals_path) or ".", exist_ok=True)
with open(proposals_path, "a", encoding="utf-8") as f:
    f.write(json.dumps(record, ensure_ascii=False) + "\n")

print(f"drafted pending proposal: {record['id']}")
PY
  1. operator に伝える: 追記した id と、確認・承認コマンド (scripts/writing-rule-list.sh / scripts/writing-rule-approve.sh --id <id>) を短く伝える。承認するかどうかは operator の判断であり、この skill は待たない。

関連

  • 承認 / 却下: scripts/writing-rule-approve.sh --id <id> (--reject で却下)
  • pending 一覧: scripts/writing-rule-list.sh
  • スキーマ: templates/schemas/writing-rule-proposal.v1.json (提案) / templates/schemas/writing-rule.v1.json (承認後のルール)
  • スキャンエンジン: go/internal/writinglint/ (Phase 135.1)

Signals

GitHub stars
3k
Forks
299
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
japanese-writing-drafter
Source
github.com/chachamaru127/claude-code-harness