---
title: "プライバシー"
description: "「プライバシー」：yokoten ガイドの一章。"
canonical: https://yokoten.app/ja/docs/guide/privacy
lang: ja
source: https://github.com/yokoten-labs/yokoten/blob/v0.1.2/docs/i18n/ja/guide.md
ref: "v0.1.2"
---

> For AI agents: the documentation index is at https://yokoten.app/llms.txt. To set up yokoten in a project, follow https://yokoten.app/agents.md.

# プライバシー

ルール 11 にはチェックがあります。個人のメールアドレスと IP アドレスを、CI とすべてのコミットで走査します。あなた自身のマシンでは、`~/.config/yokoten/private-marks` も読みます。あなたの名前、住んでいる街、ドメイン、サーバーの名前です。そのファイルはリポジトリの外にあります。公開してはいけないものの一覧は、それ自体を公開できないからです。当たりはファイルと行で報告され、印そのものは決して出力されません。当たりは印の種類を名指しします。`matches your git name (a private mark yokoten added by itself)` や `matches a word you added to your private marks` です。直し方は印の変え方を言います。yokoten が足す種類なら `yokoten marks off git-name`、あなた自身のものなら `yokoten marks remove` です。

`YOKOTEN_PRIVATE_MARKS` は二つ目の印のファイルを名指しします。チェックは両方のファイルを読み、それらのすべての印を使います。だからこの設定は印を足すことだけができ、決して消せません。`~/.config/yokoten/private-marks` があるのに読めないときは、設定が何を言ってもチェックは失敗します。`yokoten marks add` と `install` はまだあなたのホームフォルダのファイルに書きます。マシンの許可のファイル（下）は `~/.config/yokoten` からだけ読み、設定のファイルの横からは決して読みません。

エージェントはホームフォルダも動かせません。`HOME=/tmp/x git commit` は、コミットチェックを別のフォルダの印の探索へ送り、何も見つけさせず、通してしまいます。だから番人は、git、gh、yokoten、またはそれらを走らせるシェルや `eval` に対して `HOME` か `USERPROFILE`（大文字小文字を問わず）を設定するコマンドを拒否します。`env` や `sudo` のあともです。行の残りのための設定も拒否します。`export`、`declare`、`read`、`printf -v`、`for` ループ、`${HOME:=x}` です。ほかのプログラムの前なら設定は通ります。`HOME=$(mktemp -d) npm test` はテストをあなたのファイルから遠ざけます。`$HOME` を読むのは構いません。

`HOME` か `USERPROFILE` を外すのは拒否されます。git、gh、yokoten、シェルの前の `env -u HOME` も同じです。`env -u HOME npm test` はまだ通ります。

ワーカーは、`git commit`、`yokoten check`、またはそれらを走らせるシェルの前に、`HOME`、`USERPROFILE`、`XDG_CONFIG_HOME` を設定できません。`env` と `export` も同じように数えます。ワーカーはコミットチェックの前にそれらの名前を外せません。デスクでは、実行役がワーカーの代わりにコミットします。

ワーカーはファイルからシェルスクリプトを走らせられません（`bash script`、`sh script`）。番人はそのファイルを読めないので拒否します。`bash -c` は許されたままです。スクリプトのテキストがコマンドの中にあるからです。`--rcfile` のようにファイルを名指ししうるオプションも拒否されます。

`$HOME` の下の印のファイルがないとき、または印を一つも持たないとき、チェックは本当のホームのファイルを読みます。本当のホームは `$HOME` ではなく、パスワードのデータベースから来ます。そこにファイルがないのはエラーではありません。読めないファイルはチェックを止めます。読めるファイルは使われるので、変えた `$HOME` がそれらの印を飛ばすことはありません。`HOME` がないときも、チェックは本当のホームの印のファイルを読みます。

