slop-chop について
slop-chopは、選択したプロファイルに定義された文章パターンを検出・除去するコマンドラインツールです。決定的なルールだけで処理でき、文単位の変更にはモデルによる書き換えも選べます。
主な機能
- 01決定的なテキスト修正ルール
- 02単語とパターンのカスタム設定
- 03検査・修正・スコア機能
- 04Markdownを考慮した処理
- 05モデルによる任意の書き換え
活用シーン
- 01公開前の文章の調整
- 02CIで文章パターンを検査
- 03ソースファイルのコメントを確認
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
slop-chop
AI の文章には痕跡が残ります。
冗長な文章を削ぎ落としましょう。テキストを貼り付ければ、人が書いたような文章が返ってきます。
インストールせずに試せます。slop-chop.com では、同じ エンジンをブラウザー上で実行します。
AI の文章にはパターンがあります。エムダッシュを多用し、2文に1回はセミコロンを入れ、
comprehensive や leverage のような単語を使い、「In summary」や
「Giving it to you honestly」のような書き出しで前置きをします。
slop-chop は、こうしたパターンを一度の処理で取り除きます。独自の削除リストを 渡すこともできるので、チャットボットではなく、あなたらしい文章に仕上がります。
その理由
これを手作業で整えるのは面倒です。モデルに「エムダッシュを使うのをやめて」と 頼んでも、忘れてしまうまでの3文ほどしか効果がありません。slop-chop は毎回同じ クリーンアップルールを適用します。
仕組み
処理は2段階あり、どちらか一方だけを実行することもできます。
1つ目はルールによる処理です。高速で決定論的です。文字を置換し、削除対象として 指定した単語を取り除き、定型句や単語を書き換え、独自のパターンを適用し、スペルを 1つの方言に統一して、句読点を整えます。モデルもコストも不要で、実行のたびに同じ 結果が得られます。Markdown を認識するため、フェンス付きコードブロックやインラインの バッククォートで囲まれた部分は変更されません。
2つ目は任意の書き換え処理です。ルールでは対処できない箇所をモデルに渡します。 たとえば、セミコロンが不要になるよう文を書き直したり、選んだ文体に近づけたりできます。
インストール
Homebrew:
brew install dcadolph/tap/slop-chop
Go を使用する場合:
go install github.com/dcadolph/slop-chop@latest
または、クローンして Makefile を使用します:
git clone [email protected]:dcadolph/slop-chop.git
cd slop-chop
make install # build and install into $(go env GOPATH)/bin, version stamped
make uninstall # remove it again
ターゲットを指定せずに make を実行すると、一覧(build、test、cover、lint、fmt、tidy、clean)が表示されます。
効果はありますか?
測定結果は3つあり、すべてこのリポジトリから再現できます。docs/BENCHMARK.md に手法と注意点を記載しています。
人間が書いた文章には、ほとんど手を加えません。7つの言語エコシステムから集めた
オープンソースの README 886件(その多くは2021年以降に更新されていないプロジェクト)を
評価したところ、文章が読みやすさを失う基準に達するものは7件です。これは0.8%で、
GitHub Action が既定で失敗と判定する基準です。slop-chop check はさらに厳しく、
重みのある特徴が1つでもあればファイルを失敗と判定します。同じ README の41.5%に、
そのような特徴が少なくとも1つ含まれています。
単語リストでは、類義語辞典にかないません。slop-chop attack は文章を改善せずに
ルールを回避するようテキストを置換しますが、74個の単語に関する特徴のうち33個は
検出をすり抜けます。一方、90個の構造的な特徴で検出をすり抜けるのは1個だけです。
そのため、文の形状はスコアで2倍の重みを持ちます。この数値はルールではなく、攻撃側の
限界を示しています。置換だけでは文を作り直せないため、文の形状には届きません。
書き換えを指示されたモデルに対して、これらのルールがどの程度有効かは測定されていません。
結論を出すためのテストは、まだ実施されていません。人間の読者の評価と同じように スコアが文章を順位付けするかどうかは、まだ誰も確認していません。評価プロトコルと ハーネスはevaldata/にあります。テストが実施されるまでは、主張は 限定的なものにとどまります。同じ入力には同じ出力が返り、ルールが認識するパターンは 毎回検出されます。
使用方法
# Print the cleaned text to stdout. Your file is not changed.
slop-chop fix notes.md
# Clean the file in place, like gofmt -w.
slop-chop fix -w notes.md
# Pipe text through it
echo "In summary, a robust—and seamless—result." | slop-chop fix
# Flag slop without changing anything (exits non-zero if a finding carries score weight)
slop-chop check notes.md
# Check or fix several files at once
slop-chop check docs/intro.md docs/guide.md README.md
slop-chop fix -w docs/intro.md docs/guide.md
# Enforce a spelling variant: flag or fix the other dialect
slop-chop check --dialect american notes.md
slop-chop fix --dialect british notes.md
# Overlay a built-in pack, like corporate phrasing to plain English
slop-chop fix --preset plain notes.md
# Use your own profile
slop-chop fix --profile myprofile.json notes.md
# Get findings as JSON for other tools to read
slop-chop check --json notes.md
slop-chop check --json --pretty notes.md
# Deeper clean: rules first, then a model rewrite (needs ANTHROPIC_API_KEY)
slop-chop fix --rewrite notes.md
slop-chop fix --rewrite --verify notes.md
check --json は、{"findings": [...]} オブジェクトを標準出力に出力します。fix --json は、
{"cleaned": "...", "findings": [...], "remaining": [...], "score": {...}, "scoreAfter": {...}} を返します。
各検出結果には、ルール、一致したテキスト、推奨される置換内容、行番号と列番号が含まれます。置換内容がある検出結果は書き換えられ、ないものはフラグが付けられただけです。
remaining は、クリーニング済みテキストに対して check が報告する内容、つまりルールでは書き換えられない箇所です。--json を指定しない場合、fix は書き換えた内容、ユーザーに残した内容、スコアの変化を示す一行を標準エラー出力に表示します。
モード
checkは検出した内容にフラグを付け、スコアに重みがある検出結果がある場合はゼロ以外の終了コードで終了します。重みのないクリーニング項目は、失敗扱いにせず一覧表示します。いずれかの検出結果があれば失敗させるには、--strictを指定します。CI ではこのオプションを外してください。--whyを追加すると、各検出結果に、何が該当し、どう処理されるかを平易な言葉で説明する行が付きます。これは、ウェブアプリでタップしたときに表示される説明と同じです。fixはクリーニング済みテキストを標準出力に書き込み、ファイルには手を加えません。ファイルを直接変更するには、-wを指定します。scoreは、テキストにプロファイルで指定されたパターンがどの程度密集しているかを 0 から 100 で測定します。 これはリンターの結果であり、誰がそのテキストを書いたかを示す判定ではありません。また、そのような判定に使うことはできません。同じパターンは、人が意図的に書いた文章にも現れるためです。25 未満は問題なし、25 から 54 は混在、55 以上は特徴が濃い状態です。これはウェブアプリに表示されるものと同じ区分です。score --by-paragraphは各段落を個別に採点します。これにより、人間が書いた千語の中に生成された段落が二つ埋もれている文書でも、該当箇所が分かります。さらに--maxを指定すると、全体のスコアではなく、最も高い段落のスコアを基準に判定します。
ソースコードは個別に処理されます。.go、.py、.ts などのコードファイルでは、check と score はコメントのみを読み取ります。Python ファイルでは、これに docstring も含まれます。そのため、コメント内の流行語は実際の行番号と列番号で検出される一方、識別子、文字列、書式の位置合わせは検出対象になりません。
fix は、文章のクリーニングによってコードが壊れるため、コードファイルの書き換えを全面的に拒否します。ファイルを標準入力経由で渡すと、意図的にプレーンテキストとして読み取れます。また、--as .go を追加すると、標準入力をその種類のソースファイルとして読み取り、コメントのみをスキャンします。これはエディターが未保存のバッファーをチェックするときに使う方法です。関数内にネストされたコメントも、ほかのコメントと同じようにスキャンされます。.json や .csv のようにコメントがないデータファイルは、メッセージを表示してスキップされます。
スコア
score は、アクティブなプロファイルで指定されたパターンがテキストにどの程度密集しているかを示す、0 から 100 までの単一の数値を返します。プロファイルを変えると、同じ文章でもスコアは変わります。このことは、その数値が何を示すかを最も明確に表しています。つまり、名前の付いたルールセットへの準拠度です。構造上の特徴は、指定された単語とは異なり類語辞典を使っても残るため、密集度への寄与は 2 倍になります。
エンジンには、AI、人間、技術分野の文章にラベルを付けたコーパスが sanitize/testdata/ に同梱されています。TestBenchmark は実行ごとに、このコーパスに対する再現率、適合率、スコアの差を測定します。そのため、検出能力を弱める変更は、気付かれないままになるのではなく、ビルドに失敗します。docs/BENCHMARK.md には、数値、コーパスの構成、各パターンがどの箇所に該当するか、スコアが示す内容の限界が記載されています。スコアはリンターの結果であり、著者を判定するものではありません。
slop-chop score notes.md # notes.md: 42 (mixed: 5 tells in 180 words)
slop-chop score --json notes.md # {"value":42,"scoringVersion":2,"tells":7,...}
slop-chop score --max 20 notes.md # exit non-zero when the score is above 20
--max を指定すると、スコアがゲートとして機能するため、文書が基準値を超えた場合は check と同様にビルドが失敗します。
各スコアには、その算出に使われたスコアリングのバージョンが記載されます。変更されていないテキストのスコアが変わる可能性のあるリリースでは、バージョンが上がります。また、docs/SCORING.md に変更内容が記載されるため、バージョンが変わるまでは、あるバージョンを基準に設定したゲートの意味が保たれます。バージョンを上げずにベンチマークコーパスのスコアが変わると、リポジトリ内のテストが失敗します。
構造上の特徴
単語の置き換えで、AI による文章に使われる語彙を検出できます。ルールチェックでは、単語リストでは見逃される 61 個の構造上の特徴にもフラグを立てます。たとえば、it's not just X, it's Yというリズムや、その短縮形であるisn't a perk. It's an expectationのパターン、let's dive inで始める書き出し、here's the thingという本題に入る前の前置き、The best part?という断片的な種明かし、here are five waysという列挙、太字のラベル付き箇条書きや番号付き項目の連続、絵文字で飾った見出し、そしてダッシュが既知の特徴となった今、モデルが使うようになったスペース入りのハイフンなどです。また、文章ではなくチャットの返信のような文体も検出します。たとえば、let me break this down、you might be wondering、here's where it gets interesting、happy coding!、そして生成されたマーケティング文に見られるsay goodbye to XやEnter Foo, the tool thatといった言い回しです。これらにはフラグを立てますが、書き換えは行いません。修正には文全体を踏まえる必要があるため、書き換えパスに任せています。プロファイルのflagPatternsフィールドで、独自のパターンを追加できます。
有名になった特徴はどれも、次のモデルが学習して使わなくなり、文章の傾向は別のところへ移ります。そのため、デフォルトのプロファイルでは、モデルが 2023 年に書いていたものではなく、現在書いているものを追跡します。
CI で使用する
スロップスコアが 25 を超えるファイルがある場合に、プルリクエストを失敗させるワークフローを追加します。検出された内容はすべて実行ログに一覧表示されるため、空白や句読点の整理もビルドを失敗させずに確認できます。
name: slop-chop
on: pull_request
jobs:
slop:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dcadolph/[email protected]
with:
files: docs/intro.md docs/guide.md
# max: 25 # optional, the score line
# strict: "true" # optional, fail on any single finding
# scoring-version: "1" # optional, fail when the engine scores differently
# profile: myprofile.json # optional
# dialect: american # optional
# preset: plain # optional
max を変更してしきい値を移動するか、max: 100 に設定してスコアによるゲートを無効にします。コマンドラインの slop-chop check --strict と同様に、検出が 1 件でもあれば失敗させるには、strict: "true" を設定します。デフォルトのしきい値は、一般的な人間の文章ではほとんど達しない値です。ベンチマーク の 886 件の README のうち、25 以上のスコアとなるのは 0.8 パーセントです。
このアクションは指定したタグからエンジンをビルドするため、そのタグでエンジンとスコアリングバージョンをまとめて固定できます。スコアリングバージョンが高い新しいタグでは、同じファイルでもスコアが変わることがあります。ゲートの調整に使ったバージョンを scoring-version に設定すると、タグの更新によってスコアリングバージョンが変わった日に、ゲートがひそかに移動するのではなく、docs/SCORING.md への案内とともにジョブが失敗します。
リポジトリにとって妥当な検出結果を抑制する方法は 2 つあります。Markdown またはコードコメントにディレクティブを書いて 1 行だけ抑制するか、リポジトリのルートにある .slop-chop.json の allow リストを使って、単語を全体的に検出対象から除外します。このファイルはアクションが自動的に読み込みます。
We leverage the platform on purpose here.
// slop-chop-ignore-next-line
// A robust fallback for the legacy path.
{ "allow": ["leverage", "robust"] }
slop-chop-ignore だけを指定すると、その行だけが抑制されます。ほかの方法については docs/PROFILE.md をご覧ください。
または、ファイルを修正して、その整理内容をプルリクエストのブランチにプッシュできます。
name: slop-chop
on: pull_request
jobs:
slop:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v7
with:
ref: ${{ github.head_ref }}
- uses: dcadolph/[email protected]
with:
files: docs/intro.md docs/guide.md
mode: fix
commit: "true"
# message: Chop the slop # optional commit message
修正してコミットするワークフローはプルリクエストのブランチにプッシュするため、同じリポジトリ内のブランチからのプルリクエストで動作します。フォークからのプルリクエストには読み取り専用トークンが付与されるため、permissions ブロックの設定にかかわらず、プッシュは 403 エラーで失敗します。フォークからのプルリクエストには、上記のチェックワークフローを使用してください。書き込みアクセスは不要で、スロップがある場合は実行を失敗させます。自分のブランチを自動修正するには、代わりに同じ修正・コミットジョブを push トリガーで実行します。
プルリクエストの差分と Security タブにコードスキャンアラートとして検出結果を表示するには、sarif にパスを設定し、書き出されたログをアップロードします。
name: slop-chop
on: pull_request
jobs:
slop:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v7
- uses: dcadolph/[email protected]
with:
files: docs/intro.md docs/guide.md
sarif: slop-chop.sarif
- uses: github/codeql-action/upload-sarif@v4
if: ${{ !cancelled() }}
with:
sarif_file: slop-chop.sarif
category: slop-chop
スコアゲートによってジョブが失敗した場合でもアップロードは実行されるため、原因となったプルリクエストにアラートが表示されます。スコアに加算される検出結果は警告、それ以外は注記になります。エラーはないため、デフォルトではアラートによってプルリクエストのチェックが失敗することはなく、スコアがゲートとして機能します。コードスキャンのアップロードはパブリックリポジトリでは無料ですが、プライベートリポジトリでは GitHub Code Security が必要です。フォークからのプルリクエストには読み取り専用トークンが付与されるため、そこでのアップロードは失敗します。コマンドラインでは、slop-chop check --sarif を使うと、任意の数のファイルについて同じログを標準出力に書き出せます。
プルリクエストのタイトルと本文にも同じしきい値を適用するには、pull-request: "true" を設定します。edited タイプを指定した独立したワークフローとして実行すると、タイトルや説明が編集された際に、CI のほかの処理を再実行せずにチェックできます。
name: slop-chop pull request
on:
pull_request:
types: [opened, edited, synchronize, reopened]
jobs:
text:
if: github.event.pull_request.user.type != 'Bot'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: dcadolph/[email protected]
with:
pull-request: "true"
タイトルと本文は 1 つのテキストとしてチェックされ、タイトルは 1 行目、本文は 3 行目から始まり、ファイルと同じ max と strict が適用されます。テキストはイベントから取得されるため、チェックにトークンは不要で、フォークからのプルリクエストでも動作します。再実行では実行開始時点のテキストが読み込まれるため、編集後は edited イベントでの実行結果が有効になります。if によって、本文に上流のリリースノートが含まれる Dependabot と Renovate はスキップされ、チェックアウトによってリポジトリの .slop-chop.json が適用されます。同じステップでファイルもチェックするには files を追加します。または、別のトリガーで実行するワークフローからほかのテキストをチェックするには、pull-request-title と pull-request-body を設定します。コードブロックと HTML コメントはスキップされるため、プルリクエストのテンプレートが投稿者のスコアに影響することはありません。1 行だけ抑制するには、投稿者がその行の上に、GitHub で表示されないコメントを記述します:``.
このアクションは actions/setup-go@v7 を使って Go をインストールします。このバージョンは Node 24 で動作します。セルフホストランナーでは、バージョン 2.327.1 以降が必要です。また、このセットアップステップではジョブの残りの処理に対して GOTOOLCHAIN=local も設定されるため、後続の go コマンドは Go をダウンロードせず、インストール済みの Go を使用します。
Claude Code プラグインとして使う

