DecisionLint: Jev/Luna Lint について
DecisionLintは、ソースファイルやコード内のJev・Luna向け意思決定モデルの質問を検査します。静的ルールの実行にAPI呼び出しやキーは不要で、開発者やエージェントがエディター、CLI、CI、MCPから利用できます。
主な機能
- 01JSONと6言語のコードを検査
- 02エディター診断と機械的な修正
- 03CLIとCI向けの複数形式レポート
- 04任意のモデルレビューとレイアウト検証
- 05Jev・Lunaのリクエスト形式に共通ルール
活用シーン
- 01編集中に質問の問題を検出
- 02CIで意思決定リクエストを検査
- 03エージェントによる質問文の検査と安全な修正
- 04レイアウト変更による回答の差を確認
MCP 対応
MCPサーバーは、テキストやファイルの検査・修正、ルール一覧と説明、任意のモデルレビューや質問検証を行う8つのツールを提供します。任意のモデル呼び出しでは、サーバー環境またはローカルの環境ファイルに設定したキーを使います。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
8掲載時のツール一覧 · 4 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| text | string | はい | リクエスト JSON またはソースコード。 |
| rules | object | いいえ | 上書きするルールレベル。例:{ "DEC004": "off" }。レベル:off、hint、info、warning、error。 |
| filename | string | いいえ | テキストの種類を示す拡張子を持つファイル名:.json、.ts、.js、.py、.rs、.go。デフォルトは request.jev.json です。 |
詳細
DecisionLint:Jev/Luna リント
送信前に、Jev と Luna の意思決定モデルに関する質問をリントします
JSON、JavaScript、TypeScript、Python、Rust、Go に対応し、TypeSafe、OpenAI、およびそれらを提供するすべてのプラットフォームで利用できます
役に立ちましたか? 他の開発者に見つけてもらうには、スターまたは評価をお願いします — ★ GitHub · ★ Open VSX · ★ Marketplace
機能
送信前に、Jev と Luna に投げる質問をリントします。DecisionLint は、意思決定モデル向けに書いた質問をチェックします。対象は TypeSafe の Jev、OpenAI の Decisions API(gpt-6-luna)、そして OpenRouter や Vercel AI Gateway から手元の llama.cpp まで、どちらの形式にも対応するすべてのプラットフォームです。DecisionLint は JSON とコードから質問を読み取り、悪い回答につながる可能性が高い書き方の質問を報告します。リントでは API を呼び出さず、キーも必要ありません。オプションのコマンドを使えば、自分のキーで、ファイルを指定したプラットフォームに送信し、モデル自身にチェックさせることもできます。
- JSON、JavaScript、TypeScript、Python、Rust、Go で入力中にリントします。
- 機械的なミスは電球アイコンから修正でき、同意できない指摘を無視する方法もあります。
- CI、コマンドライン、MCP サーバー経由の AI エージェントで、同じルールを使用できます。 3 つすべてで同じ設定ファイルを使います。
- すべてのプラットフォームで、共通のルールセットを使用できます。 TypeSafe の
/v1/systemone形式と OpenAI の/v1/decisions形式、predicate、choices、levelsを同じルールでチェックします。また、AI SDK のどちらかの形式に対応するdecide()呼び出しも対象です。リクエストに適用される上限は、モデル ID の表記、ファイル内の URL、またはtarget設定から読み取る、そのプラットフォーム固有の値です。Vercel では 255 個の選択肢、LiteLLM では 128 個の質問が上限となり、プラットフォームが上限を公開していない場合は上限なしとなります。 - 自分のキーを使うオプションのコマンドが 2 つあります。 1 つは、テキストパターンでは見つけられない問題が質問にないかモデルに尋ねます。もう 1 つは、レイアウトを変えて質問を再送し、回答が変わらないかを確認します。どちらも、モデル ID が示すプラットフォーム、または指定したエンドポイントに送信します。ローカルの llama.cpp も指定できます。
次のようなリクエストは問題なさそうに見えますが、3 つの問題があります。
{
"model": "jev-latest",
"state": "My parcel came three days late and the lid is cracked.",
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": { "billing": "Charges and refunds", "delivery": "Late or damaged parcels" }
},
"late": { "type": "noul", "instructions": "Did more than two parcels arrive late?" }
}
}
| 指摘 | 重要な理由 |
|---|---|
jev-latest の DEC001 | このエイリアスはリリースごとに変わるため、こちらで何も変更しなくても回答が変わる可能性があります |
team の DEC004 | どちらのチームについてでもないメッセージも、いずれか一方に分類されてしまいます |
late の DEC102 | Jev は正確に数えられません。各荷物について質問し、コードで数えてください |
インストール
| 対象 | 利用できる機能 | インストール |
|---|---|---|
| VS Code | 入力中のリント、電球アイコンからの修正、Ask コマンドと Probe コマンド | Marketplace · ext install nolindnaidoo.decisionlint |
| Cursor、VSCodium、Windsurf | 同じ拡張機能 | Open VSX |
| ターミナルまたは CI のステップ | ツリー全体に対する同じルールのチェック、終了コード、SARIF、JUnit | npx decisionlint · npm |
| Node 経由の任意の MCP エージェント | stdio 経由の 8 つのツール | npx -y decisionlint-mcp · npm |
AI エージェントから使用する
同じプログラムがMCPサーバーでもあるため、Jev または OpenAI Decisions の質問を作成するエージェントは、作成した内容を lint して、表示される前に修正できます。ツールの説明とサーバーの指示には、両方のベンダー名と3種類すべてのリクエスト形式が記載されているため、エージェントはどの場合でもこのサーバーを呼び出すべきだと判断できます。
| エディター | 方法 |
|---|---|
| VS Code 1.101+ | インストールは不要です。拡張機能がサーバーをエディターに提供し、エージェントがツールを呼び出すとエディターがサーバーを起動します |
| Claude Code | claude mcp add decisionlint -- npx -y decisionlint-mcp |
| Cursor、Windsurf、その他 | npx -y decisionlint-mcp を指定します |
8つのツールを提供します。lint_text はテキストとして渡されたリクエストまたはソースコードを lint し、lint_paths はディスク上のファイルを lint します。どちらも各指摘に修正内容が含まれます。fix_text は安全な修正を適用したテキストと、残った問題のレポートを返します。書き込みは行いません。list_rules はすべてのルールとその意味を一覧表示し、explain_rule はルールのページと、指摘される例および指摘されない例を返します。これらは何も送信せず、キーも不要です。
残りの3つは、エージェント向けのエディターの Ask コマンドと Probe です。ask_model は Jev、または model: gpt-6-luna を指定した Luna に、テキスト内またはファイル内の質問の確認を依頼し、モデルの指摘を追加した lint レポートを返します。plan_ask は送信される内容を示しますが、何も送信しません。probe_question はレイアウトを変えて質問を1つ送信し、回答が維持されるかを報告します。送信を行う2つのツールはキーを使用し、費用が発生します。また、それらの説明には、ユーザーから依頼された場合にのみ呼び出すようエージェントに指示されています。キーは、クライアントがサーバーを起動した環境にある TYPESAFE_API_KEY または OPENAI_API_KEY、あるいはサーバーを起動したディレクトリ内の .env.local または .env から読み込まれます。ツールの引数から読み込まれることはないため、キーがエージェントの記録に残ることはありません。各ツールはテキストとともに構造化コンテンツを返し、ファイルへの書き込みは行いません。
MCP レジストリには io.github.nolindnaidoo/decisionlint として登録されています。レジストリからサーバーをインストールするクライアントで利用できます。
手動で設定する:MCP 設定ファイルを持つ任意のホスト
ほとんどのホストは JSON 設定ファイルを読み込みます。エントリを1つ追加します。
{
"mcpServers": {
"decisionlint": { "command": "npx", "args": ["-y", "decisionlint-mcp"] }
}
}
初回実行時のインストール確認を省略するには、-y を指定します。起動のたびに npx を使わないようにするには、npm install -g decisionlint-mcp で一度インストールし、代わりに "command": "decisionlint-mcp" を設定します。
CI 用に decisionlint をすでに固定しているプロジェクトでは、npx decisionlint --mcp から同じサーバーを利用できます。フラグなしで起動した decisionlint はサーバーではなく、終了するリンターです。そのため、クライアントに指定するのはフラグなしのパッケージです。
検出できる問題
Jev と Luna が保証するのは回答の形式であり、回答そのものではありません。質問の形式が不適切でも、自信に満ちた数値が返ってくることがあります。これらのルールは、テキストから読み取れる誤りを検出します。
| コード | 名前 | デフォルト | 意味 |
|---|---|---|---|
| DEC000 | unreadable | hint | 質問の一部が実行時に組み立てられるため、それを必要とするルールが実行されませんでした |
| DEC001 | unpinned-model | warning | jev-latest などのエイリアスはリリースごとに変わるため、こちらで何も変更していなくても回答が変わることがあります |
| DEC002 | choice-option-limit | error | Choice の選択肢が 255 個を超えています。API に拒否されます |
| DEC003 | score-level-limit | error | Score のレベルが 10 個を超えています。API に拒否されます |
| DEC004 | no-fallback-option | info | Choice に other または none of the above がないため、どの選択肢にも当てはまらない入力が、いずれかに無理に分類されます。測定されたコストの中で最も大きく、テキストから見分けるのも最も困難です |
| DEC005 | duplicate | error | 質問 ID、選択肢、またはレベルが重複しています。オブジェクトでは、後のものが前のものを黙って置き換えます |
| DEC006 | criteria-shape | error | Choice には選択肢のマップ、Score にはレベルの配列が必要です。また、Noul は true と false を取ります |
| DEC007 | invalid-question | error | タイプがないか不明であるか、指示が空文字列です |
| DEC008 | numeric-levels | warning | Score のレベルが数値のみです。Jev は状態を各説明文と照合するため、レベルの位置は認識されません |
| DEC009 | too-few-options | info | 選択肢が 1 つの Choice、またはレベルが 1 つの Score では、どの入力にも同じ回答が返されます |
| DEC010 | unused-disable | warning | decisionlint-disable コメントは何も抑制していないため、後から追加される検出結果を隠すことしかできません |
| DEC011 | description-repeats-name | info | 選択肢の説明が名前を繰り返しているだけか、Noul の基準が yes と no になっています。Jev は状態を説明文と照合しますが、この説明文には何の情報もありません |
| DEC012 | terse-instructions | info | 指示が 1 語または 2 語だけなので、質問は ID に頼ることになります。Jev に送られるのは指示であり、ID は送られません |
| DEC013 | newer-model | info | model に、このルールの測定対象となったバージョンより新しい Jev バージョンが指定されています。そのため、そのバージョンでは検出結果のコストが発生しない可能性があり、新たに生じた弱点も検出対象になりません |
| DEC014 | question-limit | error | リクエストに、送信先のプラットフォームが 1 回の呼び出しで受け付ける数を超える質問があります。プラットフォームに拒否されます |
| DEC101 | double-negative | info | 1 つの節で質問が二重に否定されているか、否定が別の否定に直接かかっています |
| DEC102 | arithmetic | warning | 質問が Jev に数を数えること、または数値を比較することを求めています |
| DEC103 | date-comparison | info | 質問が Jev に 2 つの時点の順序付け、または時点間の間隔の測定を求めています |
| DEC104 | compound | off | Noul が「and」で 2 つの判断を結び付けています |
| DEC105 | generation | warning | 質問が Jev に値を求めるか、テキストの作成を求めています |
| DEC107 | negated-noul | off | 基準のない Noul が、yes が何かの欠如を意味するような表現になっています |
| DEC108 | inverted-criteria | off | Noul の「true」の基準が、否定的なケースを表しています |
| DEC110 | degree-levels | warning | Score のレベルが程度を表す語、ラベルのみの語、または 1 語を強めたり弱めたりしたものです。Jev が状態と照合するものがありません |
| DEC111 | numeric-encoding | off | 質問が値を 16 進数または RGB のエンコードで参照しています |
| DEC112 | undefined-boundary | info | 基準のない Noul が、large、often、enough のような語を判定基準にしています |
| DEC301 | model-counting | warning | Jev は質問に数え上げや算術が必要だと判断しています |
| DEC302 | model-undefined-boundary | info | Jev は Noul が明確な境界の示されていない程度の問題を判定基準にしていると判断しています |
| DEC303 | model-overlapping-options | info | Jev は Choice の 2 つの選択肢が同じケースを対象にしていると判断しています |
| DEC304 | model-overlapping-levels | warning | Jev は Score の 2 つのレベルが同じ状況を表していると判断しています |
| DEC305 | model-label-mismatch | warning | Jev は選択肢の名前が示す内容と説明が異なると判断しています |
| DEC306 | model-criteria-off-topic | info | Jev は基準が指示で求められていない事柄を判断していると解釈しています |
| DEC307 | model-ordered-options | info | Jev は Choice の選択肢が 1 つの尺度上の段階になっており、その間を Score で表せると解釈しています |
| DEC308 | model-unordered-levels | info | Jev は Score のレベルが順序のないカテゴリであり、Choice で選択するものだと解釈しています |
| DEC309 | model-depends-on-sibling | info | Jev は質問が同じリクエスト内の別の質問への回答を必要としていると解釈しています |
| DEC310 | model-overlapping-questions | info | Jev は 1 つのリクエスト内の 2 つの質問が同じ判断を求めていると解釈しています |
| DEC311 | model-answer-not-in-state | info | Jev はファイルに記述された状態が、質問で尋ねられている内容を含んでいないと解釈しています |
| DEC312 | model-orders-in-state | info | Jev はファイルに記述された状態の一部が、その読み手への指示になっていると解釈しています |
| 各指摘には専用ページへのリンクがあり、検出対象となる例、検出対象とならない例、修正方法、無効化方法が記載されています。各ページから、そのルールの由来である TypeSafe のドキュメントにもリンクしています。 |
検査対象
- TypeSafe 形式または OpenAI 形式の JSON および JSONC のリクエスト本文。
- JavaScript および TypeScript のオブジェクトリテラル。
client.systemOne(...)やclient.decisions.create(...)にインラインで渡されたリクエスト、およびどちらのベンダーでも、モデル ID をモデルとして読み取るtypeSafeAi.decisionModel('...')を含む Vercel AI SDK のdecide({ questions })も対象です。 @typesafe-ai/sdkを使用するファイル内のnoul()、choice()、score()呼び出し。- Python:
typesafe_sdkの辞書、Noul(...)、Choice(...)、Score(...)、NoulCriteria(...)を持つ LangChain のlangchain_typesafe、またはいずれかをラップするライブラリ内のこれらの呼び出し、およびsystem_one(...)やclient.decisions.create(...)に渡されるリクエスト。 - Rust:
json!内の JSON、質問タイプを名前に含む構造体や列挙型のバリアント、および::noul(...)形式のコンストラクター。 - Go:文字列キーを持つマップ、
Typeフィールドを持つ構造体、質問タイプを名前に含む構造体、および OpenAI の Go SDK のopenai.DecisionNewParams{...}と、そのOfPredicate、OfChoice、OfScoreの質問。 - これらの言語のいずれかで、リクエストを JSON として文字列に貼り付けたもの。
- その他の言語:プログラムに送信するリクエストを
.jev.jsonファイルに書き出させて、それを開いてください。すべてのチェックはそのファイルに対して実行され、実行時に構築されるものはないため、検査が省略されることはありません。 oxlint-plugin-jevの設定内のjev/askルール。
OpenAI の Decisions API
OpenAI の Decisions API では、モデル gpt-6-luna が Jev と同じ種類の質問を別の形式で行います。DecisionLint は 0.5.0 からこれを読み取ります。対象となる範囲は次のとおりです。
- 読み取り。
/v1/decisionsのリクエスト本文、TypeScript および Python のclient.decisions.create(...)、Vercel AI SDK のdecide()が対象です。predicateは Noul として、choices: [{ value, description }]は Choice の選択肢として、levels: [{ label, description }]は Score のレベルとして読み取られ、同じルールが適用されます。 - チェック。 根拠のあるすべてのルールが対象です。フォールバックの選択肢の欠落、名前を繰り返すだけの説明、簡潔すぎる指示、程度を示すレベル、重複、数え上げ、未定義の境界などを検査します。指摘には Luna と表示されます。OpenAI 自身のガイドでも、同じことが求められています。
- 対象外。
DEC002とDEC003はプラットフォームが公開している上限をチェックしますが、OpenAI は上限を公開していないため、OpenAI 向けのリクエストにはどちらも適用されません。Vercel のように上限を公開しているゲートウェイ向けのリクエストには、両方が適用されます。DEC001は変動する Jev のエイリアスに関するルールで、OpenAI にはモデル ID が 1 つあります。 - 形式の誤りは、OpenAI 独自のフィールド名で報告されます。
choicesがマップまたは名前だけで記述されている場合、Choice にchoicesがない場合、Score にlevelsがない場合などです。誤ったpredicateは電球アイコンから修正できます。形式を組み替える修正は Jev のみを対象とします。 - Luna に質問する。 OpenAI キーを設定し、Ask Luna About This File を実行するか、
--ask-platform openaiを指定します。方法は次のセクションで説明します。 - Jev で調整し、Luna で測定。 これらのルールのデフォルト値はすべて、その欠陥が
jev-1.13.0にもたらす影響を測定して設定されました。2026-10-16 にライブ API を通じて Luna でチェックを実行しました。Jev のしきい値では Luna の欠陥の大半を検出できますが、見逃しは増えるため、Luna でも同じしきい値を維持しています。Luna に問い合わせて得られた指摘にはすべて、しきい値が Jev で設定されたことが記されています。文言に関するルールが Luna にもたらす影響は、まだ測定されていません。
すべてのプラットフォーム
Jev と Luna はモデルのうちの 2 つで、TypeSafe と OpenAI はリクエストの送信先のうちの 2 つです。Microsoft、Liquid AI、Cloudflare は、TypeSafe の形式で独自のモデルを提供しています。OpenRouter、Vercel AI Gateway、LiteLLM、LLM Gateway は、どちらの形式でも、これらのいずれにも転送します。llama.cpp、vLLM、Ollaya は、オープンモデルをお使いのマシン上で実行します。DecisionLint は 2 つの形式を読み取るため、どのプラットフォームも同じルールで検査できます。それぞれの違いは、各情報の参照元ページとともに、1 つの表 src/lint/targets.ts にまとめられています。
| プラットフォーム | 指定方法 | キーの環境変数 | 公開されている制限 |
|---|---|---|---|
| TypeSafe | jev-1.13.0、jev-latest | TYPESAFE_API_KEY | オプション 255 個、階層 10 個 |
| OpenAI | gpt-6-luna | OPENAI_API_KEY | なし |
| OpenRouter | ~typesafe/jev-latest、typesafe/jev-1.13 | OPENROUTER_API_KEY | なし |
| Vercel AI Gateway | typesafe-ai/jev、openai/gpt-6-luna-decisions | AI_GATEWAY_API_KEY | 選択肢 255 個、階層 10 個 |
| LLM Gateway | gpt-6-luna-decisions、microsoft-decision-1 | LLM_GATEWAY_API_KEY | なし |
| Liquid AI | d1、d1:free | LIQUID_API_KEY | なし |
| LiteLLM | 設定したエンドポイント | 形式の | リクエストあたり質問 128 件 |
| Eden AI | 独自のパス | 独自のもの | オプション 255 個 |
| llama.cpp | 設定したエンドポイント | なし | 階層 10 個 |
この表から、次の 3 つのことが分かります。
- リクエストに適用される制限は、そのプラットフォームのものです。 プラットフォームは、モデル ID の表記から判別できる場合はその表記から、ファイル内の URL が示すプラットフォームから、またはすべてのリクエストを 1 か所に送るプロジェクトの場合は
decisionlint.jsonのtargetまたはdecisionlint.targetから判別されます。制限を公開していないプラットフォームについては、その制限に関する指摘はありません。リクエストの送信先を示すものはありません。TypeSafe 形式の質問には TypeSafe の制限が適用され、それ以外の形式には制限が適用されません。 - 変動するエイリアスは、どの表記でも検出され、プラットフォームがドキュメントで指定する表記に固定されます。
jev-latestはjev-1.13.0に、~typesafe/jev-latestはtypesafe/jev-1.13に固定されます。 - モデルを使ったチェックは、ID が示すプラットフォームに、そのプラットフォームの環境変数にあるキーを使って送信されます。 すべてのゲートウェイが記述する
openai/gpt-6-luna-decisionsのように、どのホストも示さない表記は、推測せず、エンドポイントを設定するまで拒否されます。方法は次の 2 つのセクションで説明します。
「Open Jev」はこれらのいずれでもありません。これは、/v1/systemone を再実装した、少なくとも 9 つの無関係なプロジェクトで使われている名前です。llama.cpp が提供するものは ggml-org/OpenJev-GGUF です。それぞれ、設定したエンドポイントとしてアクセスします。
テスト済みのプラットフォーム
以下の各プラットフォームに対して、稼働中の API を通じて実際にリクエストを送信し、それぞれでキャリブレーションセット全体を使ってモデルベースのチェックを実行しました。
- TypeSafe の
jev-1.13.0。カットオフの設定に使用しました。 - OpenRouter の
typesafe/jev-1.13。TypeSafe と同じように応答するため、その指摘はキャリブレーション済みとして扱われます。 - LLM Gateway の
jev-1.13.0と、Vercel AI Gateway のtypesafe-ai/jev。どちらも OpenAI 形式で送信されるため、Jev の回答に多少の違いが生じます。そのため、指摘にはカットオフが TypeSafe で設定されたことが示されます。 - OpenAI の
gpt-6-lunaと、Vercel AI Gateway のopenai/gpt-6-luna-decisions。OpenAI と同じように応答します。 - Liquid AI の
d1。
Luna と d1 には Jev のカットオフを適用します。どちらでも大半の欠陥を検出しますが、Jev より見逃しが多く、それらによるすべての指摘にはカットオフの設定元が示されます。docs/cutoffs.md には各カットオフと、各モデルで検出した既知の欠陥の数、誤って指摘した正常な質問の数、さらに各プラットフォームの回答が同じモデルの別の場所での回答からどの程度異なるかが記載されています。保存された実行結果に基づいているため、数値は実行結果そのものです。サンプル数は少ないため、参考値として扱ってください。LiteLLM、Eden AI、llama.cpp では、まだ実行していません。
ファイルについてモデルに尋ねる
ルール DEC301 から DEC312 はリンティングには含まれません。これらのルールは、いずれかの Ask コマンドを実行するか、コマンドラインで --ask を指定したときだけ実行されます。各コマンドはファイル内のすべての質問を意思決定モデルに送り、テキストパターンでは検出できない問題について確認します。たとえば、選択肢同士が重複している、選択肢の名前が説明と矛盾している、基準が別の内容を対象にしている、Choice にすべきではなく Score にすべき、2つの質問が同じことを尋ねている、別の質問への回答がないと答えられない、といった問題です。
各プラットフォームに専用のコマンドがあり、それぞれ異なるキーを使用します。
| コマンド | 送信先 | デフォルトのモデル | キー |
|---|---|---|---|
| このファイルについて Jev に質問する | TypeSafe | jev-1.13.0 | TypeSafe API Key を設定、または TYPESAFE_API_KEY |
| このファイルについて Luna に質問する | OpenAI | gpt-6-luna | OpenAI API Key を設定、または OPENAI_API_KEY |
| OpenRouter 経由でこのファイルについて質問する | OpenRouter | typesafe/jev-1.13 | OpenRouter API Key を設定、または OPENROUTER_API_KEY |
| Vercel AI Gateway 経由でこのファイルについて質問する | Vercel AI Gateway | typesafe-ai/jev | Vercel AI Gateway API Key を設定、または AI_GATEWAY_API_KEY |
| LLM Gateway 経由でこのファイルについて質問する | LLM Gateway | jev-1.13.0 | LLM Gateway API Key を設定、または LLM_GATEWAY_API_KEY |
| このファイルについて Liquid d1 に質問する | Liquid AI | d1 | Liquid AI API Key を設定、または LIQUID_API_KEY |
| このファイルについて自分のエンドポイントのモデルに質問する | decisionlint.ask.endpoint | decisionlint.ask.endpointModel | Endpoint API Key を設定、またはなし |
- プラットフォームのキーを、3つの方法のいずれかで指定します。プラットフォームの ... API Key を設定 コマンドを実行し、キーを貼り付けます。キーはオペレーティングシステムのキーチェーンに保存されます。または、
decisionlint.ask.keysの Settings でプラットフォームの ID を指定してキーを入力します。この設定はユーザー設定でのみ指定でき、Settings Sync から除外されます。または、VS Code が実行される環境で、プラットフォーム名に記載された環境変数にキーを設定します。 - 質問を含むファイルを開き、プラットフォームの Ask コマンドを実行します。
各コマンドが送信するモデルは、プラットフォームごとに decisionlint.ask.models で指定します。TypeSafe のデフォルトはチェックのしきい値が設定されたバージョンです。他のモデル(Luna を含む)からの検出結果には、その旨が示されます。OpenRouter の typesafe/jev-1.13 は、そのバージョンと同等の応答をすることが測定されているため、検出結果にその旨は示されません。プローブは、TypeSafe のキーとモデルを使って、TypeSafe の Jev に質問します。
自分でホストするプラットフォームの場合、llama.cpp、vLLM、LiteLLM、または Ollaya を使う場合は、decisionlint.ask.endpoint にリッスンしている完全な URL を、decisionlint.ask.endpointModel に提供するモデルの ID を設定してください。パスが /systemone または /decisions で終わらない場合は、decisionlint.ask.endpointShape に typesafe または openai を設定します。その後、このファイルについて自分のエンドポイントのモデルに質問する を実行します。endpoint キーが設定されている場合はそれを送信します。設定されていない場合は、SDK が読み取るシェイプに応じて TYPESAFE_API_KEY または OPENAI_API_KEY のキーを送信します。どちらのキーもない場合はキーを送信しません。これがローカルの llama.cpp に接続する方法です。エンドポイントはユーザー設定でのみ指定できるため、リポジトリによってキーの送信先を任意のホストに指定されることはありません。
実行する前に知っておくこと:
- API キーを使い、クレジットを消費します。 質問ごとに 1 件、リクエスト本文ごとにさらに 1 件のリクエストが送信され、Jev ではそれぞれの入力トークンは約 800 個、Luna ではその 2 倍です。TypeSafe の公開価格では質問 1 件あたり数千分の 1 セント、OpenAI では 1〜2 セントの 100 分の 1 程度です。送信前に表示される件数は切り上げた推定値であり、プラットフォームの請求額とは異なる場合があります。
- 送信されるのは質問のみです:種類、指示、基準、ID です。
decisionlint.ask.sendStateを有効にしない限り、stateは送信されません。有効にすると、ファイルに書き出された state も送信され、さらに 2 件のチェックが実行されます。state に各質問が尋ねている内容が含まれているか、また、読み手に指示を与えるテキストが含まれているかを確認します。 - 実行時に組み立てられる部分を含む質問は送信されません。 概要には、送信対象から除外された質問の数が表示されます。
- 1 回の実行で送信されるリクエストは、
decisionlint.ask.maxCalls件までです。デフォルトは 25 件です。 - 信頼されていないワークスペースでは無効です。 有効にするには、Workspaces: Manage Workspace Trust を実行してフォルダーを信頼します。
- ファイルを編集すると、検出結果は消えます。古いテキストに対する結果だからです。チェック中にファイルを編集するか閉じると、チェックは停止します。
- 各検出結果には、Jev が示した確率が表示されます。 数値が添えられた主張として扱い、判定として受け取らないでください。
decisionlint.ask.confirm を有効にすると、まず送信するリクエスト数、トークンのおおよその数、費用を知らせ、確認を待ちます。デフォルトでは無効です。コマンドの実行を、送信する判断とみなします。
質問を調査する
質問の中にカーソルを置き、DecisionLint: Probe the Jev Question at the Cursor を実行します。その質問を、隣に記述された state に対して、記述どおりに 3 回送信し、さらにレイアウトを変更して送信します。選択肢の順序を逆にする、選択肢名を隠す、レベルの順序を逆にする、基準を取り除く、といった変更を加えます。回答が変わったかどうかを示すレポートが開きます。
選択肢の順序だけを変えたときに回答が変わるなら、その質問では決定できていません。同一のリクエスト 3 件で回答が一致しない場合は、判定できるほど明確ではありません。
ファイルに state が記述されている必要があり、その state が送信されます。リクエストは 5〜6 件分の費用がかかります。
この拡張機能でネットワークを使う機能はほかにありません。コマンドラインでは、--ask のみがネットワークを使います。
プロジェクト設定
プロジェクトに decisionlint.json を置くと、エディターとコマンドラインの両方がそれを読み込みます。これにより、執筆中に確認できる内容と CI の報告内容が一致します。
{
"rules": { "DEC004": "error", "DEC112": "off" },
"fallbackOptions": ["other", "none", "unsure"],
"ignore": ["DEC004:department"],
"exclude": ["fixtures", "**/*.generated.ts"]
}
exclude には、リント対象から除外するファイルやフォルダーを、設定ファイルからの相対パスで指定します。** はフォルダーをまたぎ、* は 1 つのフォルダー内にとどまります。スラッシュを含まない名前は、どの階層でも一致します。エディターとコマンドラインでは、同じファイルが除外されます。
リント対象のファイルから上方向に探し、最も近いファイルが適用されるため、フォルダーごとに設定ファイルを置けます。設定ファイルが適用される場合、エディターの rules、fallbackOptions、ignore 設定は置き換えられます。読み取れない場合は何もリントされず、ステータスバーに理由が表示されます。不明なキーはエラーになるため、入力ミスによってルールがひそかに有効にならないことはありません。
検出結果を 1 件だけ非表示にするには、電球アイコンを使います。Disable DEC004 for this line または for this file を選ぶと、コメントが自動で書き込まれます。厳密な JSON にはコメントを記述できないため、検出結果を非表示にするには ignore を使います。
伝えられないこと
- 整形式の質問が、あなたのデータに対して正しいかどうか。 それを判断するには、ラベル付きの例と Jev への問い合わせが必要です。
- 確認できない値に関すること。 変数から作られた質問は読み取れないものとして報告され、ステータスバーに件数が表示されます。一部が読み取れなかったファイルを、問題なしとして表示することはありません。
- 表現に関するすべてのこと。
DEC101からDEC112は、英語のテキストに対するヒューリスティックです。ルールが有効になるのは、私たちの実行環境またはほかの人の環境で、質問の書き方が悪いために回答や Jev に対する信頼度が損なわれた場合だけです。また、調整に使っていない公開コードの検出結果のうち、少なくとも 10 件中 9 件で正しい場合に限り、有効なままになります。TypeSafe のドキュメントに記載された失敗モードを説明する 4 つのルール、DEC104、DEC107、DEC108、DEC111は、jev-1.13.0では失敗しなかったため、無効になっています。いずれかを有効にするには、decisionlint.rulesで切り替えてください。さらに 2 つのルールは、検出のたびに誤りだったため、0.4.0 で削除されました。 - 英語以外の質問に関すること。
- 単独のオブジェクトに不足しているもの。
questionsマップの外にある{ type, instructions }は、テンプレートまたはビルダーの一部かもしれないため、criteriaの不足はリクエスト内でのみ報告されます。
DEC004 は情報提供のみのルールです。根拠となる助言が条件付きだからです。選択肢がすべての入力を網羅しない可能性がある場合は、フォールバックを追加してください。TypeSafe 独自のドキュメントにある Choice の例 11 件中 9 件で検出されます。選択肢ですべてを網羅している場合は、その質問について無効にしてください。
検出結果の抑制
コード内では次のようにします。
// decisionlint-disable-next-line DEC004
const side = { type: 'choice', instructions: 'Heads or tails?', criteria: { heads: null, tails: null } };
decisionlint-disable-line は同じ行を対象とし、decisionlint-disable はファイル全体を対象とします。すべてのルールを抑制するには、コードを省略してください。
何も抑制しないコメントは DEC010 として報告されるため、検出結果を修正したあとに残したコメントが、後で新しい検出結果を隠すことはありません。
JevLint-LE 用に書かれたものも引き続き機能します。jevlint-le-disable コメントと、コメント、rules、ignore 内の JEV コードは、今後も読み取られます。すべての検出結果には DEC コードが記載されます。
修正
ユーザーの判断なしに修正できる検出結果もあります。たとえば、API が true を受け取る箇所に yes と書かれた Noul の criteria キー、誤記された質問タイプ、誤った形式の criteria などです。npx decisionlint --fix を実行すると修正され、実行結果のサマリーには修正対象の件数が表示されます。
エディターでは、保存時の修正も同じ処理を行います。
{ "editor.codeActionsOnSave": { "source.fixAll.decisionlint": "explicit" } }
フォールバックの選択肢を追加することと、モデルを固定することは、動作中のリクエストを変えてしまうため、自動で書き込まれることはありません。これらは電球メニューに表示されたままになります。
JSON にはコメントを記述できないため、設定を使用してください。
{ "decisionlint.ignore": ["DEC004:side"] }
CLI
エディター以外でも、CI や VS Code 以外のエディターで同じ lint を実行できます。
エディターと CI で同じバージョンを使う
ほかのリンターと同じように、プロジェクトにインストールしてください。
npm install --save-dev decisionlint
エディターは拡張機能に同梱されたコピーではなく、プロジェクト内のコピーを使って lint を実行します。そのため、入力中に表示される内容は、CI で npx decisionlint を実行したときの結果と同じになります。バージョンは package.json に応じて変更され、全員に一度に適用されます。プロジェクト内のコピーが使用されている間、ステータスバーには project 0.5.2 と表示されます。
何もインストールされていない場合、拡張機能は設定不要で独自のコピーを使って lint を実行します。
次の場合も、拡張機能は独自のコピーを使用します。理由はツールチップに表示され、ステータスバーには project has 0.2.0 と表示されます。
- コピーの読み込みでコードが実行されるため、ワークスペースが信頼されていない
- エディターが読み込める最初のバージョンである 0.3.0 より、コピーのバージョンが古い
- コピーの読み込みに失敗する、またはその種類のファイルを読み取れない
コピーの package.json を読み取れない場合、表示するバージョンがないため、ステータスバーには project copy unreadable と表示されます。この場合も、理由はツールチップに表示されます。
Ask コマンドとプローブは、プロジェクトに何がインストールされていても、常に拡張機能独自のコードを実行します。
npx decisionlint src/ # a directory, searched for files it reads
npx decisionlint request.jev.json # one file
npx decisionlint --format github . # annotations on a pull request
実行が成功した場合は 0、検出結果によって失敗した場合は 1、指定された処理を実行できなかった場合(不明なオプション、パスの指定漏れ、読み取る対象がない場合)は 2 を返します。エラーがあると実行は必ず失敗します。警告は --max-warnings を超えた場合にのみ失敗の原因になります。
| オプション | 説明 |
|---|---|
--format <stylish|compact|json|github|sarif|junit> | 検出結果の出力形式です。stylish はファイルごとにまとめるデフォルトの形式です。compact は path:line:column の形式で 1 行に 1 件ずつ出力します。sarif はコードスキャン向け、junit はテストレポーター向けです。-f も使用できます |
--rule <CODE=level> | 1 つのルールを off、hint、info、warning または error に設定します。コードの代わりにルール名を使うこともできます。また、warn は warning を意味します |
--config <file> | この設定ファイルを使用し、対象ファイルの近くにある decisionlint.json は使用しません。-c も使用できます |
--max-warnings <n> | n 件を超える警告が報告された場合に失敗させます |
--stdin-filename <path> | 標準入力を指定したファイルとして lint します |
--fix | API が拒否する内容のみを修正し、修正を適用します |
--quiet | エラーのみを出力します |
--ask | 各質問についてモデルにも問い合わせます。モデル ID が示すプラットフォームに質問を送信します。デフォルトでは TypeSafe に TYPESAFE_API_KEY を使用します。--ask-model gpt-6-luna の場合は OpenAI に OPENAI_API_KEY を使用します。OpenRouter、Vercel AI Gateway、LLM Gateway、Liquid AI の場合は、それぞれのプラットフォーム名の表記を使用します。または、--ask-endpoint で指定した宛先に送信します |
--ask-plan | --ask で送信される内容を表示し、送信は行いません |
--ask-platform <id> | --ask の送信先を明示します。typesafe、openai、openrouter、vercel、llmgateway または liquid を指定でき、それぞれ独自のキー変数と、各プラットフォームの表記によるデフォルトモデルを使用します。指定しない場合、モデル ID の表記に応じた送信先が選択されます |
--ask-model <id> | --ask で問い合わせるモデルです。Jev のバージョン、OpenAI の Decisions API 向けの gpt-6-luna、または別のプラットフォームの表記によるモデル ID を指定できます。デフォルトは jev-1.13.0 です |
--ask-endpoint <url> | --ask の送信先となる完全な URL です。セルフホストするプラットフォーム、またはモデル名の表記からホストを特定できないゲートウェイに使用します。DECISIONLINT_ASK_ENDPOINT からも読み取ります。このツールが認識していないホストには、その形式に対応するキーを送信するか、キーを送信しません |
--ask-shape <shape> | --ask-endpoint のパスが /systemone または /decisions で終わらない場合に送信する形式です。typesafe または openai を指定できます。DECISIONLINT_ASK_SHAPE からも読み取ります |
--ask-max-calls <n> | 1 回の実行で --ask が送信できるリクエストの最大数です。デフォルトは 25 です |
--ask-send-state | --ask と併用すると、ファイルに書き出された状態も送信します |
--color, --no-color | デフォルトの形式に色を付けるか、色を付けないようにします。どちらも指定しない場合、NO_COLOR が設定されていなければ、ターミナルでは色付きで出力します |
--no-error-on-unmatched-pattern | 対象パスに lint するファイルがなくても成功させます |
--mcp | MCP サーバーとして実行します |
サマリー行には、全文を読み取れなかった質問の数、サイズが大きいためスキップしたファイル、読み取れなかったフォルダーまたはファイルが必ず示されます。リンクされたフォルダーはたどりません。--ask を指定しない限り、Jev に問い合わせるチェックは実行せず、ネットワークも使用しません。
CI とコミット前
GitHub では、このアクションがプルリクエストに注釈を付けます。
- uses: nolindnaidoo/[email protected]
with:
paths: src
GitHub のコードスキャンでは、SARIF を出力してアップロードします。
- run: npx decisionlint --format sarif src > decisionlint.sarif
continue-on-error: true
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: decisionlint.sarif
--format junit は、Jenkins、GitLab、および多くのテストレポーターが読み取る XML を出力します。実行を失敗させるのはエラーのみであるため、ここで失敗ケースとなるのもエラーのみです。
pre-commit との併用:
- repo: https://github.com/nolindnaidoo/decisionlint
rev: v1.0.1
hooks:
- id: decisionlint
モデルに質問する
--ask は、lint の後に判定モデルへ質問するチェック(DEC301 から DEC312)を実行します。ネットワークを使用する唯一のオプションであり、設定ファイルで有効にすることはできません。
npx decisionlint --ask-plan src/ # what it would send. No key, nothing sent
TYPESAFE_API_KEY=... npx decisionlint --ask src/ # send it
--ask-platformは送信先を指定します。typesafe、openai、openrouter、vercel、llmgateway、liquidのいずれかを指定でき、それぞれに固有の表記によるデフォルトモデルと、対応するキー変数(TYPESAFE_API_KEY、OPENAI_API_KEY、OPENROUTER_API_KEY、AI_GATEWAY_API_KEY、LLM_GATEWAY_API_KEY、LIQUID_API_KEY)があります。指定しない場合、プラットフォーム固有の表記を使った--ask-modelの値、OpenRouter の場合は~typesafe/jev-latestを指定すると、そのプラットフォームに送信されます。単独の ID を指定した場合は、そのベンダーに送信されます。キーは指定された変数からのみ読み取られ、表示されることはありません。--ask-endpointまたはDECISIONLINT_ASK_ENDPOINTを指定すると、自分でホストするプラットフォームに送信できます。パスから形式を判別できない場合は、--ask-shapeも指定します。openai/gpt-6-luna-decisionsのようにホストを特定できない表記は、これらを指定しない限り拒否され、何も送信されません。- 実行時に組み立てられる部分を含む質問は送信されません。サマリーには保留された質問の数が表示されます。
--ask-send-stateを追加しない限り、状態は送信されません。--ask-max-callsは実行全体の上限です。上限を超える場合、実行は終了コード 2 で終了します。そのため、プロジェクトの一部だけをチェックした状態でジョブが成功することはありません。- キーが拒否された場合、リクエストが失敗した場合、または実行を中止した場合も、終了コード 2 で終了します。また、予定していたリクエスト数のうち、何件の回答を得たかが表示されます。
- これらの検出結果はデフォルトでは警告以下であるため、
--ruleで重大度を引き上げるか、--max-warningsを指定した場合にのみ実行が失敗します。
コマンド
すべてのコマンドにショートカットを割り当てることができます。Keyboard Shortcuts を開いて DecisionLint を検索し、一覧の任意のコマンドで割り当てたいキーを押してください。初期状態ではどのコマンドにも割り当てられていないため、現在使用中のショートカットと競合することはありません。
または、keybindings.json に記述することもできます。以下のキーは一例です。
[
{ "key": "ctrl+alt+j", "command": "decisionlint.lintFile", "when": "editorTextFocus" },
{ "key": "ctrl+alt+k", "command": "decisionlint.askJev", "when": "editorTextFocus" }
]
| コマンド | ID |
|---|---|
| このファイル内の質問を lint | decisionlint.lintFile |
| ワークスペース内の質問を lint | decisionlint.lintWorkspace |
| 設定を開く | decisionlint.openSettings |
| このファイルについて Jev に質問 | decisionlint.askJev |
| このファイルについて Luna に質問 | decisionlint.askLuna |
| OpenRouter 経由でこのファイルについて質問 | decisionlint.askOpenRouter |
| Vercel AI Gateway 経由でこのファイルについて質問 | decisionlint.askVercel |
| LLM Gateway 経由でこのファイルについて質問 | decisionlint.askLlmGateway |
| このファイルについて Liquid d1 に質問 | decisionlint.askLiquid |
| エンドポイントのモデルにこのファイルについて質問 | decisionlint.askEndpoint |
| TypeSafe API キーを設定 | decisionlint.setTypeSafeApiKey |
| OpenAI API キーを設定 | decisionlint.setOpenAIApiKey |
| OpenRouter API キーを設定 | decisionlint.setOpenRouterApiKey |
| Vercel AI Gateway API キーを設定 | decisionlint.setVercelApiKey |
| LLM Gateway API キーを設定 | decisionlint.setLlmGatewayApiKey |
| Liquid AI API キーを設定 | decisionlint.setLiquidApiKey |
| エンドポイント API キーを設定 | decisionlint.setEndpointApiKey |
| API キーをクリア | decisionlint.clearApiKeys |
| カーソル位置の質問をプローブ | decisionlint.probeQuestion |
Ask コマンドとプローブはキーを使ってリクエストを送信するため、誤って押さないキーを割り当ててください。
設定
| 設定 | デフォルト | 意味 |
|---|---|---|
decisionlint.rules | {} | ルールごとの重大度を、コードまたは名前で指定します:off、hint、info、warning、error。存在しないルール名またはレベルを指定すると、decisionlint.json の場合と同様に、その理由を示して lint を停止します |
decisionlint.fallbackOptions | other、none、unknown、unclear、uncertain、unsure、ambiguous、undetermined、neither、not stated、not applicable、insufficient evidence、cannot tell、n/a、およびその他5言語での「other」 | DEC004 で選択肢をフォールバックにする語句です。選択肢の名前にこれらのいずれかが単語として含まれていれば該当します。そのため、none_implied と other_or_unclear も該当します |
decisionlint.ignore | [] | 除外する CODE:questionId エントリー |
decisionlint.target | "" | 各リクエストの送信先となるプラットフォームです。制限を適用するために使います。空の場合は、各モデル ID から読み取ります |
decisionlint.ask.models | typesafe の場合は jev-1.13.0、それ以外は各プラットフォーム固有のデフォルト | プラットフォームごとに、Ask コマンドが送信するモデル ID です。TypeSafe のデフォルトは、チェックの調整に使われたバージョンです |
decisionlint.ask.keys | 空 | 各プラットフォームの API キーと、指定したホスト用の endpoint です。キーチェーンを使わず、ここに入力したい場合に設定します。ユーザー設定のみで、同期されません |
decisionlint.ask.endpoint | "" | Ask the Model at My Endpoint が送信先とする URL です。自分でホストするプラットフォーム用です。ユーザー設定のみ |
decisionlint.ask.endpointShape | "" | エンドポイントのパスから形式が判別できない場合に、エンドポイントへ送る形式を typesafe または openai で指定します |
decisionlint.ask.endpointModel | "" | エンドポイントへ送るモデル ID です |
decisionlint.ask.maxCalls | 25 | 1つの Ask コマンドが送信できるリクエストの最大数です |
decisionlint.ask.sendState | false | モデルが状態を確認できるよう、ファイルに記述された状態も送信します |
decisionlint.ask.confirm | false | 有料コマンドが何かを送信する前に、送信内容と費用を表示し、確認を待ちます |
decisionlint.include | JSON、JavaScript、TypeScript、Python、Rust、Go のファイル | ワークスペースコマンドが lint するファイルです |
decisionlint.exclude | node_modules とビルド出力 | ワークスペースコマンドがスキップするファイルです |
decisionlint.maxFileSizeBytes | 1000000 | これより大きいファイルはスキップ対象として報告されます |
decisionlint.notificationsLevel | important | 通知で表示する情報量です。all は各コマンドの後に概要を追加し、silent はコマンドを実行できなかった場合にのみメッセージを表示します。検出結果は常にエディターに表示されます |
プライバシーとセキュリティ
- Lint はネットワークを使用しません。 拡張機能、コマンドライン、MCP サーバーはキーなしで lint を実行し、何も送信しません。テレメトリーも収集しません。
- プラットフォームに接続するのは Ask コマンド、probe、
--ask、および送信を行う2つの MCP ツールだけです。 キーを使って接続し、実行した場合にのみ接続します。decisionlint.ask.sendStateまたは--ask-send-stateを有効にしない限り、送信するのは質問のみで、stateは送信しません。probe は質問の横に記述された状態を送信します。 - キーはリポジトリに保存されません。 Set ... API Key コマンドは、オペレーティングシステムのキーチェーンにキーを保存します。
decisionlint.ask.keysとdecisionlint.ask.endpointはユーザー設定でのみ設定でき、Settings Sync の対象外です。そのため、リポジトリが任意のホストにキーを送るよう指定することはできません。コマンドラインは環境変数からのみキーを読み取り、キーを表示することはありません。 - 信頼されていないワークスペースからは送信できません。 Ask コマンドは無効になり、プロジェクト独自のリンターも読み込まれません。リンターを読み込むとワークスペース内のコードが実行されるためです。
- MCP サーバーは何も書き込みません。 キーはクライアントが MCP サーバーを起動した環境、または MCP サーバーのディレクトリにある
.env.localや.envから読み取り、ツールの引数からは読み取りません。そのため、エージェントのトランスクリプトにキーが記録されることはありません。
ドキュメント
| 内容 | 場所 |
|---|---|
| 製品の概要と今後の予定 | SPEC.md |
| 構築方法と構成の仕組み:アーキテクチャ、不変条件、リリース | AGENTS.md |
| すべてのルールと、検出される例・されない例 | docs/rules |
| 各しきい値と、モデル・プラットフォームごとの検出結果 | docs/cutoffs.md |
| 変更内容 | CHANGELOG.md |
| ツールのページと、同じファミリーのその他のツール | letools.dev/tools/decisionlint |
開発
bun install
bun run typecheck && bun run lint && bun run test
bun run build
bun run test:integration # real VS Code against samples/
bun run package # release/decisionlint-<version>.vsix
bun run test:e2e-vsix # the packaged VSIX in a clean profile
AGENTS.md はエンジニアリング標準です。SPEC.md には製品の概要と今後の予定が記載されています。samples/ は、実際の VS Code を操作する bun run test:integration で使う、意図的に誤りを含めたワークスペースです。
LE ファミリーのその他のツール
あらゆるモデルが作業する際に使える、16 個の単機能ツールです。それぞれに Rust CLI と MCP サーバーが付属します。詳細はこちら:letools.dev
取り出す
- String-LE — コードベース内のすべての文字列を抽出し、人が読めるようにします
- Numbers-LE — コードベース内のハードコードされた数値をすべて抽出し、人が確認できるようにします
- Units-LE — 単位付きのすべての数量を正規化して抽出し、曖昧なものは名前を示して除外します
- Dates-LE — すべての日付とタイムスタンプ、およびそれぞれが解決される正確な時点を抽出します
- IDs-LE — すべての UUID、ULID、NanoID、ObjectId、Snowflake を抽出し、内部の時刻をデコードします
- IPs-LE — すべての IP アドレス、CIDR ブロック、MAC アドレスを正規化して抽出し、スコープごとに分類します
- URLs-LE — コードベース内のすべての URL を、プロトコルと正確な位置とともに抽出します
- Paths-LE — コードベース内のすべてのファイルパスを抽出し、現在も何かを指しているかどうかを示します
- Colors-LE — コードベース内のすべての色を抽出し、パレットに含まれていない色を示します
チェックする
- Regex-LE — コードベース内のすべての正規表現を見つけ、壊滅的なバックトラッキングを引き起こす可能性があるものを報告します
- Versions-LE — リポジトリ内のマニフェストで、依存関係のバージョン指定が異なる箇所を見つけます
- i18n-LE — プロジェクトが使用している i18n ライブラリを特定し、そのライブラリのルールに従ってカタログを監査します
- Scrape-LE — スクレイパーを作成する前にページをスクレイピングできるか確認し、判定できない場合はその旨を示します
保護する
- Secrets-LE — コードベース内のハードコードされた認証情報を見つけ、レポートには決して出力しません
- EnvSync-LE — ツリー内の dotenv ファイルを比較し、どのファイルにどのキーが欠けているかを示します
- Unicode-LE — 意味を隠す Unicode、つまり双方向制御文字、不可視文字、同形異字、混在スクリプトを見つけます
各ツールは単独で機能します。共有クレートも、公開されたコアもありません。2 つのツールが同じ結果を出すのは、どちらも正しい答えを出したためです。
お問い合わせ — nolindnaidoo.com · GitHub · LinkedIn
nolindnaidoo によるその他のプロジェクト
Rust — pixelcoords と pixelactions はひとつのループを構成します。pixelcoords が 場所 を答え、pixelactions がそこで 操作 します。それぞれ独自のツールと独自の役割を持ち、LE ファミリーには属しません。
- pixelcoords — 画面を固定し、領域に印を付け、ピクセル単位で正確な座標と切り抜きを取得します pixelcoords.dev · crates.io · docs.rs
- pixelactions — 人間が検証した座標を受け取り、操作を実行して、正しく反映されたことを確認します pixelactions.dev · crates.io · docs.rs
ライセンス
MIT © nolindnaidoo
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。