文字と空白の印、たとえば名前や街は、完全な語として見つかります。隣の文字だけがそれを隠します。`sam` は `hi Sam`、`sam_dev`、`@sam`、`sam97` で見つかり、`sample` では見つかりません。`\n` のようなバックスラッシュのエスケープ、URL 符号化の `%2F`、`%5C`、`%20`、小文字から大文字への変化（`githubSam`、`SamDev`）も端と数えます。長い印の語の間には空白、`-`、`_`、`.` があっても、何もなくてもよいので、`sam example` は `sam-example` と `samexample` で見つかります。`redact` も同じルールで印を隠します。ほかの印、たとえばドメイン、アドレス、数字は、どこでも、語の中でも見つかります。中国語、日本語、韓国語、タイ語、アラビア語、ヘブライ語で、語や助詞を名前に結合するスクリプトの名前も同じです。

プロジェクト自身の公開アドレス、たとえばそのドメインの `support@` も見つかります。何も自分だけで通ることはありません。そのアドレスが意図的に公開なら、yokoten.json の `privacy.allow` に足してください。

印のファイルはマシン全体のものなので、非公開のプロジェクトの名前はそこに入ります。設定なしでは、印はそれが名指しするリポジトリを決して止めません。印がリポジトリの origin リモートの名前のとき、`check`、コミットフック、`gh` 投稿の番人は、そこでその一つの印を飛ばします。`Quiet Vale` は `someone/quiet-vale`、`Quiet_Vale`、`quiet.vale` を名指しします。大文字小文字は別として、`-`、`_`、`.`、空白はそれぞれ語の間の区切りと数えます。区切りは決して落とさないので、`Li Na` は `lina` を名指ししません。完全な名前でなければならず、一部では決してありません。ほかのすべての印はまだ適用され、その印もほかのすべてのリポジトリで適用されます。yokoten はリポジトリを判別できないときは何も飛ばしません。リモートが二つ、origin がない、別のリポジトリへの投稿、`?` や `#` のある origin のアドレス、パスが `owner/name` だけではないホストのアドレス、リモートのヘルパー（`ext::`、`gcrypt::`、任意の `<transport>::`）、このマシンのフォルダやホストが origin（`localhost`、`127.x.x.x`、`::1`）のときです。数えるのは origin だけです。CI でも、origin はジョブがチェックアウトしたリポジトリです。コミットチェックはコミットの時に origin を信頼するので、あとで別のリモートへの push はチェックされません。`doctor` は、リポジトリを名指しするために飛ばした印の数を言い、どれかは決して言いません。これを切るには、yokoten.json に `"privacy": { "skipOwnName": false }` を設定します。このマシンのすべてのリポジトリには、`private-marks-allow.json`（下）に `{ "skipOwnName": false }` を入れます。`repos` の一覧は要りません。下のステップは、これが見られない場合のためのものです。プロジェクト自身のリポジトリは、その yokoten.json の `privacy.allow` に名前を並べることもできます。そこの項目が同じ文字列（大文字小文字は別）のとき、印は通ります。一部やより長い文字列は数えません。それはそのリポジトリでだけ、`check`、コミットフック、`gh` 投稿の番人によって通ります。ほかのすべてのリポジトリはまだそれを止めます。`doctor` は、プロジェクトが許すあなたの印の数を言い、どれかは決して言いません。

yokoten.json のないリポジトリは、それなしで同じことができます。公開の場で yokoten を名指ししてはいけないリポジトリも同じです。そこで `yokoten marks allow <mark> --here` を走らせます。許可はこのマシンの `~/.config/yokoten/private-marks-allow.json` に、そのリポジトリのためだけに、その `origin` リモート（ホストとパス）で保たれます。リポジトリには何も書きません。`origin` のないリポジトリはこの許可を持てず、代わりに `privacy.allow` を使えます。名前を変えたリモートは別のリポジトリなので、そこで印はまた止まります。いつものものと違うポートは名前の一部で、ローカルのパスはそれが指すフォルダです。`git@host:path` と `https://host/path` は、フォージが扱うとおり同じリポジトリを名指しします。

