agentic-humanizer について
5段階のワークフローで文章を書き換えるエージェントスキルです。Slop or Not Pro による検出・読みやすさの確認を追加でき、複数の欧州言語、文体の再現、設定管理、ハーネス別の対話に対応します。
主な機能
- 015段階の文章書き換え
- 02言語・トーン・長さの指定
- 03オンデバイス検出と読みやすさの確認
- 04文章サンプルからの文体指紋抽出
- 05ハーネス検出とプロファイル管理
活用シーン
- 01目標のトーンに合わせた文章の修正
- 02指定した読解レベルへの調整
- 03保存済みの文体の再現
- 04英語文章の検出スコア確認
MCP 対応
Slop or Not Pro が MCP または CLI 経由で利用可能かを確認します。Slop or Not Pro Pro と併用すると、検出スコア、読みやすさの確認、Text Cleanup が加わります。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ numen-tech/ slopornot --skill agentic-humanizerインストール後、Claude Code で/agentic-humanizerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdexamples/sample-ai-text-de.mdsample-ai-text.mdharnesses/claude-code.mdcodex.mdcursor.mdgemini-cli.mdgeneric.mdopencode.mdreferences/detection-guidance.mdmultilingual.mdpatterns.mdper-iteration-strategies.mdprofile-resolution.mdslop-cli-setup.mdslop-mcp-setup.mdsupplemental-ai-tells.mdvoice-fingerprint.mdreferences/ai-tells/da.mdde.mdes.mdit.mdno.mdsv.md詳細
Agentic Humanizer
5 パスの AI ヒューマナイザーです。コアの書き換えワークフローは常に実行されます。Slop or Not Pro を使用すると、測定可能なオンデバイス AI 検出チェックが追加されます。
- Slop or Not なし: 書き換えワークフロー全体を実行します。
- Slop or Not Pro あり: オンデバイス AI 検出スコア、読みやすさ、Text Cleanup、クリーンアップ統計が追加されます。
対応言語:英語、スペイン語、ドイツ語、イタリア語、スウェーデン語、デンマーク語、ノルウェー語(Bokmal および Nynorsk)。AI 検出スコアは英語のみが対象です。それ以外の言語では、ネイティブの読みやすさ指標と言語ごとの特徴を使用します。references/multilingual.md を参照してください。
スラッシュコマンド: /agentic-humanizer [paste text]
インラインオーバーライド: /agentic-humanizer language=<code> variant=<spec> dialect=us|uk grade=N level=<band> tone=casual|professional|academic length=±10|exp|trim threshold=N max=N voice=/path/to/file.txt|off voice-skip skip-interview [paste]
language=<code> と variant=<spec> は、対象言語とバリアントを設定します(例:language=de variant=de-AT)。dialect=us|uk は従来の英語向けエイリアスです。dialect=us は language=en variant=en-US、dialect=uk は language=en variant=en-GB と同じです。grade=N は Flesch-Kincaid の目標値を設定します(英語のみ)。level=<band> は、任意の言語で読解レベルの区分(elementary|middle|high_school|college|graduate)を設定します。明示的に指定した language=/variant= は dialect= より優先されます。language= を variant= なしで設定すると、その言語のレジストリにあるデフォルトのバリアント(最初に記載されたバリアント、またはレジストリエントリがない未対応言語の場合は other:<code>)が使用されます。language= なしで variant=<tag> を設定すると、バリアントの BCP-47 プレフィックスから基本言語が推定されます(例:variant=de-AT → language=de)。プレフィックスが未対応の場合は、そのプレフィックスを言語としてそのまま使用し、インラインのバリアントを適用して、警告を表示します。対応するコードとバリアントについては、references/multilingual.md を参照してください。
このスキルの機能
- 実行中のホストハーネス(Claude Code、Codex、Cursor、Gemini CLI、 OpenCode、または汎用)を検出します。
- 書き換えを開始する前に、プロファイルと声の管理コマンドを処理します。
- インラインオーバーライド、保存済みプロファイル、または ハーネスのインタビューから書き換えの設定を解決します。
- 任意で文章サンプルを解決し、キャッシュされた文体フィンガープリントを抽出します。声のマッチングに Slop or Not は不要です。
- Slop or Not Pro に MCP または CLI 経由で接続できるか確認します。
- 5 パスのヒューマナイゼーションワークフローを実行します。
- コアモードでは、スコアを付けずに反復処理を記録します。
- Slop or Not Pro では、Text Cleanup、検出、読みやすさのチェックを実行します。
- 最終テキスト、ループの履歴、影響の大きい編集内容を返します。Slop によるクリーンアップが実行された場合は、Text Cleanup の概要も返します。
ステップ 1:ハーネスを検出する
ハーネス固有の質問ツールを確認して、実行中のハーネスを特定します。最初に一致したものを使用してください。
| ハーネス | 固有ツールが存在するか | このファイルを読む |
|---|---|---|
| Claude Code | AskUserQuestion | harnesses/claude-code.md |
| Codex CLI | tool/requestUserInput(または ask_user_question) | harnesses/codex.md |
| Cursor | AskQuestion | harnesses/cursor.md |
| Gemini CLI | ask_user(または同等の構造化質問ツール) | harnesses/gemini-cli.md |
| OpenCode | OpenCode 組み込みの question ツール、または AUQ MCP | harnesses/opencode.md |
| その他すべて(例:ChatGPT Skills) | 該当なし。プレーンテキストにフォールバック | harnesses/generic.md |
まだハーネスのファイルを読み込まないでください。ステップ 3 で使うために選択結果を保存してください。
ステップ 2:プロフィール管理コマンド
ユーザーは、次のサブコマンドで保存済みプロフィールを管理できます。
| コマンド | 操作 |
|---|---|
/agentic-humanizer show profile | ~/.agentic-humanizer/profile.json を出力します(または「プロフィールは保存されていません」と表示します)。 |
/agentic-humanizer reset | rm ~/.agentic-humanizer/profile.json を実行して確認します。 |
/agentic-humanizer set language=de variant=de-AT level=high_school tone=casual length=±10 | インラインパラメーターからプロフィールを書き込みます。インタビューは実行しません。認識されるキー:language、variant、dialect(英語の旧式の別名)、grade(英語のみ)、level、tone、length。任意のキーの組み合わせを指定できます。指定されていないキーは現在の値を維持し、プロフィールがない場合はデフォルト値を使用します。language を変更し、variant が明示されていない場合は、古い値を維持するのではなく、references/multilingual.md にあるその言語のデフォルト(最初に記載された variant、または未対応言語の場合は other:<code>)に variant をリセットし、保存されるペアの一貫性を保ちます(たとえば、英語のプロフィールに対して set language=de を実行すると、variant=en-US ではなく variant=de-DE が書き込まれます)。旧式の dialect= の変更で variant が明示されていない場合は、レジストリのデフォルトではなく、そのエイリアス固有の英語の variant に variant をリセットします。dialect=us は variant=en-US を、dialect=uk は variant=en-GB を書き込みます。language= を指定せずに variant=<tag> を指定した場合は、variant の BCP-47 プレフィックスから基本言語を推定し(たとえば set variant=de-AT → language=de)、保存済みの language を更新します。プレフィックスが未対応の場合は、そのプレフィックスをそのまま language として保持し、インラインの variant も維持したうえで、その言語には厳選されたサポートがないことを警告します。英語では、レベルのフィールドの一貫性を保ちます。level= は reading_level を設定し、バンドの中間値(elementary 4、middle 7、high_school 10、college 13、graduate 17)から target_grade を導出します。また、grade=N は target_grade=N を設定し、その学年のバンドに応じて reading_level を設定します。保存済みの language が英語以外になった場合は、target_grade: null を書き込みます(ループでは reading_level を読み取ります)。 |
/agentic-humanizer show voice | ~/.agentic-humanizer/voice-fingerprint.json があれば、サンプルパスとともに出力します。なければ、音声プロファイルが保存されていないことを伝えます。 |
/agentic-humanizer reset voice | ~/.agentic-humanizer/voice.txt と ~/.agentic-humanizer/voice-fingerprint.json を削除し、書き換え設定は削除せずにプロフィールから音声関連のフィールドをクリアします。 |
/agentic-humanizer set voice=/path/to/file.txt | プロフィールの voice_path を保存し、voice_skip をクリアします。以降の実行でそのパスを使用します。フィンガープリントは次の書き換え呼び出しまで抽出しません。 |
これらのサブコマンドを受け取った場合は、実行して終了します。Slop の確認やループの実行は行わないでください。
ステップ 3:書き換え設定の解決
まずソース言語を検出します。 プロフィールを読み込む前、またはインタビューを実行する前に、ホスト LLM を使って貼り付けられたテキストの言語を検出します(最初の約 300 語を使用します。バックエンドは不要なため、Core と Slop or Not モードの両方で動作します)。detected_language(de などの基本コード)と、表記から明確に判断できる場合は detected_variant_hint(de-DE など)を保存します。コードは references/multilingual.md に従って正規化します(Norwegian Bokmal は no ではなく nb になります)。テキストがまだ貼り付けられていない場合は、検出を保留します。テキストが約 20 語未満の場合や、複数の言語が混在している場合は、言語を曖昧として扱います。
プロフィールの解決順序:
- インライン上書き(
language=、variant=、dialect=、grade=、level=、tone=、length=)→ 指定された値を使用し、上書きされたキーについては プロファイルを参照しません。インラインのlanguage=/variant=も言語の検出結果を 上書きします。language=が指定され、variant=が指定されていない場合は、 プロファイルの variant ではなく、references/multilingual.mdにあるその言語の デフォルト(最初に記載されている variant)を設定し、ペアの整合性を保ちます (たとえば、language=deのみの場合はvariant=de-DEに解決されます。language=frのようにレジストリにエントリーがない未対応言語の場合はvariant=other:frに解決されます)。language=が指定されずvariant=<tag>が 指定された場合は、variant の BCP-47 プレフィックスから基本言語を推定します (たとえば、variant=de-AT→language=de、variant=es-419→language=es)。 プレフィックスが未対応の場合は、そのプレフィックスをそのまま言語として保持し、 インラインの variant もそのまま保持したうえで、その言語には選定済みのサポートが ないことを警告します。明示的なlanguage=も指定されていて、variant の基本言語と 矛盾する場合はlanguage=を優先し、実行時に警告します。英語の場合、level=が 設定され、grade=が設定されていないときは、解決されたバンドの中間値 (elementary 4、middle 7、high_school 10、college 13、graduate 17)からtarget_gradeを導出します。明示的なgrade=Nが常に優先されます。 インライン上書きはキーごとに適用します。インラインで指定されていないキーは 未設定のままにせず、以下のルール 2~4 に従って解決します。 skip-interviewフラグ → 保存済みのプロファイルがあれば使用します。プロファイルが ない場合は、検出されたソース言語を維持します。variant には、detected_variant_hintが解決された言語で有効な variant ならそれを使用し、それ以外の場合はreferences/multilingual.mdにある解決された言語のデフォルト variant を使用します。 それ以外はデフォルト値(High school、Professional、±10%)を使用します。検出結果が あいまいな場合、またはテキストが貼り付けられていない場合に限り、英語/en-US に フォールバックします。英語の場合は、High school バンドからtarget_grade10 を 導出します。~/.agentic-humanizer/profile.jsonに保存済みプロファイルがある場合:detected_languageがプロファイルのlanguageと一致する場合、または検出結果が あいまいな場合は、プロファイルを通知なしで使用し、インタビューを省略します。 ユーザーから依頼がない限り、プロファイルをすでに持つユーザーに再度質問しては なりません。detected_languageがプロファイルのlanguageと異なる場合(検出結果が明確な場合)、 呼び出しはプロファイルの言語では実行されません。インラインのlanguage=が あればそれを優先し、なければ 検出結果を優先します。インラインのvariant/tone/length/level/gradeは、キーごとに引き続きプロファイルを 上書きします。このケースの言語、variant、読解レベル、tone、length、および英語のtarget_gradeは、references/profile-resolution.mdの決定表に従って解決します。 プロンプトを表示せず、プロファイルを書き換えないでください。表に記載された 対応する注記を Step 7 に引き継ぎます。
- 保存済みプロファイルがない場合 → インライン上書き(ルール 1)ですでに設定されて いるものを除き、書き換えに必要なキーについてハーネスのインタビューを実行します。 一部のキーがインラインで設定されている場合は、残りのキーだけを質問します。 インラインで設定されたキーがない場合は、以下の完全なインタビューを実行します。
次の方法で保存済みプロファイルを読み取ります。
PROFILE=~/.agentic-humanizer/profile.json
[ -f "$PROFILE" ] && cat "$PROFILE"
ファイルが存在しない場合、または不正な JSON の場合は、プロファイルがないものとして
扱い、インタビューを実行します。解析可能な場合は、まず次の段落の後方互換性のための
正規化を適用します(レガシーな dialect/target_grade プロファイルを
language/variant/reading_level に対応付けます)。その後、完全性を判定します。
対応付け後も、解決済みの書き換え設定(language、variant、reading_level、tone、
length_policy)が不足している場合に限り、プロファイルがないものとして扱い、
インタビューを実行します。v3 のキーではなく dialect と target_grade を持つ
バージョン 1 およびバージョン 2 のプロファイルは、正規化後に完全なものとなり、
再度質問することなく読み込まれます。voice フィールドがない場合は、Step 4 のデフォルトを
使用します。解析可能なプロファイルに voice_skip があるものの、正規化後も書き換え用の
キーが不足している場合は、書き換えのインタビューではそのプロファイルを無視しますが、
Step 4 では voice_skip を引き続き尊重します。
後方互換性(古いプロファイルはすべて v3 として読み込みます)。 language フィールドがないプロファイルは英語です。language="en" を設定し、従来の dialect を variant にマッピングします(us → en-US、uk → en-GB、other:<spec> → variant: "other:<spec>")。
references/multilingual.md の区分表を使って、target_grade から reading_level を導出します(3~5 → elementary、6~8 → middle、9~11 → high_school、12~14 → college、15 以上 → graduate。target_grade がない場合の既定値は high_school)。まず既存のすべてのフィールドを読み込んでカスタム値を保持し、次回の書き込み時にファイル全体を v3 として書き換えます。target_grade が終了判定を左右するのは英語の場合のみです。それ以外の言語では、ループは reading_level を読み込み、レジストリを介してマッピングします。
インタビューを実施します。 ステップ 1 で選択したハーネスファイルを読み込み、そのインタビュープロトコルに従います。インタビューでは、書き換えに関する質問を 4 つ行います(検出結果が曖昧な場合は、言語を判別する別の手順も行います)。選択したハーネスでは、条件に該当する場合、口調に関する質問をまとめて提示できます。この回答はステップ 4 で扱います。以下の書き換え設定をここで取得します。
language(en、de、es、it、sv、da、nb、nnなどの基本コード、またはその他)とvariant(BCP-47 タグ、またはother:<spec>)。Q1 で検出された言語を確認し、その言語のバリアントをreferences/multilingual.mdから提示します。以下の「インタビュー Q1 と Q2」を参照してください。reading_levelは {elementary、middle、high_school、college、graduate} から選びます。英語の場合はtarget_gradeも設定します(区分の中間値:4、7、10、13、17)。それ以外の言語では、ループはレジストリを介してreading_levelを読み込みます。toneは {casual、professional、academic} から選びます。length_policyは {±10、exp、trim} から選びます。
インタビュー Q1 と Q2。 Q1 では言語とバリアントを確認します。言語が曖昧さなく検出された場合は、「検出された言語:。どのバリアントを使いますか?」と、その言語のバリアント(references/multilingual.md に記載)に加えて「その他(別の言語)」を提示します。言語が曖昧、または不明な場合は、まず言語を尋ね、その後にバリアントを尋ねます。選択肢数に上限のあるハーネス(Claude Code、Cursor、Gemini CLI、OpenCode)では、4 つまでという上限に収めるため、可能性の高い言語を 3 つと「その他(別の言語)」を提示します。一方、プレーンテキストおよび自由入力形式のハーネス(generic、Codex)では、すべての言語を提示できます。ユーザーが「その他(別の言語)」を選んだ場合は、次のターンで言語名またはコードを取得し、レジストリと照合します。サポートされていない場合は(厳選された特徴や可読性の情報がないため)警告します。Q2 では、5 段階の読解レベルを扱います。レジストリの区分表を使い、解決済みの言語の尺度に合わせた各区分の補足説明を提示します(たとえばスウェーデン語の「高校(LIX 約 40~50)」、英語の「高校(Grade 9~11)」)。選択肢数に上限のあるハーネスでは、4 つまでという上限に収めるため、College と Graduate を 1 つの「College または専門職向け」という選択肢にまとめます。そのため、これらのハーネスで Graduate を選ぶには、インラインで level=graduate または grade=N を指定します。generic と Codex では、5 段階すべてを提示します。ノルウェー語ニーノシュクとサポートされていない言語では、尺度の補足説明なしで各区分を提示します。Q1 は正規化した language と variant に、Q2 は reading_level(英語の場合は target_grade も)にマッピングします。
書き換えに関する回答の後、最後に はい/いいえで答える質問を 1 つ(同じハーネスの質問ツールを使います)尋ねます。
「次回から尋ねないよう、これを既定値として保存しますか?いつでも
/agentic-humanizer resetでリセットできます。」
はいの場合:
mkdir -p ~/.agentic-humanizer
cat > ~/.agentic-humanizer/profile.json <<EOF
{
"language": "<en|de|es|it|sv|da|nb|nn|other>",
"variant": "<en-US|en-GB|de-DE|de-AT|de-CH|es-ES|es-419|it-IT|sv|da|nb|nn|other:...>",
"reading_level": "<elementary|middle|high_school|college|graduate>",
"target_grade": <4|7|10|13|17 for en, else null>,
"tone": "<casual|professional|academic>",
"length_policy": "<±10|exp|trim>",
"voice_path": "~/.agentic-humanizer/voice.txt",
"voice_skip": false,
"voice_fingerprint_hash": null,
"saved_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"version": 3
}
EOF
target_grade は language が en の場合にのみ意味を持ちます。それ以外の言語では、ループが reading_level を読み込むため、null として書き込みます。英語の場合、インラインの level= 経由の指定も含め、target_grade は reading_level と一致させます(区分の中間値)。
続けてステップ 4 に進みます。今後の呼び出しでインライン指定がある場合、その呼び出しに限り保存済みプロファイルより優先されます。ファイルは上書きされません。
ステップ 4:文体サンプルを解決する
このステップを実行する前に、references/voice-fingerprint.mdを読んでください。デフォルトでは
voice_active=falseに設定してください。
音声サンプルの解決順序:
-
インラインの
voice=offまたはvoice-skip-> この呼び出しでは音声の照合をスキップします。 -
インラインの
voice=/path/to/file.txt-> この呼び出しに限り、そのサンプルを使用します。 パスが存在しない、または読み取りできない場合は、ユーザーに一度だけ警告してから、 インラインの指定がなかったものとしてルール3以降に進みます。 -
保存済みの
profile.jsonにvoice_pathがあり、そのファイルが存在する -> それを使用します。 -
デフォルトの
~/.agentic-humanizer/voice.txtが存在する -> それを使用します。 -
保存済みの
profile.jsonに"voice_skip": trueがある -> 通知せずスキップします。 -
それ以外 -> 選択したハーネスですでに取得した条件付きのQ5の回答を使用するか、ハーネスで質問をまとめていない場合は今質問します。
「ご自身の文章サンプルの文体を再現しますか?」
選択肢:
はい、いいえ、今後は尋ねない
Q5がいいえの場合、この呼び出しでは音声の照合をスキップします。Q5が今後は尋ねないの場合、書き換えの好みを作り上げずにvoice_skipを保存してから、音声の照合をスキップします。まず既存のプロファイルを読み込んでください。
- プロファイルがすでに存在する場合(ステップ3で保存した直後のものも含む)、現在の書き換えキー(
language、variant、reading_level、target_grade、tone、length_policy)を維持しつつ、"voice_skip": trueと"version": 3を指定して書き換えます。 - プロファイルが存在しない場合(ステップ3でユーザーが書き換えのデフォルト設定の保存を辞退した場合)、
"voice_skip": trueと"version": 3のみを含む音声専用レコードを書き込み、書き換えキーは含めません。v3のデフォルト値で補わないでください。ステップ3では、このようなプロファイルは書き換えに関する質問票への回答が不完全と見なされます。そのため、次回も言語、口調、読みやすさのレベルに関する質問を行いますが、ここではvoice_skipを適用します。
Q5がはいの場合、次の文をそのまま伝えてください。
「次のメッセージとして、200語以上の文章を貼り付けてください。」
次のユーザーの発言をサンプルとして取得します。書き込む前に検証してください。
- 50語未満:受け付けず、サンプルが短すぎると伝え、
voice_active=falseのまま、プロファイルを変更せずに続行します。 - 50~199語:200語以上のほうが適切だと伝え、短いサンプルのまま続行するか、より長いものを貼り付けるか尋ねます。
- 200語以上:
~/.agentic-humanizer/voice.txtに書き込みます。
受け付けたサンプルはすべて、フィンガープリントの抽出に最初の3000語だけを使用します。サンプル内容の先頭50 KBをハッシュ化します。
VOICE_SAMPLE="<resolved-sample-path>"
head -c 51200 "$VOICE_SAMPLE" | shasum -a 256
保存する値の先頭にsha256:を付けます。
フィンガープリントのキャッシュ:
キャッシュは~/.agentic-humanizer/voice-fingerprint.jsonにあります。references/voice-fingerprint.mdのキャッシュ無効化に関するすべてのルールに照らして検証してください(ファイルが存在すること、version: 1であること、sample_hashが一致すること、必須フィールドがすべて入力されていること)。キャッシュが有効な場合は、通知せずに使用し、voice_active=trueに設定します。無効化条件に該当する場合は、キャッシュミスとして処理し、抽出を実行します。
キャッシュミスの場合は、references/voice-fingerprint.mdの抽出プロンプトをホストのLLMに対して実行します。JSONフィンガープリントを表示して、次のように尋ねます。
「問題ありませんか?」
選択肢:はい、編集、再抽出
-
はい:承認されたJSONを~/.agentic-humanizer/voice-fingerprint.jsonに書き込んでから、voice_pathが解決済みのサンプルを指し、voice_skipがfalse、voice_fingerprint_hashがサンプルのハッシュと一致し、versionが3となるように、~/.agentic-humanizer/profile.jsonを書き換えます。ステップ3と同じheredocパターンを使い、音声関連フィールドのみを置き換え、書き換えの好み(language、variant、reading_level、target_grade、tone、length_policy)は維持してください。mkdir -p ~/.agentic-humanizer cat > ~/.agentic-humanizer/profile.json <<EOF { "language": "<keep current>", "variant": "<keep current>", "reading_level": "<keep current>", "target_grade": <keep current>, "tone": "<keep current>", "length_policy": "<keep current>", "voice_path": "<resolved-sample-path>", "voice_skip": false, "voice_fingerprint_hash": "sha256:<current-sample-hash>", "saved_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)", "version": 3 } EOFその後、
voice_active=trueに設定します。 -
編集:ユーザーがインラインでJSONを修正できるようにします。保存する前に、references/voice-fingerprint.mdの必須フィールド一覧に照らして検証してください。編集内容から必須フィールドが欠けている場合は、保存を拒否し、再抽出を提案します。 -
再抽出:変更したい内容を尋ねてから、そのヒントを使って抽出を再実行します。
構造化質問ツールを備えていないハーネス(genericフォールバック)では、承認確認の代わりに表示して続行します。harnesses/generic.mdのフィンガープリント承認を参照してください。
インラインの voice=/path/to/file.txt は、デフォルトのサンプルや保存済みのプロファイルパスを上書きしません。そのサンプルのハッシュに対応する共有フィンガープリントキャッシュを更新する場合があります。
抽出に失敗した場合、サンプルがバイナリ形式または読み取り不能な場合、あるいは抽出プロンプトに利用できるホスト LLM がない場合は、voice_active=false に設定し、Step 7 用の抽出失敗フッターフラグを追加して、ボイスマッチングを行わずに続行します。
Step 5: Slop or Not Pro を確認する
デフォルトでは slop_mode="llm-only" および slop_backend=null に設定します。Slop の確認で選択されるのは強化パスのみであり、ヒューマナイザーを実行するかどうかは決まりません。
実際の detect_text フィクスチャ呼び出しを実行し、利用可能であることと Pro ティアであることの両方を確認します。slop status は非 Pro でも成功します。Pro によるゲートがあるのは detect_text のみです。
両方のパスで次のフィクスチャを使用します。
In today's digital environment, organizations often adopt new software because it promises efficiency, but the real value depends on whether people can trust it. A useful tool should explain what it does, respect the user's context, and avoid turning simple decisions into complicated workflows. Clear documentation helps teams evaluate those tradeoffs before they commit time or money.
MCP パス(最初に試す):
フィクスチャと include_readability: true を指定して mcp__SlopOrNot__detect_text を呼び出します。ツール呼び出しが成功し、解析したレスポンスに数値の score または ai_probability フィールドがある場合は、slop_mode="slop-or-not-pro" および slop_backend="mcp" に設定します。値がすでに 1 を超えていない限り、score と ai_probability の値は 0~1 の小数として扱います。読みやすさについては、readability.scores[] のうち kind が fleschKincaidGradeLevel の項目から Flesch-Kincaid グレードを読み取ります。
CLI パス(2 番目に試す):
アプリバンドルのバイナリを使って Bash 経由で実行します。
cat <<'EOF' | "/Applications/Slop Or Not.app/Contents/MacOS/slop" text --json
In today's digital environment, organizations often adopt new software because it promises efficiency, but the real value depends on whether people can trust it. A useful tool should explain what it does, respect the user's context, and avoid turning simple decisions into complicated workflows. Clear documentation helps teams evaluate those tradeoffs before they commit time or money.
EOF
終了コードが 0 で、かつ標準出力を JSON として解析でき、次のいずれかの数値スコアパスがある場合は、slop_mode="slop-or-not-pro" および slop_backend="cli" に設定します。
detection.result._0detection.resultFewSentences._0ai_probability
CLI の読みやすさについては、readability.scores[] のうち kind が fleschKincaidGradeLevel の項目からグレードを読み取ります。検出スコア(detection.result._0)は 0~1 の小数です。値が 1 を超える場合を除き、パーセンテージにするには 100 を掛けます。読みやすさのグレードはパーセンテージではありません。
上記の確認用フィクスチャは英語のため、読みやすさのブロックは常に kind: fleschKincaidGradeLevel を返します。この呼び出しで確認できるのは Pro アクセスのみです。返された読みやすさの値は破棄してください。元の言語での読みやすさは、Step 6 で実際のソーステキストを使って別途測定します。その際に返される kind はソース言語によって異なります(references/multilingual.md を参照)。
どちらのパスも利用できない場合は、slop_mode="llm-only" のまま Step 6 に進みます。インタビュー、ボイスマッチング、または書き換えループを省略しないでください。
Step 6: ループを実行する
Step 3 で解決した言語 L を使用します。この設定には、優先順位に従って、インラインの language=、variant= のみを指定したオーバーライドから推定される基本言語、検出して確認した言語、および保存済みのプロファイルがすでに反映されています。L が英語でない場合は、references/multilingual.md(レジストリ:読みやすさの公式、バンドのマッピング、コードの正規化)を読みます。references/per-iteration-strategies.md(イテレーションごとのクックブック)を読みます。次に、以下から L の言語ブランチに対応するテルカタログを読み込みます。言語ブランチは 5 イテレーションのスケジュールと組み合わせて使用するものであり、スケジュールに置き換わるものではありません。
カバレッジを維持してください。 削除するのではなく書き換え、ソースに含まれるすべての事実とセクションを保ち、核となる意味を維持してください。AI らしさの特徴を取り除くことは、内容を削ることを意味しません。length_policy=trim の場合に削れるのは、冗長な表現、埋め草、繰り返し述べられた要点のみです。独自の事実やセクション全体を削除してはいけません。事実を削るのではなく、その表現を短くしてください。長さの変更は、解決済みの length_policy に従う場合に限ります。黙って内容を省略してはいけません。
言語分岐:読み込みと終了
L が en(英語)の場合。 references/patterns.md(正規の 33 パターン書き換え語彙)、references/supplemental-ai-tells.md、および references/detection-guidance.md(誤検出を防ぐガイド:フラグを立てないものと、維持すべき人間らしい文章のシグナル)を読み込みます。検出器の全工程を使用します。kind が fleschKincaidGradeLevel の scores[] から Flesch-Kincaid の学年を読み取ります。ここで target_grade が null または未設定の場合(たとえば、部分的なインライン上書きによって英語以外の保存済みプロファイルから引き継がれた場合)、終了判定の前に、解決済みの reading_level の区分中間値(elementary 4、middle 7、high_school 10、college 13、graduate 17)から導出します。明示的なインラインの grade= が常に優先されます。以下の「Slop or Not Pro の終了」に従って終了します。
L が es、de、it、sv、da、または nb(対応している英語以外の言語)の場合。 references/patterns.md(英語の語彙)は読み込まないでください。references/supplemental-ai-tells.md と、言語ごとの tell ファイル references/ai-tells/<L>.md(ノルウェー語 Bokmål の場合は references/ai-tells/no.md の Bokmål セクション)を読み込みます。すべての Slop or Not 呼び出しに、正規化された language_code を渡します。scores[] が返す kind のスコアを読み取り、その kind でラベル付けして、references/multilingual.md を使って値を区分に対応付けます。AI スコアは n/a です。英語以外の入力では detect_text が kind: "not_english"、score: null を返すため、読みやすさの収束判定には呼び出さないでください。Slop or Not Pro で読みやすさを判定するには、analyze_readability を 1 回だけ呼び出します。detect_text も併せて呼び出してはいけません。読みやすさの区分への該当(レジストリに記載された尺度ごとの意味に従う)または MAX_ITER 到達時に終了します。AI の閾値判定はありません。
L が nn(ノルウェー語 Nynorsk)の場合。 references/patterns.md は読み込まないでください。references/supplemental-ai-tells.md と references/ai-tells/no.md の Nynorsk セクションを読み込みます。読みやすさの判定には対応していません(アプリが unsupported_language を返します)。そのため、analyze_readability はスキップします。AI スコアは n/a です。MAX_ITER のすべての反復を実行し、品質に基づいて最終反復を選択します(Core モードと同じです)。ユーザーに「このアプリのバージョンでは、ノルウェー語 Nynorsk の読みやすさスコアリングを利用できません。」と警告します。
L が未対応の言語の場合。 references/patterns.md は読み込まないでください。references/supplemental-ai-tells.md のみを読み込みます。AI スコアは n/a です。detect_text は呼び出さないでください。正規化された language_code を指定して analyze_readability を呼び出します。scores[] が既知の kind を返した場合、その値は参考情報としてのみ記録し、終了判定には決して使用しません。scores[] が空の場合、読みやすさの判定は利用できないものとして扱います。MAX_ITER のすべての反復を実行し、品質に基づいて最終反復を選択します(Core モードと同じです)。references/multilingual.md の未対応言語ポリシーに従います。
voice_active=true の場合、反復 2 と反復 5 では references/per-iteration-strategies.md の仕様に従い、キャッシュ済みのフィンガープリントを使用します。その他の反復では、ボイスフィンガープリントを使用しません。
定数(Slop or Not Pro が利用可能な場合はインラインパラメーターで上書き可能):
AI_THRESHOLD = 40(上書き:threshold=N)MAX_ITER = 5(上書き:max=N)- 学年の許容差:±1
Slop or Not Pro のセットアップ
slop_mode="slop-or-not-pro" の場合、反復 0 の前にソースに対して Text Cleanup を実行します。次を保存します。
source_cleaned_textsource_cleanup_stats
反復 0 のベースラインとして source_cleaned_text を使用します。未加工のソースではなく、クリーンアップ済みのソースをスコアリングして分析します。
Core のセットアップ
slop_mode="llm-only" の場合、反復 0 には元のソースを使用します。detect_text、analyze_readability、または clean_text は呼び出さないでください。
クリーンアップ統計の解析
MCP の clean_text では、次の値を読み取る前に content[0].text を JSON としてデコードします。
cleaned_textremoved_invisiblespunctuation_replacementshomoglyphs_replacedbritish_substitutions
CLI のクリーンアップでは、選択したテキストをアプリバンドルのバイナリにパイプします。
cat <<'TEXT_TO_CLEAN' | "/Applications/Slop Or Not.app/Contents/MacOS/slop" cleanup --json
<selected source or final text>
TEXT_TO_CLEAN
次に、以下を読み取ります。
cleanedTextinvisibleCounts[].countの合計punctuationCounts[].countの合計homoglyphCounts[].countの合計britishMappings.lengthの数
これらを次の内部形式に正規化します。
{
"invisibles": 0,
"punctuation": 0,
"homoglyphs": 0,
"dialect_substitutions": 0
}
Slop または Not Pro での終了
英語(L が en): AI スコアが AI_THRESHOLD 以下で、読みやすさレベルのグレードテストに合格した場合、または MAX_ITER に達した場合に終了します。グレードテストは、Graduate の目標値の設定方法によって異なります。小学校から大学までの場合、テストは常に |grade - target_grade| <= 1 です。Graduate の範囲では、Graduate が範囲として選択された場合(level=graduate またはインタビュー経由で、target_grade が 17 として導出された場合)、グレードテストを範囲への所属条件 grade >= 15(FK の下限)に置き換えます。これにより、大学レベルのグレードである 14 が Graduate の目標を満たすことはありません。明示的なインライン grade=N が指定された場合(英語のみ)は、導出された範囲にかかわらず、対称的な許容範囲 |grade - target_grade| <= 1 を維持し、明示された目標を尊重します。この条件分岐が適用されるのは英語の FK のみです。ドイツ語の Wiener では、level=graduate は常に範囲への所属条件を使用します(数値グレードの明示的な指定はありません)。収束しない場合は、最適な反復結果を返します。つまり、グレードテストを満たすもののうちスコアが最も低い結果を返し、満たすものがない場合は全体で最もスコアが低い結果を返します。スコアを下げるためにソースの事実やセクションを削除した反復結果を選択しないでください。最終結果の選択には、上記の Preserve カバレッジルールを適用します。
サポート対象の英語以外の言語(L が {es, de, it, sv, da, nb}): AI のしきい値はありません(AI スコアは n/a です)。L の数式による読みやすさスコアが目標範囲に入った場合(グレード尺度では |score - band_midpoint| <= 1。ただし、上限のない Graduate の範囲では範囲への所属条件を使用するため、大学レベルのスコアでは Graduate の目標を満たせません。容易さの尺度と LIX では範囲への所属条件を使用します。references/multilingual.md を参照)、または MAX_ITER に達した場合に終了します。収束しない場合は、目標範囲に最も近い反復結果を返します。
ニーノシュク(L が nn): tells のみで、読みやすさスコアも AI スコアもありません。MAX_ITER 回すべての反復を実行し、Core モードと同様に品質に基づいて選択します。
サポート対象外の言語(L がその他): tells のみで、AI スコアはありません。MAX_ITER 回すべての反復を実行し、Core モードと同様に品質に基づいて選択します。analyze_readability が既知のスコアを返した場合は参考情報としてのみ記録します。その参考スコアに基づいて反復を終了したり、最終結果を選択したりしないでください。
最終反復結果を選択した後、選択したテキストに Text Cleanup を実行します。final_cleanup_stats を保存し、クリーンアップ済みのテキストを最終出力として使用します。その後、L に基づく最終スコアリングを実行し、ループ内の言語別ルールに従います。英語では、最終的な detect_text と analyze_readability を実行します。サポート対象の英語以外の言語(es、de、it、sv、da、nb)では、最終的な analyze_readability のみを実行します(detect_text はスコアが null の not_english を返すため、スキップします)。ニーノシュクでは両方をスキップします。サポート対象外の言語では、最終的な analyze_readability のみを実行し、既知のスコアは参考情報として記録します(AI スコアは n/a です)。
Core モードでの完了
ソースが空、または使用できない場合を除き、5つすべての書き換え戦略をそれぞれ1回ずつ実行します。
すべてのイテレーションで、AI スコアと読みやすさは null として記録します。最終イテレーションは、書き換えの品質に基づいて選択します。意味と、ソースに含まれる事実およびセクションを網羅した内容を維持し、指定された読み手のレベル、トーン、長さを守り、L の分岐で読み込んだ兆候ファイルにある、最も顕著な AI らしさの兆候を取り除きます(英語の場合は references/patterns.md と references/supplemental-ai-tells.md、対応している英語以外の言語の場合は references/supplemental-ai-tells.md と references/ai-tells/<L>.md を使用します。ノルウェー語のブークモールとニーノシュクはいずれも references/ai-tells/no.md を使用します。未対応の言語の場合は、言語ごとの兆候ファイルがないため、references/supplemental-ai-tells.md のみを使用します)。
実行中の Pro ゲート
イテレーション >= 1 で、detect_text、analyze_readability、または clean_text の呼び出しが isError: true(MCP)またはゼロ以外の終了コード(CLI)を返した場合は、残りのイテレーションを Core モードで実行します。詳細は references/per-iteration-strategies.md の「実行中の Pro ゲートのフォールバック」を参照してください。
ステップ 7:出力
次の標準ブロックを出力します。例は英語です。「Language」行と可読性の列は、確定した言語に応じて変わります(ブロック下のルールを参照)。
## Humanized text
<final text>
## Language
English (en-US). Readability: Flesch-Kincaid grade.
## Loop history
| Iter | AI score | Readability | Strategy |
|---|---:|---:|---|
| 0 | 92% | 11.4 (College) | baseline |
| 1 | 71% | 10.8 (High school) | pattern surgery |
| 2 | 48% | 10.4 (High school) | variant + tone |
| 3 | 27% | 9.7 (High school) | grade gap |
Converged at iter 3 (<=40% AI, grade target 9 to 11).
## Text Cleanup summary
| Stage | Invisibles | Punctuation | Homoglyphs | Dialect substitutions |
|---|---:|---:|---:|---:|
| Source cleanup | 1 | 2 | 0 | 0 |
| Final cleanup | 0 | 1 | 0 | 0 |
## Highest-impact edits
- <bullet 1>
- <bullet 2>
- <bullet 3 (optional)>
Language 行。 確定した言語とバリアントに加え、references/multilingual.md に記載された可読性の計算式の表示名を必ず示します。例:「German (de-DE). Readability: Wiener Sachtextformel.」。ノルウェー語ニーノシュク(nn)の場合、可読性は利用不可として表示します。例:「Norwegian Nynorsk (nn). Readability: not available.」。未対応の言語の場合、analyze_readability が既知の種類を返した場合は可読性を参考値として表示します。例:「French (fr-CA). Readability: advisory Flesch-Szigriszt.」。それ以外は利用不可として表示します。
検出結果によって保存済みのプロフィール言語が上書きされた場合は、その旨を示して、次の例のように注記を追加します:「German (de-DE, detected; saved profile language is English). Readability: Wiener Sachtextformel.」。その後に次を続けます。
> _Ran in German because the text was detected as German; your saved profile language is English. Override with `language=` to change._
インラインの language= またはバリアントから推定された言語によって保存済みのプロフィール言語が上書きされた場合は、検出結果ではなく、その情報源を示します。たとえば次のように、references/profile-resolution.md に記載された文言を使用します。
> _Ran in French because `language=fr` was set for this call; your saved profile language is English._
可読性の列。 計算式の名前は「Language」行に一度だけ記載します(references/multilingual.md に記載された表示名を使用します)。ループ履歴の列には、値と括弧内の評価帯だけを表示します。例:「10.6 (High school)」。未対応言語の可読性が参考値の場合は、目標評価帯がないため、値と「(advisory)」だけを表示します。
AI スコアの列(英語以外)。 1 行目には「n/a (detector is English-only)」、それ以降には「n/a」を表示します。Core モードでは、すべての行に「n/a」を表示します。
収束行(可読性を利用できる英語以外の言語)。 AI のしきい値ではなく、評価帯を参照します。例:「Converged at iter 3 (readability in target band: High school).」。ニーノシュク、または可読性スコアの参考値がない未対応言語の場合は、「Completed MAX_ITER iterations (no readability available for this language; selected by quality).」を使用します。可読性スコアの参考値がある未対応言語の場合は、「Completed MAX_ITER iterations (readability advisory only for this language; selected by quality).」を使用します。
実際に Slop または Not Text Cleanup が実行された場合にのみ、Text Cleanup summary を表示します。ユーザー向けの出力にバックエンド名を表示しないでください。
すべてのクリーンアップ件数がゼロの場合は、表を次の内容に置き換えます。
## Text Cleanup summary
Slop or Not found no hidden characters, punctuation artifacts, homoglyphs, or dialect substitutions to clean.
Slop または Not Pro が収束しなかった場合(英語)は、収束行を次の内容に置き換えます。
Did not converge below threshold in MAX_ITER iterations. Best result shown above
(iter N at S%). Re-run with `threshold=40 max=8` for a more aggressive loop,
or `tone=casual` if professional tone is constraining the rewrite.
英語以外の言語で収束しなかった場合は、収束行を次の内容に置き換えます。
Did not reach the target band in MAX_ITER iterations. Closest result shown above (iter N, <formula>: X.X). Re-run with a different `level=` to widen the target.
Slop または Not Pro を利用できない場合は、スコアと評価を n/a として表示し、履歴表の後に次の注記を追加します。
> _Ran without Slop or Not Pro. Add Slop or Not Pro for on-device AI detector scoring, readability checks, Text Cleanup, and cleanup stats: <https://slopornot.ai/download>_
処理途中で Core モードにフォールバックした反復では、スコアと評価を n/a として表示し、次の注記を追加します。
> _Iterations N-M ran without on-device scoring. Local stats are unavailable for those iterations._
声のマッチングが有効だった場合は、次の注記をフッターに追加します。
> _Voice matched from <path> (fingerprint cached <date>)._
ステップ 4 で声の抽出に失敗した場合は、代わりに次の注記をフッターに追加します。
> _Voice extraction failed; ran without voice match. Re-run with `/agentic-humanizer reset voice` to retry._
ポインターファイル
harnesses/claude-code.md·harnesses/codex.md·harnesses/cursor.md·harnesses/gemini-cli.md·harnesses/opencode.md·harnesses/generic.mdreferences/patterns.md(AI によく見られる特徴の標準的な 33 項目。英語のみ)references/detection-guidance.md(英語のみの誤検出防止ガイド:検出対象にすべきでないもの、人間の文章に見られる特徴の保持方法)references/supplemental-ai-tells.md(言語に依存しない AI によく見られる補足的な特徴)references/multilingual.md(多言語の読みやすさに関するレジストリ)references/profile-resolution.md(ステップ 3 の、保存済みプロファイルと言語検出結果を照合する判断表)references/ai-tells/<code>.md(言語ごとの特徴:es、de、it、sv、da、no)references/per-iteration-strategies.md(ループのレシピ集)references/voice-fingerprint.md(文体サンプルの抽出とループへの注入に関する契約)references/slop-cli-setup.md·references/slop-mcp-setup.md(インストールガイド。デバイス上での AI 検出スコアリングの設定について尋ねられた場合にユーザーに提示)