設定
harnd init が書く .harnd/config.yaml は、手で編集して構いません。ここに全キーの意味をまとめます。
.harnd/config.yaml は harnd init が生成し、その後は一部のコマンド(link・rename・refresh)が更新します。ファイル自体が「手で編集して構わない」と名乗っています——これはキャッシュではなく正本です。
schema_version: "2.0.0"
harness:
id: hrn_01k...
name: my-project
description: ""
project:
root: ..
defaults:
gates:
- no-raw-color
- no-raw-spacing
scan:
components:
- "packages/ui/src/**"
paused:
reason: "waiting on a known scan bug"
until_version: "0.3.0"
cloud:
linked: false
api_url: https://harnd.com
harness_id: hrn_...schema_version
必須。"2.x.y" 形式の文字列です。harnd refresh は既存の .harnd/ を、インストール済みCLIが期待するスキーマへ更新します。既定はドライランで、--write を渡したときだけ実際に変更を書き込みます。
language
任意。"en" または "ja"、既定は "en" です。これは生成物の言語です——たとえば .harnd/agents/harness.md や、既定ゲートの rationale の文言。CLI自体の出力言語ではありません。CLIの出力は、この設定に関わらず常に英語です。設定するには harnd init --lang ja を使います。
harness
harness.id—init実行時に一度だけ生成される(hrn_…)。以後、init --forceを挟んでも変わりません。harness.name— 人間向けの名前です。後から変える推奨手段は、このフィールドを直接編集することではなくharnd rename <name>です——ファイル全体としては手編集して構いません。harness.description— 任意の自由記述。
project.root
.harnd/ からリポジトリのルートまでの相対パスです。.harnd/ はルートの1階層下に置かれるので、ほぼ常に .. になります。
defaults.gates
内部管理用の項目です。このハーネスが既に提示された既定ゲートの一覧を保持します。harnd refresh はこれを使って、「あなたが意図して外したゲート」と「init 当時まだ存在しなかったゲート」を区別します——これが無いと、refresh は前者を勝手に復活させてしまいます。外したゲートを二度と提案しないための項目であり、手編集を想定していません。
scan.components
任意。リポジトリ相対の glob パターンの配列で、コンポーネントをどこで探すかを宣言します。既定では、scan は名前から意味が確定しているディレクトリ(components/・ui/ などの規約と、app/ 配下のルート同居ファイル)だけを見ます。モノレポのパッケージ(packages/ui/src/**)や、Feature-Sliced Designの src/features/**/ui/** のような非標準のレイアウトでは、これを明示的に設定してください。
これは検出範囲であり、検証範囲ではありません。ゲートは独自の scope.include を別に持っています。両者を混同すると、ゲートの scope の外にあるだけで実際には使われている実在のコンポーネントを、誤って deprecated 扱いしてしまうことがあります。
scan.paused
任意。scan の実行を意図的に止めていることを宣言します。paused: ブロックは、止めていることを隠すためのものではありません——鮮度の警告はいずれにせよ表示され続けます。警告の文面が「怠慢」から「理由つきで宣言されている」に変わるだけです。
scan.paused.reason—paused:を書くなら必須です。理由の無いpaused:ブロックは不正な形式として扱われ、無視されます——harnd は黙って受け入れず、そう明示します。scan.paused.until_version— 任意。理由が「標準的な方針」ではなく「特定のharndのバグや版を待っている」場合に使います。その版以上を実行するようになった時点で、scanとvalidateが「もう解除できるはずです」と案内します。harnd が自動で解除することはなく、解除は常に手動です。
cloud
ローカルで完結するコマンド——init・scan・validate——はこのセクションに一切触れません。変わるのは harnd link を実行したときだけです。
cloud.linked—harnd linkによってtrueになります。init直後は常にfalseです——ローカルのコマンドにアカウントは要らないからです。cloud.api_url—harnd linkが記録します(既定https://harnd.com)。秘密ではありません。cloud.harness_id— 判明していればクラウド側のidを記録します。あくまで参考情報です——harnd syncは、このフィールドではなくAPIキーから実際の送信先を解決します。