上のループが要点です。エージェントが文章を作成し、エンジンが決定論的に評価し、指摘事項を返し、書き直した文章を信頼するのではなく検証します。slop-chopにはClaude Codeプラグインが付属しているので、アシスタントがツールを実行できます。このリポジトリ自体がマーケットプレイスです。マーケットプレイスを追加して、そこからプラグインをインストールします。
/plugin marketplace add dcadolph/slop-chop
/plugin install slop-chop@slop-chop
slop-chop@slop-chopという名前はplugin@marketplaceの形式です。つまり、slop-chopというマーケットプレイスの、slop-chopというプラグインです。
このプラグインはslop-chopバイナリを置き換えるのではなく、それを実行します。そのため、まずバイナリをインストールして、PATHに追加してください。
go install github.com/dcadolph/slop-chop@latest # lands in $(go env GOPATH)/bin
slop-chop --version # confirm it is on PATH
プラグインを使うと、Claudeからツールにアクセスする方法が2つあります。
| 方法 | 内容 | 操作 |
|---|---|---|
slop-chopスキル | Claudeが文章の下書きに応じて自動的に使用します。 | テキストを渡して、読みやすくするよう依頼します。 |
/slop-chopコマンド | ファイルまたはテキストに対して実行するコマンドです。 | /slop-chop notes.mdと入力します。 |
# Let the skill decide
Clean the slop out of this before I send it: <paste your text>
# Or call the command
/slop-chop notes.md
ルールのチェックは無料です。書き直しにはキーが必要で、依頼しない限り実行されません。そのため、より徹底的に整えたい場合はその旨を伝えてください。また、ローカルでキーなしのバックエンドを使いたい場合は、その名前も指定してください。
Rewrite this to sound human, and use my local Ollama so it costs nothing.
docs/PLUGIN.mdには、トラブルシューティングを含むプラグインの完全なガイドがあります。
プロファイルとプリセット
プロファイルは、削除するものと置き換えるものを指定するJSONファイルです。対象には、文字、フレーズ、単語、正規表現、ブラックリスト、およびいくつかの切り替え設定があります。--profileでプロファイルを指定するか、リポジトリに.slop-chop.jsonを置くと、その配下のどのディレクトリからでも自動的に読み込まれます。どちらも指定しない場合は、組み込みのデフォルト設定が使われます。
プリセットは、--presetで重ねて適用する、厳選された設定集です。組み込みプリセットはcleaver、plain、corporate、academic、marketing、no-dashes、typography、procedureです。cleaverは最も強力に削除します。デフォルトのプロファイルではleverageやrobustのような流行語だけを指摘しますが、cleaverではそれらを平易な語に書き換えます。ウェブアプリではこの設定が有効になっています。--preset plain
は、すでに適用しているプロファイルに加えて、企業的な言い回しを平易な英語に変えます。それ以外のプリセットは、それぞれの分野でよく使われる言い回しを対象にします。最後の2つはダッシュの扱いを設定します。no-dashesは、emダッシュの代わりに使われているダッシュをすべてコンマに変換し、typographyは、意図的に使われているテキストについて、組版用のダッシュ、曲線引用符、省略記号を維持します。procedureは手順向けです。リスト項目では20語を超える文、それ以外では25語を超える文を指摘します。クリーンアップ項目と同様にスコアには影響しないため、これで失敗扱いにするには--strictを追加してください。複数のプリセットはコンマで区切って重ねて適用できます。例:--preset corporate,plain。
docs/PROFILE.mdには、各フィールド、プリセット、スペリングのバリエーション、許可リスト、インラインの無視指示を含む完全なリファレンスがあります。
攻撃してみる
slop-chop attack draft.md
attackは、自分のルールを回避できるか試します。文章をできるだけ多くのルールから逃れるように書き換えますが、文章の質は改善しません。その後、どの特徴が検出を免れたかを報告します。
流行語は類語への置き換えで回避されます。74件の単語に関する特徴のうち33件はすり抜けます。一方、構造に関する特徴は、単語の置き換えでは文を組み立て直せないため、90件中1件しかすり抜けません。そのため、この行が測るのは攻撃側がどこまで到達できるかであり、文型がどれだけ頑健かではありません。攻撃後も71件中67件の文章には特徴が残り、平均スコアは83から78に下がるだけです。このため、構造に関する特徴はスコアで2倍に数えます。
自分のプロファイルに対して実行し、類語への置き換えでどのルールを回避できるかを確認してください。-wを指定すると、回避用に書き換えた文章がコーパスとして保存されます。docs/BENCHMARK.mdには、完全な表と、この結果から証明できることの限界が記載されています。
あなたらしい文体
voice は個人向けのレイヤーです。keep はあらゆるルールやプリセットからあなたの言葉を守り、prefer はある単語をあなたが使うはずの単語に置き換え、avoid はあなた特有の口癖にフラグを付けます。slop-chop voice diff draft.md final.md は、下書きから公開したバージョンへの変更を読み取り、その編集内容からエントリーを提案します。これは、モデルがあなたにフィードバックできない唯一の文体シグナルです。
slop-chop voice fingerprint posts/*.md は、誰も引用しない部分、つまり文のリズム、句読点の使い方、文体のレジスターを数値で測定します。続いて slop-chop voice drift draft.md は、文章があなたらしくなくなった特性をすべて特定します。--bands 2 を指定すると、社内の文体に対する CI ゲートになります。文体のずれはスロップではないため、書き換えは行われず、スコアも変わりません。詳しくは docs/VOICE.md をご覧ください。
書き換えパス(任意)
ルールパスは決定論的で、無料です。セミコロンが不要になるように文を作り直したり、文章をあなたの文体に寄せたりといった、ルールでは対応できない作業には --rewrite を追加します。まずルールを実行し、その結果をモデルに渡します。ANTHROPIC_API_KEY が必要で、費用も発生するため、デフォルトでは無効になっています。
export ANTHROPIC_API_KEY=sk-...
slop-chop fix --rewrite notes.md
slop-chop fix --rewrite --verify notes.md
返信は受け取る前に検査されます。ルールを再度適用し、コードブロックと意味を担うトークンを入力と比較します。また、--verify を指定すると、意味の変化にフラグを付けるモデルパスが追加されます。書き換えとその検査については、ENGINE.md で詳しく説明しています。
バックエンド
書き換えパスはデフォルトで Anthropic を使用しますが、--provider openai を指定すると、OPENAI_API_KEY を使って任意の OpenAI 互換 Chat Completions API に接続できます。--base-url を使えば、ローカルサーバーを指定できるため、キーも費用も不要で、お使いのマシン上で書き換えを実行できます。
# OpenAI
OPENAI_API_KEY=sk-... slop-chop fix --rewrite --provider openai --model gpt-4o notes.md
# Local Ollama, no key, no bill
slop-chop fix --rewrite --provider openai --base-url http://localhost:11434/v1 \
--model llama3.1 notes.md
下書きを作成したモデルとは別のベンダーを使って書き換えるのがおすすめです。モデルは自分自身の癖を見つけるのが苦手だからです。
Go ライブラリとして使う
エンジンは公開パッケージなので、Go プログラムからプロセス内でテキストを処理できます。外部コマンドを呼び出すバイナリも、どこかに送信されるデータも不要です。次のように追加します。
go get github.com/dcadolph/slop-chop/sanitize
プロファイルからサニタイザーを一度作成し、再利用します。Fix はクリーンアップしたテキストと検出した癖を返し、Check はテキストを変更せずに癖を報告します。Score は、プロファイルのパターンがどれほど高密度で現れるかに基づいて、0 から 100 までのスコアを付けます。
package main
import (
"fmt"
"github.com/dcadolph/slop-chop/sanitize"
)
func main() {
s, err := sanitize.New(sanitize.DefaultProfile())
if err != nil {
panic(err)
}
clean, findings := s.Fix("In summary, the plan—which shipped—works; the results speak for themselves.")
fmt.Println(clean) // The plan, which shipped, works. The results speak for themselves.
fmt.Println(len(findings), "tells")
}
組み込みプリセットは sanitize.ApplyPresets でプロファイルに適用できます。プロファイルの Dialect フィールドでスペルの方言を指定したり、profile.WithVoice で個人用の sanitize.Voice を組み込んだりすることもできます。任意のモデル書き換え機能は github.com/dcadolph/slop-chop/rewrite にあります。リファレンス全文は pkg.go.dev をご覧ください。
そのほかの環境
同じエンジンをさまざまな環境で利用できます。特に記載がない限り、すべてローカルで実行でき、無料です。
| 場所 | 入手方法 |
|---|---|
| Web アプリ | slop-chop.com。インストール不要 |
| VS Code | Visual Studio Marketplace で slop-chop を検索 |
| Cursor、VSCodium | Open VSX で slop-chop を検索 |
| JetBrains IDE | Marketplace プラグイン、または slop-chop lsp を使う LSP4IJ。docs/LSP.md をご覧ください |
| Neovim、Helix、その他の LSP エディター | slop-chop lsp。docs/LSP.md をご覧ください |
| Obsidian | Community plugins で slop-chop を検索。ソースは obsidian/ にあります |
| Node | npm install slop-chop-wasm |
| Go プログラム | import github.com/dcadolph/slop-chop/sanitize。上記をご覧ください |
| Claude Desktop、Cursor、その他の MCP クライアント | slop-chop mcp。docs/MCP.md をご覧ください |
| CI、Raycast、macOS、pre-commit | GitHub Action と integrations/ |
ドキュメント
| ドキュメント | 内容 |
|---|---|
| docs/PROFILE.md | すべてのプロファイル項目、プリセット、方言、許可リスト、無視する項目について説明しています。 |
| docs/SCORING.md | スコアリングのバージョン、各バージョンで変更された内容、ゲートのバージョンを固定する方法について説明しています。 |
| docs/VOICE.md | 維持する表現、優先する表現、避ける表現、編集内容からの学習、文体の指紋について説明しています。 |
| docs/PLUGIN.md | Claude Code プラグインのインストール、スキル、コマンド、バックエンドについて説明しています。 |
| ENGINE.md | エンジンの仕組み、ルールの種類、実行順序、書き換えについて説明しています。 |
ステータス
まだ初期段階ですが、核となる部分は整っています。ルールの適用処理は実装済みで、動作しています。書き換え処理も実装済みで、--rewrite フラグの指定時にのみ実行されます。API キーが必要で費用もかかるため、無料で予測可能なルール適用処理がデフォルトです。実際の API を使う書き換え処理には、API キーが設定されている場合にのみ実行される統合テストがあります。意図せず費用が発生しないよう、デフォルトのビルドからは除外されています。API キーを使って実際の API に対して実行するには、次のコマンドを使います。
ANTHROPIC_API_KEY=sk-... go test -tags=integration ./rewrite/ -run Live -v
ライセンス
MIT。LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。