Pre-choice usable artifact execution
Purpose & Output Contractの最小の実成果物またはremote mutation previewをmain contextで作成する。effect別のparse/open・secret・irreversible・corrupt guardだけを実行し、現物path・digest・開き方またはpreview receiptを提示してからaccept-as-is/light/standard/detailedを記録する。accept-as-isはmutationを実行せずhandoff完了とし、後続sectionを実行しない。
Post-choice selected improvement execution
以下の既存workflow・goal-seek・評価・修正sectionおよびexternal mutation safety wrapperはlight/standard/detailedが記録されてsemantic_evaluator_startedへ遷移した場合だけ実行する。actual mutationはcanonical preview→hook-confirm→authorize→execute wrapperだけを通し、release/exhaustiveは別の明示eventを必要とする。
<!-- external-mutation-guard-cli:v1 -->
Canonical external mutation receipt flow (mandatory)
Never execute the external mutation argv directly. Replace every angle-bracket placeholder
with the reviewed value from this run; the central CLI fails closed on missing/invalid values.
Resolve the guard plugin root once, before preview. An installed plugin cannot reach a sibling
plugin as <plugin root>/.., so never guess that path:
python3 "${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/extract-plugin-root.py" skill-governance-adapters
Use the printed absolute path as <GUARD_PLUGIN_ROOT> in preview, authorize and execute
(other Bash is blocked while the confirmation is pending, so do not resolve it again).
If the resolver exits non-zero, stop without any external mutation and tell the user to install
the skill-governance-adapters plugin.
python3 "<GUARD_PLUGIN_ROOT>/scripts/build-external-mutation-guard.py" preview --project-root "$PWD" --entrypoint-ref "plugin:<PLUGIN_NAME>/skills/<SKILL_NAME>/SKILL.md" --target-scope "<TARGET_SCOPE>" --diff-summary "<DIFF_SUMMARY>" --side-effect-summary "<SIDE_EFFECT_SUMMARY>" --command-json '<MUTATION_ARGV_JSON>'
Present that official preview output to the user. Only the exact user reply printed by preview
may trigger the registered hook-confirm producer. Then use the two returned receipt paths:
python3 "<GUARD_PLUGIN_ROOT>/scripts/build-external-mutation-guard.py" authorize --project-root "$PWD" --preview-receipt "<PREVIEW_RECEIPT_PATH>" --confirmation-receipt "<CONFIRMATION_RECEIPT_PATH>"
python3 "<GUARD_PLUGIN_ROOT>/scripts/build-external-mutation-guard.py" execute --project-root "$PWD" --authorization-receipt "<AUTHORIZATION_RECEIPT_PATH>" --command-json '<MUTATION_ARGV_JSON>'
Do not use an auto-approval flag or invoke the mutation command outside this receipt flow.
<!-- /external-mutation-guard-cli:v1 -->
run-contract-generate
Runtime root contract
runtime_root_policy: host-skill-path を適用する。
- Claude Codeでは
CLAUDE_PLUGIN_ROOT をplugin rootとして使用する。
- Codexではホストが提示したこの
SKILL.md のabsolute pathから、plugin manifestを持つ祖先を上方探索して論理 PLUGIN_ROOT を解決する。
cwd からplugin rootを推測せず、literal placeholderをshellへ渡さない。各shell invocation内で解決済みabsolute pathを PLUGIN_ROOT に設定する。
prompts/ 配下はこのowner Skill契約を継承する。
Purpose & Output Contract
管理台帳(Google Sheets)の「作成指示◯ かつ 未作成」行ごとに、契約タイプ(個人/法人)に応じた Drive 上の .docx ひな形を差込・条項分岐し、AI記入箇所を黄色化した Google Docs 版(下書き・要確認) を個人/法人フォルダへ保存→Slackに通知→台帳を draft 化(ファイル名/契約書URL/Slack TS/日時)。承認後の提出用PDFは run-contract-finalize が担う(責務分離)。実体は共有エンジン ../../lib/engine.py --phase draft。法務承認済の条文は改変しない。概念は references/concept.md、差込仕様は references/injection-mapping.md、設定は plugin直下 README.md。
境界
下書き生成(Docs黄色版)+法人別紙1-3生成+Slack通知+台帳draft化まで。承認検知・PDF確定・共有は run-contract-finalize、ひな形変更追従は run-template-sync に分離。7専門家による法的レビュー/Notion連携/Markdown副系は対象外。後方互換: --phase 未指定で従来の1パス(Docs+PDF即時)も可。
主要ルール
- ひな形不改変: 法務承認済
.docx の条文本文は変更しない。黄色プレースホルダ(●/XXXX/第6条記の空欄)のみ差込む。
- 甲はSSOT:
lib/config_auth.load_party_a() から取得(台帳/Drive/直書きより lib/config_auth が優先)。台帳に甲列を作らない。具体値は config_auth に集約。
- 黄色二系統: 差込んだ run は黄色維持→Google Docs版。複製してハイライト除去→PDF版。
- 個人/法人分離: 台帳は同一スプレッドシート内の
個人/法人 2シート。列構成・ひな形・出力フォルダを分ける(法人①は成果物/検収を別紙委譲・署名欄に代表者)。
- 認証と機密: Service Account 鍵は macOS Keychain(
gdrive-service-account.<keychain-prefix> / contract-generate/service-account-json)。環境依存IDは google-config.json(gitignore)。乙住所/代表者/口座は機微情報、台帳・出力フォルダの共有を最小化。
- 冪等性: 台帳の冪等キーで重複生成を防止。
completed 行は既定スキップ。
- セットアップは
references/README-setup.md(GCP有効化・SA作成・Keychain登録コマンド・フォルダ共有・config記入)。
ゴールシーク実行
固定手順は書かない。毎周「ゴール・目的/背景・チェックリスト」を読み、その時点で最適な手順を AI が生成・実行する。詳細は run-build-skill references/goal-seek-paradigm.md。重い周回は SubAgent に fork し親へは要約のみ返す。
ゴール (Goal)
管理台帳の作成指示◯行が、個人/法人それぞれのひな形から**黄色維持 Google Docs 版(下書き・要確認)**として該当フォルダに生成され、Slack通知のうえ台帳へ ファイル名・契約書URL・Slack_メッセージTS・ステータス=draft・日時が書き戻された状態。黄色除去 PDF 化・ステータス=completed 書戻しは run-contract-finalize の責務(本スキルの draft 停止条件には含めない)。後方互換の1パス(legacy)モード(--phase 未指定で Docs+PDF即時・completed)を明示利用した場合のみ PDF/completed まで一括する。
目的・背景 (Why)
1人事業の契約書作成負荷を機構に肩代わりさせ本業(AIコンサル)へ時間を再配分する。法務承認済 .docx ひな形と都度変わりうる台帳を単一の照合エンジンで結び、二重管理とレイアウト崩れを排除する。
完了チェックリスト (Checklist)
ゴールシークループ
- 未達
[ ] を特定 → 2. 手順を都度生成(固定化禁止)→ 3. 実行 → 4. チェックリスト再評価し [x] 更新 → 全 [x] まで反復。規定周回(3)で未達なら open_issues に差し戻す。
ゴールシーク配線
量産案件(複数行)を多周回す場合の周回状態とドリフト圧縮の配線。周回末に eval-log/run-contract-generate-intermediate.jsonl へ {iteration, original_goal, current_goal_snapshot, delta_from_original, merged_directive_for_next, drift_signal} を1行追記する。original_goal は全周回で不変(SHA-256 を eval-log/run-contract-generate-progress.json の original_goal_hash に固定し毎周回照合)。次周回の手順生成は直前の merged_directive_for_next と original_goal を必須入力として読む(AI 単独再導出禁止)。重い周回は Skill(run-goal-seek) に fork 委譲する。
python3 "${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/lib/check_intermediate.py" run-contract-generate
# → eval-log/run-contract-generate-intermediate.jsonl の original_goal_hash 不変・required_keys 充足を検査
# 不整合は exit 2 で次周回を停止
ゴールシーク品質ループ (正負フィードバック)
各周回末に lib/feedback_loop.py の record_positive() / record_negative() を呼び、シグナルを eval-log/run-contract-generate-feedback.jsonl に追記。次周回開始時に derive_next_directive("run-contract-generate", round) を参照し、戻り値を merged_directive_for_next の先頭に prepend する(過去周回の負シグナルを次手順に必ず反映)。
正負シグナル定義表 (run-contract-generate)
正負シグナルの定義(positive/negative の各シグナルと検出元)は、責務単位 7 層プロンプト prompts/R1-select-and-fill.md §4.4「正負フィードバックループ」を**正本(SSOT)**とする。本スキルは重複定義せず同表を参照する。
反映タイミング: 周回末 record_* → 次周回開始時 derive_next_directive → merged_directive に prepend。
検証
口座番号=7桁半角数字 / 口座種類∈{普通,当座}
契約開始日<契約終了日 かつ両者 YYYY/MM/DD
金額=半角整数(差込時 100,000円 へ整形)
- 必須非空: 乙名称 / 乙住所(法人は代表者役職・氏名も)
- 生成後に未置換プレースホルダ(
●/XXXX)残存なし
- 実装は
${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/lib/validate.py(差込前)+ ${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/lib/docx_fill.py 末尾の残存チェック(差込後)
Gotchas
read_file_content 系ではハイライト属性を取得できない。差込アンカーは ${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/lib/docx_fill.py が run.font.highlight_color==WD_COLOR_INDEX.YELLOW を機械抽出して特定する。
- PDF は Drive 上で Google Docs 変換→
export(application/pdf) で生成する(LibreOffice 不要)。
- 機微情報(住所/代表者/口座)を扱うため、台帳・出力フォルダの共有範囲を最小化する。
- 副作用(外部書込)を伴う。
--dry-run で台帳書込・Drive保存を抑止して検証可能。
変数化契約
契約タイプ(個人/法人) / ひな形DocID(個人②/法人①) / 台帳シート名 / 出力フォルダID を google-config.json と台帳から注入。具体値は本文に直書きせず config と台帳に置く。
追加リソース
references/README-setup.md — スキル内部参照用の技術要約(CI/pre-commit配線・template-mapping二重定義注意)。セットアップ手順の正本は plugin直下 README.md のセットアップ節
lib/setup_doctor.py — セットアップ総合診断(cwd/Python/gcloud/env/Keychain/config/Drive/Sheets/Slack を横断点検し未完了 Task を名指し)
references/concept.md — 概念設計(参考スキル継承/転換・概念図)
references/injection-mapping.md — 個人/法人の台帳列⇄ひな形プレースホルダ差込マッピング
references/legal-knowledge-index.md — 法令ナレッジ(参考スキル references/00-11)索引
references/google-config.sample.json — google-config.json のひな形
prompts/R1-select-and-fill.md — 行選択・差込・欠損補完の責務単位7層プロンプト(SSOT正本)。../../agents/contract-draft-agent.md は本プロンプトを参照する薄い実行アダプタ(本文を持たない)。
- 追加リソースは plugin 直下
lib/ ディレクトリ全体を参照。各ファイルは PEP723 風メタブロックで purpose を記載。
- 本 skill が強く依存する lib:
engine.py(--phase draft 委譲先) / docx_fill.py(黄色 run 差込) / scan_template.py(差込アンカー抽出) / validate.py(差込前検証) / config_auth.py(SSOT 甲情報)
scripts/draft.py — 薄い shim(lib/engine.py --phase draft への委譲のみ)
セキュリティと権限
本Skillは外部書込(Drive/Sheets, effect=external-mutation)を伴うため二段防御を実装済み:
- 動的層(実装):
hooks/hook-guard-secret.py(PreToolUse/Bash, plugin.json 配線済)が SA 鍵の平文出力経路(廃止済 --print-unsafe 含む再導入防御)・誤削除(delete-generic-password)をブロック。keychain_get_secret.py は CLAUDE_HOOK_INVOKED=1 必須化で直接呼び出しを exit 2 で拒否。
- 静的層(ユーザー適用):
references/settings-hardening.json の permissions.deny を .claude/settings.json にマージすると鍵流出系コマンドを拒否。
- 設計上の保護: 書込先は
google-config.json の許可ID(台帳/個人・法人フォルダ)に限定(config_auth.load_config が必須キー検証)、鍵は Keychain のみ・平文保存禁止、--dry-run で副作用抑止、ensure_schema は非破壊追記。
- 将来拡張: spreadsheetId/folderId の config 許可値を実行時照合する追加 PreToolUse hook(現状は config 経由注入のため CLI に ID は露出しない)。