yokoten は、投稿や push がどこへ行くか確かめられないときは何も許さず、`doctor` が理由を言います。`origin` が唯一のリモートでない、gh が自分のリポジトリを持つ（`gh repo set-default`）、`remote.pushDefault` や `branch.*.pushRemote` が設定されている、`origin` の fetch と push のアドレスが git の `insteadOf` の書き換えで別のリポジトリを名指しする、のどれかです。二つの項目が一致するときもです。`gh` の投稿は、別のリポジトリへ行きうるとき、この許可も `privacy.allow` も受けません。`-R` か `--repo`、issue やプルリクエストの URL、`GH_REPO` か `GH_HOST`、そしてすべての `gh api` と `gh gist` です。投稿はその行の唯一のコマンドでもなければなりません。引用符の外では、文字、数字、空白、`_ . / : , = + @ % -` だけが素のものと数えます。`$`、`{`、`*`、`\`、`;`、`>` のようなほかの文字は許可を受けません。二重引用符の中では `$`、`` ` ``、`\` が許可を受けません。単一引用符は何でも持てます。一つのヒアドキュメントは、終わりの語が単一引用符の名前（`<<'EOF'` など）のときに構いません。その本文は何でも持てます。その前の同じリポジトリ内の `cd` 一つは構いません。行のほかのものは gh の投稿先を変えうるので、投稿はすべての印と照らされます。`doctor` は許可がどこから来るかを言います。このマシンか `privacy.allow` です。許せるのは印のファイルの印だけです。取り消すには、`yokoten marks allow --remove <mark> --here` を走らせます。

あなたのアカウントを名指ししなければならないファイルがあります。だから yokoten が印に足したフォージのログインは、CODEOWNERS のオーナー、`.github/` の `@` の言及、`package.json` やプラグインの manifest の作者かオーナーのフィールド、LICENSE の著作権の行では構いません。ほかのどこでも見つかります。あなた自身が書いた印はどこでも見つかります。

IP のチェックは IPv4 だけを覆い、`10.x` や `192.168.x` のような非公開の範囲も含みます。IPv6 はチェックしません。localhost と文書用の範囲（`192.0.2.0/24` とその二つの兄弟）は構いません。`Chrome/120.0.0.0` のようなブラウザーの版の文字列はアドレスではなく、`logo@2x.png` のような retina の画像の名前もそうです。`http://` のあとのアドレスや、`api/` のようなパスの中のアドレスはまだ捕まります。

同じチェックが秘密情報も捕まえます。GitHub、npm、Slack、Stripe、Google、OpenAI、Anthropic のトークン、AWS のアクセスキー ID、PEM の秘密鍵です。あなたの環境の秘密情報らしい変数の本当の値にも一致します。当たりはそれぞれ等級を言います。`sure` は失敗し、`likely` と `unknown` は警告します。当たりは秘密情報の種類を名指しし、秘密情報は決して言いません。消すだけでは足りません。git がそれを保つからです。取り替えてください。

誤った当たりには、その行のコメントを `yokoten-ignore secret: why it is safe` で始めます。`secret` の代わりに指摘のルール名を使ってください。または `.yokotenignore` に `secret: why it is safe` と書きます。無視した当たりは一覧に残り、理由のない無視は失敗します。

`sure` の秘密情報と非公開の印の当たりは、その行では無視できません。`.yokotenignore` だけがそれらを通し、そのファイルを変えられるのはリードだけです。プルリクエストでは、`yokoten check --pr` がプルリクエストの足す各無視を注意として示すので、レビュアーが見ます。

ツール呼び出しの番人は、エージェントが `gh` で投稿しようとするテキストに同じチェックを走らせます。直接でも `yokoten bot -- gh` を通してもです。

- `gh issue` の `create`、`comment`、`edit`、`close`。`gh pr` の `create`、`comment`、`edit`、`review`、`merge`、`close`。`gh release` の `create` と `edit`。
- `--title`、`--body`、`--notes`、`--subject`、close の `--comment` のテキスト。
- `--body-file`、`--notes-file`、`-F` が名指しするファイル。`cd` のあとです。番人はコマンドの前に走るので、同じコマンドが書くファイルはまだありません。読むのは一つの形だけです。コマンド全体が `cat > body.md <<'EOF' && gh … --body-file body.md` で、そのあとに本文と `EOF` がある形です。パスは素で両側で同じ、区切りは単一引用符の名前なので、シェルは本文を書いたまま保ちます。番人は本文と、あればすでにあるファイルをチェックします。行末に `\` のあるヒアドキュメントの語は拒否されます。ほかの方法では、ディスク上のファイルは、コマンドが素の一行のときだけ読みます。語を `;` か `&&` でつないだものです。引用符の外に `\`、`$`、バッククォート、`<`、`>`、`|`、単独の `&`、`(`、`)`、`[`、`{`、`}`、`#`、`*`、`?` がありません。`"…"` の中に `$`、バッククォート、`\`、`!` がありません。単独の `gh … --body-file - < body.md` も構いません。`~` の語は `cd` のフォルダかファイルのパスだけです。引用符の外の `~` 単独か、`~/` で始まるものです。`cd` のあと、`..` のあるパスは読みません。gh のそばの各コマンドは、ファイルを書かない次のどれかでなければなりません。
  - `true`、`:`、`echo`、`popd`。`-v` で始まる引数のない `printf`。`-v` のない `test` か `[`。
  - `-e`、`-u`、`+e`、`+u` のフラグ（単独でも、`-eu` のように結合しても）と、`-o pipefail` か `+o pipefail` を付けた `set`。引数なしの `set` は数えません。
  - フォルダ一つを付けた `cd` か `pushd`。
  - 素の代入。ただし `PATH`、`HOME`、`PS4` などシェルが使う名前へはできません。
  - `GH_REPO`、`GH_HOST`、`NODE_USE_ENV_PROXY`、`TZ=UTC` だけの `export`、またはコマンド自身の接頭辞。
  - `--web` か `-w` のない `gh pr|issue|repo|run view|list|checks`。
  - `git rev-parse`、`git config --get <name>`、`git remote get-url`。
  - これらのどれかを `yokoten bot --` を通して。
  そうでなければ、番人が見つけられないファイルや、コマンドが変えうるファイルはコマンドを止めます。ファイルを一つのコマンドで書き、次のコマンドでその完全なパスを使って投稿してください。
- stdin からの本文: ヒアドキュメント、`<<<` の here-string、`< file`。
- 書き込みの呼び出しでの `gh api` のフィールドと `--input`。POST、PATCH、PUT、または GraphQL の mutation です。検索や GraphQL の問い合わせのような読み取りは通ります。

当たりはコミットチェックと同じ直し方でコマンドを止めます。公開のアドレスは `privacy.allow` に入れます。番人はコマンドが走るときに組み立てられるテキストを見ません。`$(cat notes.md)`、変数、別のプログラムからのパイプです。読むのは 1 MB までのファイルで、それより大きいものは通します。読むのはコマンドで、あなたのシェルではありません。`cd` や `echo` を包む、シェルの設定の関数やエイリアスは見えません。

## エージェントが読むもの

上のチェックはあなたの詳細をリポジトリの外に保ちます。エージェントはコマンドの出力も読み、その出力は記録に入り、モデルへ行きます。取り消せません。だから yokoten は、いくつかのコマンドが走る前にあなたの詳細を隠します。

- **`yokoten redact`** は stdin のテキストを読み、仮の値にして書きます。秘密情報（`<secret>`）、個人のメールアドレス（`<email>`）、あなたの git の user.name と Linux と Windows のユーザー名（`<owner>`）、あなたのホームフォルダ（`~`）、非公開のリモートのホスト（`<host>`）、あなたの非公開の印を隠します。ドメインのような印は `<host>` になり、ほかの印は `<mark>` になります。印はチェックと同じように見つけます（上を見てください）。印のファイルがなくても、パターンと git が知るものを隠します。印のファイルを読めないとき、または一部を隠せないときは、その先の出力を一切書きません。stderr に一行でそう言い、終了コード 1 で終わります。
- **Claude Code では、番人が素の読み取りを絞り込みます。** これらのコマンドはアカウントの詳細を出力します。`git log`、`git show`、`git shortlog <revision>`、`git blame`、`git for-each-ref`（どの形式でも）、`git cat-file -p`、`git remote -v`、`get-url`、`show`、`git config --list` と `user.*` と `remote.*` の読み取り（`git config user.email` など）、`gh auth status`、`gh` を通した通信とユーザーのパスへの GET、`npm whoami`、`wrangler whoami` です。コマンド全体がこれらの一つで、周りに何もないとき、番人はそれを `set -o pipefail # yokoten-redact`、そのあと `( <command> ) 2>&1 | <node> <yokoten> redact` に変えます。終了コードはコマンドのままです。redact が動かないときは、出力をすべて隠し、stderr に一行だけ理由を出します。このときコマンドが成功していれば、終了コードは 1 です。`&&`、`;`、パイプ、リダイレクト、代入、`sudo` のような接頭辞、ファイルを書くオプションのあるコマンドは、そのままにします。
- **ほかのエージェントはコマンドをそのまま走らせます。** それらのフックはコマンドを変えられません。`doctor` とセッションの開始が一度そう言います。そこでそのようなコマンドを止めるには、`yokoten.json` に `"privacy": { "output": "stop" }` を設定します。すると番人はコマンドを止め、絞り込んだコマンドを走らせるために見せます。
- **git は源で隠します。** `install` は尋ねてから、git のグローバルの `mailmap.file` を `~/.config/yokoten/mailmap` に向けます。どのリポジトリの外です。すると `git log` と `git show` はあなたのメールを `owner` と出力します。端末がないときや「いいえ」のときは、`install` は git の設定を変えず、実行するコマンドを表示します。ファイルがあれば、`install` は足りない行だけを足します。あなた自身の `mailmap.file` を設定しているときは、`install` はそれを保ち、足す行を教えます。
- **印は自分で埋まります。** `install` と `doctor` は、このマシンが知るものを足します。あなたの git の名前（`user.name`。アドレス、`your name` のような仮の値、`test` のような共有の名前は除く）、あなたの git のメール（noreply のアドレスは除く）、`gh` が使うログイン、非公開のリモートのホストです。git の名前があなたのログインなら、ログインとして一度だけ足します。足すだけで、値を決して出力しません。ログインと違い、git の名前は LICENSE の行と作者のフィールドでも見つかります。noreply のアドレスと mailmap で本当の名前を隠せます。ファイルにどの種類でも印があれば、`private-marks` のチェックは ok です。印のないファイルだけが足りません。そのとき `doctor` は、見つけられない種類（住んでいる街やドメインなど）を任意の注意として勧めます。それらを足せるのはあなただけで、git が持たない本当の名前も同じです。
- **もっと制御する: `yokoten marks`。** 単独では、印を種類ごとに数え、値を決して出しません。`yokoten marks add` はあなた自身のものを一つ足します。ターミナルで入力し（表示されません）、またはパイプで渡します。コマンドラインの語には決してしません。シェルの履歴が保つからです。`yokoten marks remove` も同じように一つ外します。`yokoten marks off git-name`（または `git-email`、`forge-login`）は、`install` がその種類を足すのを止め、そのために足した印を消します。選択は `~/.config/yokoten/machine.json` に保たれます。既定に戻すには `yokoten marks on git-name` を走らせます。名前がまた足されます。あなた自身が足した印は決して触れません。

包んだコマンドには bash が要ります。Windows では、エージェントを Git Bash か WSL で走らせてください。PowerShell には `pipefail` がありません。

隠さないものを、はっきり言います。

- **何かを変える、または送るコマンド。** `git push`、`fetch`、`pull`、`clone`、`wrangler deploy`、`login` はそのまま走ります。push のエラーが非公開のホストを見せることがあります。書き換えると、プロンプトなしで走るワーカーが止まります。
- **エージェントが読むファイル。** `cat CODEOWNERS`、またはエージェント自身のファイルの読み取りは、ファイルをそのまま見せます。
- **環境。** `env` と `printenv` は絞り込まれません。あらゆる種類の秘密情報を出力します。エージェントのセッションで走らせないでください。
- **ブラウザーのページとスクリーンショット。** アカウントのページをテキストとして読まないでください。

フックはすべてのコマンドを知れません。出力があなたの詳細を見せるときは、インシデントを開き、そのコマンドに `ACCOUNT_PRINTERS`（`src/rules/guards.ts`）の行を与えてください。

## エージェントの環境が持つもの

あなたのシェルはトークンと鍵を持つことがあります。それらを見るエージェントは、それを出力し、それで push し、外へ送れます。だから yokoten には、すべての実行環境のために、エージェントのきれいな環境を用意する関数が一つあります（#613）。それはもう出荷されていて、結果を見せる `yokoten worker env` があります。

`yokoten desk` はこの環境でエージェントを始めます（[デスク](https://yokoten.app/ja/docs/guide/managing-agents-like-a-team.md#デスク)を見てください）。ほかの方法で始めたエージェントは、それを始めたセッションの環境全体を受け取ります。だからリードのセッションは、トークンのないシェルから始めてください。

関数が保つものと落とすもの:

- **保つ**: どのプログラムも必要とする名前。`PATH`、`HOME`、`LANG`、`LANGUAGE`、`LC_*`、`TERM`、`COLORTERM`、`TZ`、`TMPDIR`、`TEMP`、`TMP`、`USER`、`LOGNAME`、`SHELL`、そして `XDG_CONFIG_HOME`、`XDG_DATA_HOME`、`XDG_CACHE_HOME`、`XDG_STATE_HOME`、`XDG_RUNTIME_DIR` です。Windows では `SystemRoot`、`USERPROFILE`、`APPDATA`、`PATHEXT`、`ComSpec` なども保ちます。
- **番人をより厳しくする `YOKOTEN_*` の名前は保つ**: `YOKOTEN_ROLE`、`YOKOTEN_FIX_TASK`、`YOKOTEN_PRIVATE_MARKS`、そしていくつかの設定です。ボットの鍵とアプリ ID、`YOKOTEN_RELEASE_APPROVAL`、`YOKOTEN_LEAD_ONLY_OK` はあなたのシェルから決して通りません。リードが意図してそれらを与えます。
- **ほかのすべての名前は落とす**。名前に `TOKEN`、`SECRET`、`KEY`、`PASSWORD`、`AUTH`、`CREDENTIAL`、`PRIVATE` を含むものも落とします。例外は二つです。パスだけの `YOKOTEN_PRIVATE_MARKS` と、実行環境自身のログインの名前です。
- **鍵の形の値は落とす**: GitHub、GitLab、Hugging Face、AWS、Google、Slack、JWT、`sk-` の鍵、秘密鍵、パスワード入りの URL です。32 KiB より長い値も、チェックするには長すぎるとして落とします。
- **ベンダー自身のログイン**: 各実行環境のファイルが、そのベンダーのログインの変数を名指しします。Claude Code なら `ANTHROPIC_API_KEY` です。その実行環境のエージェントだけがそれを受け取ります。一般的な資格情報は決してログインと数えません。`GH_TOKEN`、`GITHUB_TOKEN`、AWS の鍵、Gemini CLI の `GOOGLE_API_KEY` と `GOOGLE_APPLICATION_CREDENTIALS` です。Vertex AI の設定は、リードが意図してそれらを渡す必要があります。

エージェントがあなたのシェルから何を受け取るかを見るには、`yokoten worker env` を走らせます。実行環境を足すと、そのログインの名前も数えます。`yokoten worker env claude-code` です。名前を一覧し、落とすものを数えます。値を決して見せません。
## タイムゾーン

コミットは、作られた時刻もあなたのタイムゾーンとともに記録し、タイムゾーンはあなたの住む場所を絞り込みます。だからコミットチェックは UTC を求めます。`init` はエージェントのセッションに `TZ=UTC` を設定し、あなた自身のコミットにはその方法を伝えます。

---

前の章: [エージェントをチームのように動かす](https://yokoten.app/ja/docs/guide/managing-agents-like-a-team.md)
次の章: [できないこと](https://yokoten.app/ja/docs/guide/what-it-doesnt-do.md)
