dvalincode について
dvalincode(Dvalin)は、人間や AI エージェントが書いたコードを対象とするセキュリティスキャンと修正検証のツールです。スキャンは決定的で、モデルや API キーを必要とせず、再スキャンとプロジェクト自身のテストの実行により、オフラインで再確認できる Verified Fix Record を生成します。判定は修正を書いたモデルではなくツールが行います。
主な機能
- 01アカウントやAPIキー不要のローカル決定的スキャン
- 02オフラインで再確認できるVerified Fix Record
- 03修正後の再スキャンとプロジェクトテストの実行
- 04修正で導入された問題を検出しregressedと判定
- 05Snyk や Semgrep などの任意のスキャンエンジン
- 06--until-clean による上限付きの修正ループ
活用シーン
- 01CIでプルリクエストのセキュリティスキャンを実行し差分に結果を表示
- 02コーディングエージェントが提案したセキュリティ修正の有効性を検証
- 03マージ前にCIゲートと同じスキャナーで修正を確認
MCP 対応
MCP ツール dvalin_verify_findings を提供し、セキュリティ検出事項の修正が有効かどうかを検証します。MCP クライアントはこのツールを呼び出して修正の判定を取得できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
英語 · 中文 · 🌐 dvalincode.dev
人間と AI エージェントが書いたコードのための、オープンなセキュリティエンジニアリング。
すべての修正に、その証拠が添えられます。
エージェントがセキュリティ上の問題を修正したとき、その修正が機能したかどうかを誰かが判断する必要があります。ほぼすべてのツールは、修正を書いたモデルに判断を求めます。これは、モデル自身の利益に反する問いには答えられないモデルにとって、最も答えにくい問いです。
Dvalin はその代わりに判断し、証拠を提示します。 再スキャンを行い、プロジェクト独自のテストを実行し、自ら起動したプロセスの終了コードを読み取ります。修正を書いたのが誰か(当社のエージェント、Claude Code、Codex、Copilot、人間)は記録されますが、判断には一切関与しません。その結果が 検証済み修正レコード(Verified Fix Record) です。ネットワーク接続も Dvalin の状態もないオフラインのノート PC で、誰でも再確認できる小さな JSON ファイルです。
dvalin verify-fix fix-record.json
Fix record 2c9d71ac03e0 · VERIFIED · scan-and-checks
executor: claude-code (recorded, not consulted)
targets: 1 before · 0 remaining
coverage: complete → complete
introduced: 0 (gate high/new)
outcome: verified
✓ test: npm run test (exit 0)
audit: run verify-36509f42 @ 414644c75af0
このレコードが示す内容は、意図的に限定されています。これらの問題は解消され、これらのチェックが通過したことが確認されたということです。コードが安全だと主張するものではありません。Dvalin は、そのように解釈されないようにします。すべてのレコードにはスキャンで実際に確認した範囲が記録され、どのチェックでも確認できない修正は合格になりません。 オープンなプロファイル →
修正は変更であり、変更は問題を取り除くだけでなく、追加することもあります。そのため、レコードには初回スキャンでは見つからず再スキャンで検出された内容と、判定が行われた際のゲートしきい値も記録されます。eval を取り除いて SQL インジェクションを導入する修正は regressed と記録され、検証に合格しません。発行者が確認すらしていないレコードも同様です。introduced: not determined は不合格になります。問いを省略した検証者が、その問いを尋ねて問題を見つけた検証者より高く評価されてはなりません。
Dvalin は、コード生成からマージまでの間に位置する、独立したセキュリティランタイムです。人間、コーディングエージェント、CI は、検出、修正、検証に同じバージョン管理された契約を使用します。単独で動作するほか、ポータブルな SARIF を介して Codex Security などの専門システムと相互運用できます。組み込みのコーディング機能は修正の実行役であり、信頼境界ではありません。また、あらゆる汎用コーディングエージェントと競合することを目指すものでもありません。 セキュリティエージェント戦略をご覧ください。
⏱️ 30 秒、インストール不要、API キー不要
npx dvalincode security scan .
# After installing the package: dvalin scan .
これだけです。組み込みルールで、現在のディレクトリに対するインジェクション、ハードコードされたシークレット、XSS、eval、安全でないシェルの使用を検査し、検出した内容を表示します。アカウントもモデルも設定も不要で、コードがマシンの外に出ることはありません。デフォルトのポリシーでは Dvalin Built-in のみが実行されるため、最初のスキャンは必ず動作します。オプションのエンジンを明示的に追加するか、固定のインストールコマンドを確認してください。
dvalin scanners list
dvalin scanners install semgrep # review the command
dvalin scanners install semgrep --yes # execute it under Dvalin policy
CI ゲートで使うスキャナーで測定する
マージをブロックするのが Snyk なら、Snyk で検証してください。別のエンジンで「問題なし」と判定された修正でも、ゲートでは拒否される可能性があります。この不一致があると、エージェントによる 1 回の修正が、プッシュ、失敗、リベースの繰り返しにつながります。
npm install -g snyk && snyk auth # or set SNYK_TOKEN
dvalin scan . --scanners builtin,snyk-code,snyk-oss
snyk-code(SAST)と snyk-oss(依存関係)は、ほかのエンジンと同様です。検出結果には同じフィンガープリント、カバレッジ、ゲートが適用され、ログインに失敗した場合はエンジンエラーとして報告されます。その場合、スキャンの結果は clean ではなく、必ず partial になります。Snyk Code はソースコードを Snyk にアップロードするため、これらのエンジンは名前を指定した場合にのみ実行されます。dvalin.security.json で名前を指定してポリシーに含めると、reverify によってすべての修正がこれらのエンジンで判定されます。
Snyk 自身が承認済みとして報告する無視設定は適用され、カバレッジ除外として一覧表示されます。レビュー対象の変更で追加された無視設定は適用されません。修正を判定する際、.snyk、.semgrepignore、.trivyignore、.dvalincodeignore はベースコミットのバージョンに戻され、新しいインラインマーカー(deepcode ignore、nosemgrep、nosec、NOSONAR、…)は空にされます。そのため、修正せずに検出結果を無効化した場合、その修正は不合格になります。抑制は、修正ではなく、その変更の中で人が行うリスク判断です。
同じ判定は、Dvalin が「検証済み」とするすべての場面に適用されます。修正ループ、dvalin verify、MCP の dvalin_verify_findings ツール、単一ラウンドの --fix --verify、CI の reverify が該当します。これらの記録は dvalin-fix-record/v3 です。これにより、脆弱性を修正せず隠した修復(同種の別のシンク、脆弱性のあるファイルの削除、テストやアサーションの削除)も不合格になります。変更を特定できない Git リポジトリ外では、記録は v2 のままとなり、回避の評価が行われていないことが示されます。
ゲートを通過するまでループさせる
dvalincode dvalin . --scanners builtin,snyk-code,snyk-oss --until-clean --max-rounds 3 --executor codex
--until-clean を指定すると、1 回の修正試行が上限付きのループになります。エグゼキューターが編集し、Dvalin が同じエンジンで再スキャンして、プロジェクトのチェックを自ら実行します。エグゼキューターに送られるのは、まだ問題が残っているものだけです。つまり、依然として存在する対象、変更によって新たに発生した検出結果、最後の出力行とともに示される失敗したチェック、追加された抑制設定です。エグゼキューターはそれらを再度修正します。依存関係に関する検出結果が最初に処理されます。
すべての対象がなくなり、新たにブロック要因が発生せず、すべてのチェックに合格したとき(verified)、ラウンド数の上限に達したとき、ラウンド後も同じ問題が残るか未解決項目が減らなくなったとき(stalled)、人による対応が必要な対象があるとき(固定バージョンのない依存関係など。not-auto-fixable)、またはエンジンやチェックを実行できないとき(unverifiable)に、ループは停止し、その理由を示します。エグゼキューターが追加した抑制設定は各スキャンの前に元に戻され、削除されるまで未解決の問題として残ります。どの結果でも修正記録が作成され、各ラウンドは ~/.dvalincode/security/fix-loops/ に記録されます。dvalin loop-stats はこれらのログを集計し、ループが verified に達した頻度、グリーンになるまでのラウンド数の中央値と p90、どの停止ルールが適用されたか、ループが停滞したときに何が未解決だったかを表示します(--json、--since、--executor で絞り込めます)。
判定基準を変えずに、ラウンドを短く保ちます。エンジンは並行して実行されるため、スキャンにかかる時間はエンジンごとの時間の合計ではなく、最も遅いエンジンの実行時間です。ラウンド間では、1 ファイルずつ解析するエンジン(Dvalin Built-in、Semgrep)は、変更があったファイルと対象が含まれるファイルだけを再スキャンします。それ以外のエンジンは常にツリー全体をスキャンします。この範囲を絞ったスキャンはエグゼキューターの指針としてのみ使われます。ループの停止につながるラウンドでは、同じツリー全体を対象にしたフルスキャンで再判定し、結果を決めて記録するのはフルスキャンだけです。--full-rescan を指定すると、毎ラウンドすべてをスキャンします。loop-stats はラウンドごとのスキャン時間と、フルスキャンによって判定が変わった頻度を報告します。
コードの検出結果については、ループはまず再現テストを要求します。これはテストのみで構成され、修正前のコードに対して Dvalin が実行し、失敗する必要があります。失敗の理由はアサーションの失敗でなければならず、テストランナーがないことや、まだ書かれていない import が原因であってはなりません。テストはハッシュ化され、修正後は変更せずに合格する必要があります。この実行結果は記録上のチェックにもなります。どのテストでも再現できない検出結果があると、修正前にループは not-reproduced で停止します。誤検出の可能性があるため、人がトリアージします。ランナーは vitest、jest、mocha、node --test、pytest、go test から推定されます。または --repro-command 'npx vitest run {files}' で指定するか、dvalin.security.json の reproduce で設定できます。エグゼキューターが選ぶことはありません。
各修正ラウンドでは、「スキャナーが検出しなくなった」状態を目指してエージェントが行う回避策も拒否します。たとえば、シンクを隣接する別のものに置き換える(eval → new Function、exec → shell: true を指定した spawn)、脆弱なファイルを削除する、テストを削除する、アサーションを削除するといった操作です。実際のところ、最初の回避策ではルールに一致しなくなるため、スキャナーだけならだまされます。これを検出するのが、再現テストと回避チェックです。
今日の main にリベースし、CI で完了させる
dvalincode dvalin . --scanners builtin,snyk-code,snyk-oss --until-clean \
--rebase-onto origin/main --executor codex --draft-pr --sign-key ci.key
--rebase-onto を指定すると、ループは開始前と各ラウンドの後にフェッチして修正を upstream にリベースし、その状態で判定します。競合が発生した場合は、競合しているファイルのみを「git を実行しないこと」という指示とともに実行者に渡します。Dvalin はリベース自体を続行します。ファイルに競合マーカーが残っている場合、競合は解決されていません。解決できない場合はリベースを中止し、ツリーを元の状態のままにして、ループは rebase-conflict として停止します。リベースのたびに新しいベースでベースラインを再スキャンするため、チームメイトが main に取り込んだ検出結果が修正のせいにされることはありません。
--draft-pr は .dvalin/fix-record.json に記録をコミットします。また、
docs/examples/dvalin-fix-loop.yml
はプルリクエスト上で reverify: true を指定して再実行します。ベースとヘッドを再スキャンし、チェックを再実行し、修正を適用した状態で再現テストを実行して失敗することを確認し、修正を元に戻して成功することを確認します。その後、CI キーで署名します。
「新たな高リスクの検出結果がない」ことを段階的にゲートするには、ポリシーとベースラインをリポジトリにコミットします。
dvalin init
dvalin baseline
dvalin scan
これにより dvalin.security.json と .dvalin/baseline.json が作成されます。抑制には理由が必要で、担当者と有効期限も指定できます。スキャン結果は、決定論的なゲート結果と再開可能なワークフロー ID を含む、バージョン管理されたエンベロープです。
または、すべてのプルリクエストで実行 — インストールは一切不要です
# .github/workflows/security.yml
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0 # so the scan can reach the base commit
- uses: arthurpanhku/[email protected]
with:
fail-on: high
diff: true # only report on what this PR changed
検出結果はプルリクエストの差分内と Security タブに表示されます。 API キーも、シークレットも、モデルも不要です。スキャンは決定論的で、ランナー上でローカルに実行されます。完全な例 →
diff: true を指定すると、プルリクエストで変更された行のみが報告されます。リポジトリが以前から抱えていた問題すべてではなく、この変更が 追加する 問題をゲートでブロックできるため、最初からクリーンではなかったコードベースにも導入できます。リポジトリ全体をスキャンするには、この指定を削除します。
各コメントには結果とともに、スキャンの 対象範囲 が complete、partial、unknown のいずれであるかが示されます。エンジンの半分が欠けた実行での「検出結果なし」は、完全な実行での「検出結果なし」と同じではないためです。
そして、差分の横に証明を公開する
パイプラインで修正記録が生成された場合は、同じアクションに渡します。
- uses: arthurpanhku/[email protected]
with:
fix-record: fix-record.json
ランナーはファイルだけから記録を再導出します。ハッシュを再計算し、記録自体の証拠から判定を再導出して、結果をプルリクエストに投稿します。発行後に編集された記録はここで失敗となり、ジョブも失敗します。
再導出で証明できるのは、記録が 自己整合している ことです。実際に何かを実行した人が記録を発行したことまでは証明できません。終了コードも含め、記録の各項目はすべて偽造して書き込めるものであり、自己整合した偽造記録も再導出に通ります。この隔たりを埋める方法は 2 つあります。ランナー上で主張を再実行することと、ランナーが観測した内容に署名することです。
🔏 Verified Fix Record
✅ ce504a995395 · VERIFIED · scan-and-checks
- repaired by claude-code — recorded, and not consulted for this verdict
- targets: 1 before → 0 remaining
- coverage: complete → complete
- introduced: none (gate high/new)
- outcome: verified
- ✓ test: `npm run test` (exit 0)
- audit chain: verify-eeb1bae7 @ 80881867270d
修復によってリグレッションが発生した場合は、同じ場所にその旨を表示し、ジョブも失敗させます。
❌ 916e2eeaf065 · NOT VERIFIED · scan-and-checks
- introduced: 1 finding(s) the first scan did not report (gate high/new)
- critical dvalin/sql-injection — src/db.ts:31
- outcome: regressed
ランナーで再実行し、確認した内容に署名する
- uses: actions/checkout@v5
with:
fetch-depth: 0 # the base commit has to be reachable
- run: npm ci # the project's checks run on the runner
- uses: arthurpanhku/[email protected]
with:
fix-record: fix-record.json
reverify: true
signing-key: ${{ secrets.DVALIN_SIGNING_KEY }} # optional
reverify: true の場合、申告された記録から使用されるのは、修正したとする対象と実行者が誰かだけです。それ以外はすべて再度確認されます。
- ベースコミットをチェックアウトしてスキャンするため、申告された各対象が実際にそのコミットに存在していたことが確認されます。記録によって、もともと存在しなかった問題の修正を功績として主張することはできません。
- ヘッドをスキャンするため、「解消済み」であることがランナー上で確認されます。
- プロジェクトのチェックをランナー上で実行します。チェック、ゲート、スキャナーはベースコミットの
dvalin.security.jsonから読み込まれます。独自のゲートを緩和したり、独自のチェックを削除したりするプルリクエストは、変更しようとしているルールに基づいて評価されます。 - これらの確認結果に基づいて新しい記録が発行され、検証に失敗した場合はジョブも失敗します。
signing-key を指定すると、新しい記録に署名します(Ed25519、ハッシュに対して署名)。キーはメモリに読み込まれ、プロジェクトのチェックが実行される前に環境から削除されるため、レビュー対象のコードから読み取ることはできません。これにより、後続のリリースジョブ、別のリポジトリ、監査担当者などが署名を必須にできます。
dvalin keygen --out ci # once; store ci.key as a secret, publish ci.pub
dvalin verify-fix record.json --trusted-key ci.pub
署名されていない記録や、指定したものとは異なるキーでしか署名されていない記録は、--trusted-key の指定時に失敗します。有効な署名によって分かるのは、この記録を保証したキーです。そのキーを信頼するかどうかは利用者が判断します。CI キーを信頼する理由は、CI ジョブが検証結果をコピーするのではなく、検証を再実行したことにあります。ローカルでは、dvalin reverify <record> --base origin/main で同じ再実行ができ、dvalin sign-fix で再導出された記録に署名できます。
FVP-1 §4a, §5a →
または、エージェントに呼び出させる
エージェントがコードを書くなら、それ以外の何かがコードをチェックする必要があります。DvalinCode は MCP サーバーなので、MCP に対応するエージェントなら次のことができます。
claude mcp add dvalin -- npx -y dvalincode mcp-serve --workspace .
1 つのコマンドで、実際に使用しているエディターを設定できます。
npx dvalincode mcp-install cursor # .cursor/mcp.json
npx dvalincode mcp-install vscode # .vscode/mcp.json
npx dvalincode mcp-install claude-code # .mcp.json
形式は異なり、誤りがあっても何も通知されません。VS Code ではサーバーを servers の下に、Cursor では mcpServers の下に設定するため、コマンドが適切な形式を使い、既存の設定に統合します。エディターと MCP →
dvalin_scan は diff: "uncommitted" を受け付けます。これにより、リポジトリに以前からあったすべての内容ではなく、エージェントが今書いた内容だけが報告されます。この違いが、実用的な回答と、以前から存在する指摘が延々と並ぶ結果を分けます。モデルを実行したり、対象のワークスペースを編集したり、Dvalin の状態を永続化したりすることはないため、クライアントはプレビューをデフォルトで許可できます。指摘を修正する場合、エージェントは dvalin_begin_verification を明示的に呼び出して、小規模なローカルワークフローを記録します。その後、フィンガープリントで指摘を取得し、dvalin_get_finding と dvalin_verify_findings を通じて独立した再スキャンを依頼できます。
ここが重要な点です。修正を書いたばかりのエージェントが、その修正について独立した判定を求められます。Dvalin は再スキャンを行い、プロジェクト独自のチェックを実行して、修正検証レコードを返します。対象となった内容、残っている問題、修正によって新たに持ち込まれた内容、判定に用いられたゲート、実行されたコマンドと Dvalin が確認した終了コード、実際にカバーされたコードベースの範囲が記録されます。修正を書いた主体も記録されますが、判定には一切関与しません。dvalin_verify_fix はオフラインでこのレコードを再導出するため、それを受け取るレビュー担当者は、発行元のツールを信頼する必要がありません。
FVP-1 → 応答には MCP の structuredContent が含まれます。スキャナーの準備状況は dvalin_list_scanners で確認できます。同じサーバーは、任意の実装ヘルパーとして dvalin_run_task のほか、セッションおよび監査証跡のツールも公開します。
以下の各クライアントでは、ハンドシェイクだけでなく、実際にツールを呼び出して動作を確認しています。どのクライアントをどのバージョンで、いつ確認したのかは、手書きのバージョン番号がいつの間にか古くなるため、文章ではなく表にまとめています。 統合サポート ↓ · エージェント連携 →
リポジトリには、Codex と Claude の両方に対応する 1 つのプラグインペイロードも含まれています。ネイティブマニフェスト 2 種類、共有のセキュリティゲートスキル、ローカル MCP サーバー設定を備えています。これをインストールすると、開発者全員がスキャン用プロンプトを覚えておかなくても、タスクのコンテキストからゲートを見つけられるようになります。Codex はスキャンの読み取り専用 MCP アノテーションに従います。Claude Code では設計上、MCP の権限を明示的に 1 つ許可する必要があります。このプラグインは、すべての権限を回避するよう求めるのではなく、スキャンのみを許可するルールを正確に記載しています。
いつもの作業環境で
1 つのサーバーに、それぞれのツールが期待する方法で接続できます。
| ハーネス | Dvalin の接続方法 |
|---|---|
| Claude Code | デュアルプラグイン または claude mcp add · スタンドアロンのスキル |
| Codex | デュアルプラグイン または codex mcp add · Codex Security との SARIF 相互運用 |
| Cursor | dvalincode mcp-install cursor |
| VS Code | dvalincode mcp-install vscode · Problems、カバレッジ/ゲートのステータス、オフラインでの VFR 検証に対応した拡張機能 — 開発済みですが、まだ公開されていません |
| Windsurf · Zed | 各ツールの設定から stdio MCP を利用 — サーバーコマンド |
| 任意の MCP クライアント | MCP レジストリ: io.github.arthurpanhku/dvalincode |
| GitHub Actions | Marketplace アクション — 検出結果をプルリクエストの差分にインライン表示 |
| 任意の CI | dvalin scan . --fail-on high、コードスキャン用に SARIF を出力 |
MCP の設定形式には互換性がありません。VS Code ではサーバーを servers の下に指定し、Cursor では mcpServers の下に指定します。形式を間違えるとエラーが表示されないまま失敗するため、mcp-install は適切な形式で書き込み、既存の設定に統合します。
エディターと MCP →
Codex Security と相互運用する
Codex Security は、完了して封印されたスキャンを SARIF としてエクスポートできます。Dvalin を Codex Security の非公開の状態ディレクトリに依存させずに、この移植可能な投影データをインポートできます。
DVALIN_CODEX_SCAN_DIR=/tmp/codex-security-results
npx @openai/codex-security scan . --output-dir "$DVALIN_CODEX_SCAN_DIR"
npx @openai/codex-security export "$DVALIN_CODEX_SCAN_DIR" \
--export-format sarif --source-root "$PWD" --output /tmp/codex-security.sarif
dvalin import /tmp/codex-security.sarif .
dvalin scan . --fail-on high
インポートすると、安定した Dvalin の修正ケースが作成されます。--no-persist を指定すると、バックログを変更せずに引き継ぎ内容を検証できます。Codex Security の元のマニフェスト、検出結果、カバレッジアーティファクトはまとめて保持してください。Dvalin は SARIF の検出結果の投影データをインポートしますが、封印されたバンドルを書き換えたり、カバレッジを独自に解釈したりすることはありません。
統合ガイド →
検出した問題を修正する
dvalincode dvalin . --fix --verify --draft-pr
このステップではモデルを使用します。使用するのは、お使いのモデル、または OpenAI 互換の任意のエンドポイントです。分離されたワークツリーで対象を絞った修正を準備し、テストを実行したうえで、ドラフト PR に進む前にクリーンな再スキャンを必須とします。自動マージは行わず、スキャン結果がクリーンでも、コードが安全である証明とはみなしません。
このアニメーションはモックではなく、実際のアプリケーションから作成されています。入力は、ユーザーが制御するテキストを評価していたコントリビューション用ルートを含む、OWASP NodeGoat を基にした Apache-2.0 ライセンスのサンプルです。
🛡️ 実際に実行された処理
Dvalin は、オープンソースのスキャナーによる証拠を、制御されたスキャン → 修正 → テスト → 再スキャン → PR 下書きのワークフローに変換します。上のアニメーションで示した実行結果を、実測値で紹介します。
| NodeGoat を元にした実際の実行 | 実行前 | Dvalin による修正後 |
|---|---|---|
| セキュリティ健全性(トリアージのヒューリスティック) | 22 / 100 · F | 100 / 100 · A |
| 検出結果 | 10 件(3 つのルール、2 つのエンジンで eval を検出) | 0 件 |
| テスト | 2 件成功 | 3 件成功。インジェクションのリグレッションテストを含む |
| スキャナーフリート | 4 / 4 完了 | 4 / 4 完了 |
スキャンと強化のコントロールプレーンでは、オープンソースのコンポーネントを使用します。
- セマンティック SAST には、Semgrep CE とコミュニティルールを使用します。
- ファイルシステムの脆弱性、シークレット、設定ミスの検出には、Trivy を使用します。
- 依存関係の脆弱性の検出には、公開されている OSV データベースと OSV-Scanner を使用します。
- DvalinCode の MIT ライセンスの組み込みルール、修正のオーケストレーション、テストと再スキャンのゲートに加え、その他の互換性のあるスキャナーからのインポートには SARIF 2.1 を使用します。
スキャナーは証拠を見つけ、優先順位を付けます。設定されたモデルがソースコードの変更を提案し、DvalinCode がその作業を制約して、差分を記録し、プロジェクトのテストを実行し、変更されたツリーを再スキャンしたうえで、PR の公開を明示的な操作にします。自動マージは行わず、スキャン結果に問題がないことがバグの不在を証明するとも主張しません。修正案の提案も完全にローカルかつオープンな状態に保つ必要がある場合は、Ollama を通じてオープンウェイトモデルを選択できます。ホスト型モデルのライセンスはプロバイダーによって異なります。
エージェントが何をしたかは、後から検証することもできます。
dvalincode report verify # re-derive the hash chain of the last run's audit log
🧩 統合のサポート
AI アシスタントを使って書かれたコードは、マージされるまでに 4 つの関係者を経由します。コードを書くエージェント、開発者がコードを読み返すエディター、コードを承認するプルリクエスト、そして結果を信頼する必要のあるレビュアーです。セキュリティに関する回答がこのうち 1 つの場所にしか存在しないなら、それはゲートではなく、次の段階で無視できる提案にすぎません。
Dvalin は 1 つの MCP サーバーと 1 つの決定論的なスキャンによって 4 つすべてを支え、誰が問い合わせても同じ回答が得られます。
| ワークフローの段階 | 使用する場所 | Dvalin の接続方法 | ステータス |
|---|---|---|---|
| コードを書く | Claude Code | デュアルプラグイン · claude mcp add · mcp-install claude-code | ✅ セッションで検証済み |
| Codex | デュアルプラグイン · codex mcp add · SARIF 相互運用 | ✅ セッションで検証済み · 以下に記録 | |
| Cursor | dvalincode mcp-install cursor | ⚙️ 設定を検証済み | |
| Windsurf · Zed | 各自の設定を通じた stdio MCP | ⚙️ ドキュメントあり、未検証 | |
| 任意の MCP クライアント | レジストリ io.github.arthurpanhku/dvalincode | ⚙️ 公開済み | |
| コードを読み返す | VS Code | mcp-install vscode · 問題、カバレッジ、ゲートのステータスを表示する拡張機能 | ✅ エディターで検証済み |
| マージを承認する | GitHub Actions | Marketplace のアクション — 差分で検出結果を確認し、修正記録をランナー上で再導出 | ✅ このリポジトリ自身の CI で実行 |
| 任意の CI | dvalin scan . --fail-on high、コードスキャン用に SARIF を出力 | ✅ 終了コードが契約 | |
| 結果を信頼する | オフラインの誰でも | dvalin verify-fix record.json --trusted-key ci.pub | ✅ ワークスペース、ネットワーク、Dvalin の状態は不要 |
| マージゲート | reverify: true — ベースとヘッドを再スキャンし、ランナー上でチェックを再実行して、新しい記録に署名 | ✅ テストスイートでカバー |
✅ は、実際のクライアントを最初から最後まで操作し、ツール呼び出しを確認したことを示します。 ⚙️ は、設定を生成して形式をテスト済みですが、セッションは記録されていないことを示します。設定ファイルが読み込まれただけでは、ツールが実際に呼び出された証拠にはならないため、ここでは両者を曖昧にしていません。
各主張の根拠
| クライアント | バージョン | 確認日 | 方法 |
|---|---|---|---|
| Claude Code | CLI 2.1.260 | 2026-09-04 | サーバーに接続し、dvalin_scan をそのツールのみ許可リストに登録して呼び出しました。3 件の検出結果が返されました。キャプチャは下記をご覧ください |
| Claude Code | CLI 2.1.251 | 2026-08-31 | 毎週実行される harness-interop。認証情報を必要としない、ビルド済みバイナリとの実際のハンドシェイクです |
| Codex | CLI 0.153.2 | 2026-09-18 | 一時的な読み取り専用サンドボックスで実際に dvalin_scan を呼び出しました。完了した MCP イベントは JSONL として記録され、dvalin/eval の検出結果が 1 件返されました。キャプチャは下記をご覧ください |
| Codex | CLI 0.151.0 | 2026-08-31 | 毎週実行される harness-interop。サーバー仕様は受け入れられ、stdio として保存されます。ハンドシェイクではありません:CODEX_API_KEY が設定されるまで、ツール呼び出しのステップはスキップされたままです |
| VS Code | 1.134.0 · extension 0.18.0 | 2026-09-03 | クリーンなプロファイルでパッケージ済みの VSIX を使用しました。エディター内に検出結果、ゲート、カバレッジが表示されました。キャプチャは下記をご覧ください |
| Cursor | — | 2026-09-04 | mcp-install cursor は mcpServers の下に .cursor/mcp.json を書き込みます。セッションはまだキャプチャされていません |
この週次ワークフローがあるのは、以前のバージョンではこの主張に 2 つの CLI バージョンを手動で記載していましたが、どちらも数週間で古くなり、 そのことを知らせる仕組みがなかったためです。現在は、その週に各ツールから リリースされたバージョンを対象に再確認するため、上記の日付は 自動的に更新されるか、公開上の更新が止まります。
各場所における同じ検出結果
Claude Code — 読み取り専用ツールを 1 つだけ許可リストに登録し、MCP 呼び出しそのものを確認します:

Codex — 読み取り専用の MCP 呼び出しを 1 回実行し、完了した JSONL ツールイベントを別に表示します:

VS Code — 同じスキャナーの仕様を、波線とステータスバーで表示します:

🏛️ セキュリティレビューにも耐えられます
複数の人がこのツールに依存するようになったときに重要なのが、最後のコマンドです。DvalinCode は、ターミナル、ウェブ GUI、デスクトップアプリを備えた完全なコーディングエージェントです。開発者ではなく組織がその動作範囲を制限できるように設計されています。ポリシーファイルによってモード、コマンド、パス、ツール、モデルを制限し、実行のたびに改ざんを検出できる監査ログへハッシュチェーンを記録します。また、エグレスガードが許可していないプロバイダーに何かが送信されることはありません。リポジトリのポリシーは、マシンレベルのポリシーを狭めることしかできません。
この種のツールの承認を担当する方は、まず APPROVABILITY-PLAN.md と、各リリースに同梱される Evidence Pack をご確認ください。
| 🏠 ホーム | 読み取り専用の質問ワークフローと、承認が必要なコラボレーションワークフローを1か所にまとめています。プロジェクトや会話から離れることなく、目的を切り替えられます。 |
| ⚡ コード | すべてのツールにアクセスできる、集中型の自律コーディング機能です。権限レベルは「質問」/「計画」/「自動」/「バイパス」から選べます。セキュリティやブラウザーのルーチンが、コアとなるコーディングワークフローの妨げになることはありません。 |
| 🛡️ Dvalin | ホワイトボックスセキュリティエンジニアリング専用機能です。組み込みスキャナーとインストール済みの Semgrep CE、Trivy、OSV-Scanner を連携させ、検出結果をトリアージし、分離された修正を作成してテストと再スキャンを実施した後、レビュー可能な下書き PR を明示的に公開します。Dvalin ガイド → |
| 🏦 規制対象のチーム | 開発者の利便性だけでなく、ポリシー、監査、データ最小化、サプライチェーンのレビューに沿った AI コーディングを必要とする金融、医療、セキュリティ重視の SaaS、社内プラットフォームのチーム向けに設計されています。 |
| 🛡️ 安全な修正 | 複数エンジンでスキャンを実行するか、CodeQL、GitHub Code Scanning、Semgrep、または互換性のあるスキャナーから SARIF をインポートします。その後、分離された修正用ワークツリーを作成し、ソースのコンテキスト、検証の証拠、PR 対応のレポートを添えて、検出結果を集中的な修正タスクに変換します。ワークフロー → |
| 📚 スキル | ローカルのスキルバンドルをアップロード、ダウンロード、検査できます。DvalinCode には、組み込みの secure-code-scan および secure-code-remediation スキルに加え、スキルの一覧表示、スキルの指示の読み込み、スキャン、ケースの一覧表示、修正用ワークツリーの準備を行うエージェントツールが含まれています。形式 → |
| 🛡️ 監査証跡 | すべての実行で、改ざんを検知できるハッシュチェーン付きの JSONL ログが生成されます。ファイルの読み書き、コマンド、承認がすべて記録されます。実行レポートではこれを Markdown として表示でき、dvalincode report verify でチェーンの整合性を検証できます。脅威モデル → |
🔒 組織ポリシーと trust | エージェントの範囲を定めるのは開発者ではなく、会社です。dvalin.policy.json でモード、シェルコマンド、ファイルパス、ツール、モデルを制限できます。リポジトリのポリシーでマシンレベルのポリシーを狭めることはできますが、広げることはできません。実行ごとに、適用されたポリシーのハッシュが記録されます。dvalincode trust は、インストール環境の現在のセキュリティ状態(有効なポリシーとハッシュ、監査状況、ランタイム)を表示し、レビュアーが直接検証できるようにします。ポリシーリファレンス → · 承認可能性の計画 → |
| 🏛️ ガバナンスの証拠 | OpenSSF Scorecard、CodeQL、Dependabot、固定された GitHub Actions、CODEOWNERS、ISO/IEC 42001 AIMS との整合性に関するドキュメントを、レビュー可能なプロジェクトの証拠として維持しています。また、各リリースにはバイナリ自身が生成したエビデンスパックが含まれます。Scorecard 対応表 → · ISO 42001 との整合性 → · リリースの証拠 → |
| 📐 オープン仕様 | PCP-1 — プロバイダー境界の契約(外部送信の封じ込め、認証情報の封じ込め、監査、ポリシーのバインド)を、テスト手順を含むベンダー中立のプロファイルとして定めています。あらゆるエージェントランタイムが独自のアダプターに対してテストを実行し、その結果を公開できます。DvalinCode のテストファイルではなく、誰もが私たちに提示できるチェックリストです。プロバイダー適合性プロファイル → |
| 🖥️ フル機能の GUI | コードハイライト、ファイルの @ 参照、/ スラッシュコマンド、Git ブランチインジケーター、トークン数とコストのリアルタイムカウンター、複数プロファイルに対応した LLM 設定、ダーク/ライト/システムのテーマ切り替え機能を備えた最新の Web UI です。 |
| 🖥️ ターミナルでも Web でも、バイナリは1つ | そのまま起動すると、ストリーミング出力、インライン承認、赤/緑の差分表示に対応した対話型のターミナルエージェントとして動作します。また、dvalincode serve を実行すると、ブラウザーやリモートから利用できるWeb GUIをホストします。どちらのフロントエンドも同じエージェントコアを使用します。 |
| 🖥️ ネイティブデスクトップアプリ | DvalinCode.app — 同じエンジンを使用する、実際の Dock アプリケーションです(Electron を使わず、OS ネイティブの WebView を使用)。macOS では、1行のインストーラーが自動的に /Applications にインストールするため、Launchpad から直接起動できます。 |
| 🪶 依存関係ゼロのバイナリ | 各プラットフォーム用の単一の実行ファイルで、サイズは約 25MB です。Node、Python、Docker は不要です。 |
| 🔐 ローカル優先 | セッション、設定、プロファイル、監査ログは ~/.dvalincode/ に保存されます。.dvalincodeignore によって、エージェントが機密ファイルを読み取れないようにします。リポジトリの AGENTS.md は永続的なプロジェクト指示になります。 |
| 💾 ポータブルでエクスポート可能 | すべてのローカルデータ(メモリ、セッション、設定、監査データ)を1つのファイルにエクスポートし、別のマシンにインポートできます。環境設定をそのまま移行できます。会話はどれも、整形されたMarkdownのトランスクリプトとしてダウンロードできます。 |
🎯 中核となる目標
コードを生成するすべての人間やエージェントに、同じ独立したセキュリティゲートを通過させます。
DvalinCode は、一般的なコーディングエージェントのベンチマークに新たに加わるものではなく、エージェント対応のセキュリティランタイムとして構築されています。中核となる製品は、スキャンのエビデンス、ポリシー、ベースライン、決定的な検証、そして人間の開発者、外部エージェント、CI のいずれからも呼び出せるポータブルなインターフェースです。バンドルされたコーディングエージェントは、対象を絞った修正を確実に実装・テストできるだけの能力を備えていますが、セキュリティゲートの合否がそのモデルの文章によって決まることはありません。
- あらゆるモデルに対応 — OpenAI 互換のエンドポイントはすべて、ローカルモデルも含めて第一級の選択肢です。ワークフローが特定ベンダーの料金、レート制限、品質の変動に左右されることはありません。
- デフォルトで安全 — 差分プレビュー、取り消しスタック、サンドボックス化されたシェル実行を備えた3段階の承認機能があります。全自動でも信頼して使えるエージェントです。
- 監査しやすい小ささ — 約25MBのバイナリ1つ、少数のランタイム依存関係、週末で読めるコードベースです。約束ではなく、実際に検査することで信頼を築きます。v0.5 時点では、すべてのエージェント実行も監査可能です。あらゆるアクションを改ざん防止のハッシュチェーンログに記録し、後から検証できます。
- 組み込みやすいオープンさ — エージェントのコアはシンプルな REST + WebSocket API を提供し、自社製品、CI、社内ツールにすぐに組み込めます。
- どの企業でも承認可能 — ガバナンスは後付けではなく、組み込まれています。組織ポリシーが影響範囲を制限し(制御可能)、
dvalincode trustによってセキュリティ態勢を自己検証でき(透明)、ハッシュチェーンログによってすべての実行内容を証明できます(監査可能)。この3つを組み合わせることで、セキュリティレビューで承認を得るために必要な要件を満たします。一方、クラウド型、クローズド型、変更可能なログを使うエージェントでは、構造上、実現が困難です。承認可能性の計画 →
バンドルされたウェブ GUI は、ランタイムのリファレンス実装でありショーケースです。この公開 API を最初に利用するアプリケーションとして、ランタイムで可能なすべてのことを紹介します。
✅ チームが DvalinCode を選ぶ理由
DvalinCode の特長は、承認可能性です。AI によるコーディングが本番リポジトリに触れる前に、セキュリティ、コンプライアンス、データガバナンスのレビューを通過する必要があるチーム向けに構築されています。
- クローズドループの安全な修正 — ローカルでスキャンするか、CodeQL、GitHub Code Scanning、Semgrep、または互換性のあるスキャナーから SARIF をインポートします。検出結果をローカルの修正ケースとして保存し、分離された
dvalin/remediate/...ワークツリーを作成したうえで、ソースのコンテキストと検証手順を含む、対象を絞った修正プロンプトを送ります。 - ガバナンスされた運用手順としてのスキル — ローカルのスキルバンドルをアップロード、ダウンロード、検査できます。組み込みのセキュアスキャンおよび修正スキルにより、エージェントが使うべきツールが示され、マシンをまたいでワークフローをポータブルに保てます。
- ポリシーを変えずにモデルを自由に選択 — DeepSeek、OpenAI、OpenRouter 経由の Claude、Groq、Ollama、または OpenAI 互換エンドポイントを利用しながら、ツールの権限、監査、ワークスペースポリシーを一貫して維持できます。
- セキュリティの主張ではなく、セキュリティのエビデンス — OpenSSF Scorecard のサポート、CodeQL、Dependabot、ピン留めされた Actions、CODEOWNERS、ISO/IEC 42001 への整合性を示すドキュメント、AI による変更影響の記録、ハッシュチェーン実行ログをプロジェクトに組み込んでいます。
- デフォルトでローカルファースト — セッション、設定、プロファイル、メモリ、監査ログは
~/.dvalincode/の下に保持されます。.dvalincodeignoreとポリシー制御によって、エージェントが読み取り、書き込み、実行できる範囲を制限します。
🛡️ セキュリティとガバナンス
DvalinCode は、オープンソースおよびエンタープライズのレビューに向けたプロジェクトレベルのガバナンス証跡を維持しています。これは、AI によるコーディングを本番リポジトリに適用する前に、セキュリティ承認を通過させる必要があるチームにとっての差別化要素です。
- 脅威モデル — エージェント型コーディング実行環境の攻撃対象領域全体(悪意のある
AGENTS.md、汚染された MCP サーバー、プロンプトインジェクションによる権限昇格、外部への通信、監査記録の改ざん、サプライチェーン、サンドボックスからの脱出)を、それぞれ防御する制御と、正直に記した残存リスクに対応付けています。脅威モデル → - OpenSSF Scorecard のサポート — 定期実行される Scorecard ワークフロー、SARIF のアップロード、CodeQL、Dependabot、CODEOWNERS、最小権限のワークフロー権限、SHA で固定された GitHub Actions を備えています。制御マップ →
- ISO/IEC 42001 への準拠 — AI マネジメントシステムの適用範囲、AI ポリシー、役割マップ、リスク登録簿、AI 変更の分類、必須記録、レビュー周期を定めています。AIMS 準拠状況 →
- AI 変更の影響評価 — モデル/プロバイダーの動作、プロンプト、権限、ツール、監査ログ、リリースセキュリティに影響する変更に使える再利用可能なテンプレートです。テンプレート →
- 規制対象の用途に向けた方針 — 金融、医療、セキュリティ要件の厳しい SaaS、社内エンタープライズでの利用に向けて、ローカル優先のデータ処理、ポリシーで制御される自律性、最小限の監査記録、リリース時のサプライチェーン証跡を備えています。
- Dvalin のセキュリティエンジニアリング — 専用の Dvalin ワークスペースでは、組み込みスキャナーとインストール済みの Semgrep CE、Trivy、OSV-Scanner を組み合わせ、SARIF の検出結果を正規化し、隔離された環境でテストに基づく修正を実行します。また、自動マージは行わず、レビュー可能なドラフト PR を明示的に準備します。 ワークフロー →
これらのドキュメントは実装の証跡と運用手順を示すものであり、第三者による ISO 認証を主張するものではありません。
⭐ v0.14.0 の新機能 — Dvalin のセキュリティエンジニアリング
- Home に Chat と Cowork を統合 — GUI に、読み取り専用の Ask と承認が必要な Collaborate のインテントを備えた単一の Home ワークスペースが追加されました。同じプロジェクトと会話のコンテキストを維持します。
- Code が再び集中できる構成に — 以前の Security パネルと Routines パネルを Code から削除し、サイドバーをプロジェクトと自律的な実装に特化させました。
- Dvalin が主要なワークスペースに — 組み込みスキャナーとインストール済みの Semgrep CE、Trivy、OSV-Scanner を統合し、SARIF をインポートして検出結果を評価・トリアージできます。また、修正ケースを保存し、隔離された修正用ワークツリーを作成できます。
- 証跡からドラフト PR までを一つのフローで実行 — 選択した検出結果を起点に、証跡に基づく Agent の修正を開始し、対象を絞ったテスト/型チェック/ビルドと新たなスキャンを実行して、差分をレビューできます。その後、自動マージを行わず、明示的にドラフト PR を公開できます。
- Agent のループがより早く収束し、コストも低減 — 編集前の調査と停滞の検出により、失敗した操作の繰り返しを減らします。一般的なツール出力のサイズを制限し、キャッシュ再利用のためプロンプトを追記専用に保ちます。また、プロバイダーの使用量でキャッシュヒット/ミスを考慮するようになりました。
- プロバイダーと評価機能を強化 — Anthropic のネイティブなプロンプトキャッシュとキャッシュ使用量の記録に対応しました。また、SWE-bench の Docker ハーネスで公式スコア、ポリシー違反、停滞、トークン/キャッシュの指標を報告します。
⭐ v0.12.4 の新機能 — 停止する前にタスクを完了
- 作業の説明だけではタスクが終了しなくなりました — 「ファイルを確認します」などの応答は作業中として認識され、エージェントはそれを最終回答として扱わず、約束した作業をすぐに続行します。
- 途中で切れた応答は自動的に復旧します — プロバイダーの終了理由が保持されるため、トークン上限で出力が途切れた場合は、モデルの処理がもう一度実行されます。
- 通常のコーディング処理が完了するまで余裕を確保します — 1ターンあたりのアクション上限は、通常の停止基準である15アクションではなく、緊急時の100アクション制限になりました。より厳しい組織ポリシーの制限は引き続き優先されます。
- 完了が明確になりました — Code モードでは、依頼された作業と対象を絞った検証が完了した後に限り、ツールを使わない回答を返すよう指示されます。
⭐ v0.12.3 の新機能 — 長時間実行に強い Code モード
- 長時間のコーディング処理が継続します — Code モードは、ツールループの実行中にコンテキストを圧縮し、トークン数の推定時にプロバイダーへのリクエスト全体を考慮するようになりました。また、デフォルトのイテレーションチェックポイントが10から40に引き上げられました。
- 中断後に再開できます — ターンが中断された場合や接続が切断された場合でも、完了済みのツール状態が保持されるため、後続の
continueで実際のワークスペースの進捗から再開できます。 - エージェントの動作を表示し、画面をすっきり保ちます — 実行中のセッションではサイドバーに読み込み状態が表示され、各応答には作業時間が表示されます。クリックするとアクションのタイムラインを確認でき、生のツール呼び出しはデフォルトで折りたたまれます。
- Code モードから GitHub ワークフローを実行できます — ネットワークに対応した
gitと GitHub CLI(gh)の操作で、管理されたシェル承認フローを通じて、プル、プッシュ、PR の作成、Actions/リポジトリのコマンドを実行できるようになりました。 - より安全にリリースできます — パッケージと CLI のバージョンが同期され、公開前に
prepublishOnlyがビルド、型チェック、テストスイートを実行します。 - シンプルなタスクはシンプルなままです — アクション予算はモデルのイテレーションごとにリセットされず、ターン全体を通じて適用されます。また、Code モードには最短の直接的な手順を選び、対象を絞った検証に合格したら停止するよう指示されます。
⭐ v0.12.2 の新機能 — 🖥️ デスクトップアプリの節目:すぐに使えます
- 🖥️ macOS でネイティブデスクトップアプリがインストール直後から動作します —
DvalinCode.appは、組み込みエンジン上で実際の Dock ウィンドウを開きます(WKWebView を使用し、Electron は使用しません)。これまでのすべてのデスクトップビルドに含まれていたスレッド関連のバグが2つ修正されました。ブロッキングする WebView ループが組み込みサーバーを妨げて空白のウィンドウになる問題が解消され、macOS の要件に合わせて WebView がメインスレッドで実行されるようになりました(ウィンドウがまったく表示されない問題も解消)。サーバーは同じバイナリの子プロセスとして実行されます。 - 📦 1行のインストーラーでアプリもインストールされます — macOS では、
curl … install.sh | bashを実行すると、DvalinCode アイコン付きのDvalinCode.appも/Applicationsにインストールされるようになりました。これにより、CLI のインストール後、Launchpad からデスクトップウィンドウを直接起動できます。無効にするにはDVALINCODE_NO_APP=1を設定し、バージョンを固定するにはDVALINCODE_GUI_VERSIONを設定します。 - ✅ macOS ではデスクトップ版が「実験的」ではなくなりました — ウィンドウと組み込みサーバーの動作を検証済みです。Windows と Linux 向けのデスクトップビルドはクロスコンパイルされており、引き続きプレビュー版です。
v0.9.0 — 🛡️ セキュアな修正 · スキル · CodeQL の強化
- **🛡️ セキュアな修正ワークフロー** — 組み込みのローカルスキャンを実行するか、CodeQL、GitHub Code Scanning、Semgrep、互換性のあるスキャナーから SARIF をインポートできます。検出結果は、ソースのコンテキスト、検証ガイダンス、分離されたワークツリーでの修正タスクを含むローカルの修正ケースになります。 - **📚 スキル** — ローカルのスキルバンドルをアップロード、ダウンロード、検査、再利用できます。DvalinCode には、組み込みの secure-code-scan および secure-code-remediation スキルに加え、スキルの一覧表示、手順の読み込み、スキャン、修正ケースの一覧表示、修正用ワークツリーの準備を行うエージェントツールが追加されました。 - **🔐 CodeQL のパス強化** — ユーザーが指定するワークスペース、修正、スキルのパスに対して、明示的なルート内包チェックを行うようになりました。また、トラバーサルに対する安全な解決とスキルのインポート境界を網羅する回帰テストも追加されました。 - **🎨 アプリアイコン** — ダークテーマとライトテーマのアプリアイコンが、Web バンドルおよびデスクトップビルドの入力ファイルに含まれるようになりました。v0.8.0 — 🔒 ガバナンス:制御可能・透明・監査可能
- 🔒 組織ポリシー —
dvalin.policy.jsonを使うと、開発者ではなく 企業 がエージェントを制限できます。許可するモード、シェルコマンド、ファイルパス、ツール、モデルを指定できます。2 つのレイヤー(マシンの~/.dvalincode/policy.jsonとリポジトリ)は、制限を強める方向にのみ適用されます。リポジトリポリシーによってマシンポリシーを緩和することはできません。ポリシーファイルがない場合、動作は従来と同じです。単一の制御点で適用され、拒否された場合は、インラインの⛔ Blocked by policyとpolicy_violation監査イベントが記録されます。ポリシーのリファレンス → - 🔎
dvalincode trust— このインストールの現在のセキュリティ状態を、アクティブなポリシーとソースハッシュ、監査ステータス、ランタイム、依存関係とともに、1 つのコマンドで表示します。レビュー担当者は、主張を鵜呑みにせず、エージェントに許可されていることと許可されていないことを直接確認できます。ツール連携には--jsonを指定します。 dvalincode policy check—dvalin.policy.jsonをスキーマに照らして検証し、解決されたポリシーと正規化ハッシュ(マシンレイヤーによる制限適用後)を表示します。失敗時はゼロ以外の終了コードを返します。CI とポリシー作成に使用できます。ポリシーのリファレンス →- 🧾 ポリシー対応の監査 — 実行ごとに、適用されたポリシーのハッシュと、ポリシーに寄与したファイルが
run_startに記録されます。これにより、改ざんを検出できるログから、どのルールが有効だったかを証明できます。 - 📐 承認可能性の計画 — 一貫した方針を docs/APPROVABILITY-PLAN.md に記載しています。DvalinCode をあらゆる企業が容易に承認できるよう、制御可能・透明・監査可能にすることを目指します。
v0.7.0 — 🧪 デスクトップアプリ(ベータ)
- **🧠 持ち運び可能なメモリと完全なデータのエクスポート/インポート** — 強化されたローカルメモリ機能に加え、すべてのセッション、設定、プロファイル、監査ログを単一のファイルにまとめ、別のマシンで復元できるようになりました。`dvalincode export` / `dvalincode import`、または GUI の設定パネルにある **エクスポート / インポート** ボタンを使って、環境全体を一度に移行できます。 - **📝 AI とのやり取りを Markdown でダウンロード** — すべての会話を、ユーザーの発言、アシスタントの返信、ツール呼び出しとその結果、判断をすべてインラインに含む、整った Markdown の記録として保存できます。サイドバーの各セッションにあるダウンロードアイコン、`dvalincode session md `、または `GET /api/sessions/:id/markdown` を使用してください。 - **🖥️ ネイティブデスクトップアプリ** — 同じエンジンを使用する、ブラウザーのタブではない独立したアプリケーションウィンドウです。macOS 用の `DvalinCode.app` に加え、Windows/Linux ビルドも用意されています。[webview-bun](https://github.com/tr1ckydev/webview-bun) を使い、OS ネイティブの WebView(WKWebView / WebView2 / WebKitGTK)で構築されています。Electron は使わず、自己完結型の小さなバイナリです。 - **🧩 3 つ目のフロントエンド、コアは 1 つ** — デスクトップアプリ、ターミナル UI、Web GUI はすべて、同じ共有ターンランナーを実行します。現在の `dvalincode` バイナリは、純粋に **CLI**(ターミナル + `serve`)として位置付けられるようになりました。 - **ステータス:** デスクトップバイナリは **実験的/未検証** です。最新の **プレリリース** からダウンロードし、お使いの OS でウィンドウがどのように動作するか、ぜひお知らせください。v0.6.0 — ターミナルエージェント · serve · 共有ターンランナー
- 🖥️ ターミナルエージェント —
dvalincodeを引数なしで実行すると、Claude-Code 風の対話型ターミナルコーディングエージェントを起動します。ストリーミング応答、赤/緑の差分付きのインライン[y/N]書き込み承認、/mode·/clear·/git·/plan·/compact·/undo·/help、Ctrl-C による中断、初回起動時のガイド付きプロバイダー設定を備えています。デフォルトは読み取り専用の Chat で、実行中に切り替えられます。 - 🌐
dvalincode serve— Web GUI はコマンド経由で起動するようになりました。同じバイナリをサーバー上でヘッドレスにデプロイできます:dvalincode serve --host 0.0.0.0 --no-open。 - 🧩 1 つのエンジン、2 つのフロントエンド — ターミナル UI と Web GUI は、共有のトランスポート非依存型ターンランナー(
src/agent/session.ts)を実行し、機能の同等性を維持します。
v0.5.0 — セキュリティグレードの監査証跡 · 実行レポート · テーマ切り替え
- 🛡️ セキュリティグレードの監査証跡 — Cowork/Code の実行ごとに、改ざんを検知できるハッシュチェーン付き JSONL ログを
~/.dvalincode/audit/に書き込みます(run_start、すべてのtool_call/file_*/shell_exec/approval、run_end)。ハッシュチェーンにより、事後の編集を検知できます。検証可能な動作ログを備えたローカルコーディングエージェントは、ほかにありません。形式と脅威モデル → - 📋 実行レポート +
dvalincode reportCLI — 各実行の Markdown サマリー(読み取り/変更したファイル、コマンド、判断、テスト結果)です。GUI では折りたたみ可能なカードとして表示され、CLI からも利用できます:dvalincode report --last # render the most recent run dvalincode report <run-id> --format json dvalincode report verify <run-id> # ✓ chain intact / ✗ broken at seq N - 🎨 テーマ切り替え — 設定で ダーク/ライト/システム を選択できます。
systemは OS の設定にリアルタイムで従い、選択はセッションをまたいで保持されます。
v0.4.0 — /compact · dvalin.json チーム用プレイブック · 自己完結型バイナリ
/compact— LLM によるコンテキスト圧縮です。会話履歴を、5 つのセクションからなる構造化された要約(目標/完了事項/判断/現在の状態/保留事項)に置き換えます。チャットスレッドの区切りに、トークン削減量(例:8,412 → 1,203 tokens −85%)が表示されます。dvalin.jsonチーム用プレイブック — 自動化プロンプトの共有セットをリポジトリにコミットできます。サイドバーに自動で読み込まれ、チームメイトは手動設定なしで同じワンクリックルーチンを実行できます。エクスポートボタンを使えば、個人用ルーチンをワンクリックでdvalin.jsonに変換できます。- 自己完結型バイナリ — プラットフォームごとに約 25 MB の単一実行ファイルを用意しています。Node、Python、Docker は不要です。起動するとブラウザーが自動で開きます。
bun --compileを使用して構築されており、Web UI はサーバーバイナリにバンドルされています。
v0.3.0 — モード対応サイドバー · 1 行インストーラー · 複数プロファイルの LLM 設定
- モード対応サイドバー — Chat ではクイックプロンプトのテンプレート、Cowork ではプロジェクトのフォルダーツリー、Code ではカスタムのルーティン(「テストを実行」「Git の状態」「型チェック」などのワンクリックコマンド)を表示します。サイドバーから独自のルーティンを追加でき、
localStorageに保存されます。 - 1 行インストーラー —
curl … | bashで OS とアーキテクチャを自動検出し、バイナリを~/.dvalincode/に配置して、PATHを更新します。パッケージマネージャーへの依存はありません。 - 複数プロファイルの LLM 設定 — 名前を付けた(プロバイダー、モデル、API キー)のセットを保存し、サイドバーからワンクリックで切り替えられます。トップバーにはセッションごとのコストカウンターがリアルタイムで表示され、プロバイダーをその場で比較できます。
📸 プレビュー
脆弱なコードを Dvalin で実際にスキャンした結果 — セキュリティ健全性 22/100 · F。検出エンジンが実際に報告した 10 件の指摘が行単位で特定されています。
検証済みの結果 — モデル駆動の Verify ターンで修正を調査し、回帰テストと 4 つすべてのオープンソースエンジンを実行。その後、決定論的なサーバー再スキャンで、網羅率 100%、ゲート合格、指摘 0 件、100/100 · A が報告されました。
現在の Mac mini スモークテスト
2026-09-18 に、コミット d4bf02b をビルドし、macOS 27.0 搭載の Apple シリコン Mac mini でローカルアプリとして実行しました。一時的なテストプロジェクトには API キーも設定済みのモデルもなく、ネットワーク接続不要の組み込みスキャナーのみを選択しました。Dvalin は意図的に脆弱にした eval を quantity.js:3 で特定し、重大度の高い指摘 1 件、88/100 · B を報告。選択したエンジンの網羅率 1/1 を記録し、重大度 high のセキュリティゲートをブロックしました。
eval を制約付き整数パーサーに置き換え、実行可能な入力を使った回帰テストを追加した後、3/3 件のテストがすべて合格しました。続いて、選択したエンジンは指摘 0 件、100/100 · A、網羅率 100%、ゲート合格を報告しました。
同じ CLI ワークフローで終了コード 0 の npm run test を実行し、dvalin-fix-record/v2 を発行しました。さらに dvalin verify-fix でオフライン検証し、ok: true を再導出しました。クリーンスキャンのスクリーンショットは、そのレコードをインポートする前に撮影されたため、オフライン修正レコード:未添付と表示されています。Web ワークスペースでは、ポータブルな JSON レコードをインポートし、そのハッシュと判定をオフラインで再導出して、実行者、チェック項目、終了コードを表示できるようになりました。クリーンスキャンは選択したエンジンについての証拠であり、コードの安全性が証明されたという主張ではありません。
Home → Code → Dvalin — 現在のワークスペース:
上記のスキャン画像は、ドキュメントに記載された NodeGoat 由来のケースを実際に実行した未編集のキャプチャです。スキャナーを実行し、モデルがソースを修正し、プロジェクトのテストを実行した後、ツリーを再スキャンしました。ステージングされた変更はありません。また、100/A は、設定されたエンジンが何も検出しなかったという意味であり、コードの安全性が証明されたという意味ではありません。
🆚 DvalinCode を選ぶ場面
| 必要なもの… | DvalinCode の答え |
|---|---|
| セキュリティチームの承認を得られるエージェント | ポリシーで制御されたツール、明示的な承認モード、dvalincode trust、監査ログ、OpenSSF のエビデンス、ISO/IEC 42001 への準拠を示すドキュメントを提供します。 |
| 規制対象リポジトリ向けの AI コーディング — 金融、医療、エンタープライズデータ、顧客機密コード | ローカル優先のランタイム、独自モデルの持ち込み、.dvalincodeignore、管理された外部通信、最小限の監査記録を備えています。 |
| 汎用の自律型コーディングエージェントに代わる、より安全な選択肢 | 製品の基本理念は、単に「モデルがファイルを編集できる」ことではなく、制御可能で、透明性があり、監査可能であることです。 |
| IDE 中心の AI ワークフロー | 依存関係のないバイナリ(約 25 MB)です。どこでも実行でき、IDE は不要です。macOS のシェルはデフォルトでサンドボックス化されており、ネットワークアクセスは拒否され、書き込みは cwd に制限されます。 |
| ターミナル中心の AI ワークフロー | CLI を起動すると、コードのハイライト表示と赤/緑の差分承認機能を備えた最新の Web UI が自動で開きます。インストールコマンドは 1 つだけで、ほかに必要なものはありません。 |
| クラウド限定の AI ワークフロー | OpenAI 互換のあらゆるエンドポイントを第一級のエンドポイントとして利用できます。Ollama と Qwen2.5-Coder を実行すれば、キーもインターネット接続もトークンごとの料金も不要です。 |
| 単一マシンでの AI セットアップ | リポジトリにコミットした AGENTS.md により、すべてのクローンに AI コンテキストを引き継げます。チームの自動化コマンドも同じ方法で dvalin.json に含められます。サイドバーからエクスポートしてコミットすれば完了です。 |
🚀 クイックインストール
Homebrew(macOS / Linux)
brew tap arthurpanhku/dvalincode https://github.com/arthurpanhku/dvalincode
brew install arthurpanhku/dvalincode/dvalincode
ワンライナーと同じチェックサム署名付きリリースアーカイブをインストールし、
brew upgrade で最新の状態を保てます。Homebrew は macOS の隔離属性を
適用しないため、この方法は Gatekeeper の対象になりません。
macOS / Linux(ワンライナー)
curl -fsSL https://raw.githubusercontent.com/arthurpanhku/dvalincode/main/scripts/install.sh | bash
OS とアーキテクチャを検出し、適切なバイナリをダウンロードして ~/.dvalincode/ にインストールし、PATH に追加します。macOS ではネイティブの DvalinCode.app も /Applications にインストールするため(DVALINCODE_NO_APP=1 でスキップできます)、デスクトップウィンドウを Launchpad から直接起動できます。再読み込み後:
source ~/.zshrc # or ~/.bashrc
dvalincode # interactive terminal agent
dvalincode dvalin . # white-box security scan (GUI-independent)
dvalincode serve # start the web GUI, open the browser
dvalincode serve --host 0.0.0.0 --no-open # host it on a server for remote/browser use
echo "inspect src and summarize" | dvalincode run - --output-format stream-json
dvalincode mcp-serve # task-level stdio MCP server for external agents
ヘッドレスの run と mcp-serve でも、対話型クライアントと同じポリシーおよび監査の要所を維持します。cron、CI、外部エージェントの例については、無人実行のレシピを参照してください。
スキャンを実行したり、修正記録を作成したりした実行では、回答に加えて verification エンベロープも含まれます。これは json、stream-json、および MCP の dvalin_run_task 結果で利用できます。coverageStatus は、実行でエビデンスが確認されたカバレッジのうち 最も低い ものです。そのため、完全なスキャンが部分的なスキャンを代表することはなく、作成されたすべての記録は、オフラインで再導出できるようパス付きで一覧表示されます。CI ゲートでは、これを直接読み取れます:
jq -e '.verification.coverageStatus == "complete"' run.json || exit 1
これは、誰も監視していない場合でも、表向きはプルリクエストのコメントに適用されるのと同じルールです。ハーネスモード →
Windows
Releases から dvalincode-v*-windows-x64.zip をダウンロードして解凍し、start.bat をダブルクリックします。
手動ダウンロード
お使いのプラットフォームに対応するアーカイブをリリースページからダウンロードしてください。
| プラットフォーム | アーカイブ |
|---|---|
| macOS Apple Silicon (M1/M2/M3) | dvalincode-v*-macos-arm64.tar.gz |
| macOS Intel | dvalincode-v*-macos-x64.tar.gz |
| Windows x64 | dvalincode-v*-windows-x64.zip |
| Linux ARM64 | dvalincode-v*-linux-arm64.tar.gz |
| Linux x64 | dvalincode-v*-linux-x64.tar.gz |
SHA256SUMS.txt(各リリースに含まれています)と照合して検証してください。
各リリースには dvalincode-v*-evidence.json も付属します。これはビルドマシン上で、配布バイナリ自身が生成したエビデンスパックです。ハッシュチェーンを含む、実際に実行されたガバナンス対象の実行記録が2件(ポリシーで許可されたものとブロックされたものが各1件)含まれています。インストールする前に、このページの主張を確認できます。
dvalincode evidence verify dvalincode-v0.14.0-evidence.json # offline, reads only the file
このパックのチェックサムは SHA256SUMS.txt に記載されており、これはリリースのビルド来歴アテステーションの対象です。生成方法 →
macOS Gatekeeper: バイナリは署名されていません。初回起動時に、
xattr -dr com.apple.quarantine ~/.dvalincodeで隔離フラグを解除するか、Finder でバイナリを右クリックして「開く」を選び、確認してください。
最新の状態を保つ
DvalinCode は自動更新されるため、インストーラーを再実行する必要はありません。
dvalincode update --check # is a newer release out? (read-only)
dvalincode update # download, verify, and install the latest
GitHub 上の最新リリースを確認し、バイナリ版の場合は対応するアーカイブをダウンロードして、何かを置き換える前にリリースの SHA256SUMS.txt と照合して検証し、その後 ~/.dvalincode/ をその場で置き換えます。npm インストールは npm i -g で更新され、ソースコードのチェックアウトは git pull を実行するよう案内されます。プロンプトを省略するには -y、プレリリースを追跡するには --prerelease、スクリプトで使用するには --json を追加してください。
macOS デスクトップアプリは起動時に、別の gui-v* リリース系列を確認します。新しい GUI がある場合は、ダウンロード前に確認を求め、SHA256SUMS-gui.txt と照合してアーカイブを検証し、アプリのバージョンを確認してから DvalinCode.app を置き換えて再起動します。置き換えに失敗した場合は、以前のアプリにロールバックします。
🎬 初回セットアップ
ターミナル(デフォルト): dvalincode を実行します。初回起動時にプロバイダーの初期設定(プロバイダーの選択、API キーの貼り付け、モデルの選択)が案内され、設定は ~/.dvalincode/config.json に保存されます。その後、プロンプトが表示されます。入力してチャットし、/mode で Chat/Cowork/Code/Dvalin を切り替え、/help でコマンドを確認できます。GUI では Chat と Cowork は Home にまとめられています。
Web GUI: dvalincode serve を実行します。
- サーバーが
http://localhost:3000で起動し、ブラウザーが自動的に開きます。 - サイドバーの左下にある LLM Configuration をクリックします。
- プロバイダーを選択し、API キーを貼り付け、モデルを選んで Save をクリックします。
- 任意:現在の設定を名前付きプロファイル(例:
fast、cheap、local-ollama)として保存しておくと、後からすばやく切り替えられます。
どちらも ~/.dvalincode/ の同じ設定とセッションを使用します。
✨ 機能
| カテゴリ | 機能 | 備考 |
|---|---|---|
| モード | Home / Code / Dvalin | Home には読み取り専用の Ask と、承認が必要な Collaborate が含まれます。Code は自律的な開発に特化し、Dvalin はスキャンから修正まで行うセキュリティワークスペースです |
| Code の権限 | Ask Permissions / Plan Mode / Auto Mode / Bypass permissions | 動作確認済み:Ask は書き込みやコマンドの実行前に承認を求め、Plan は読み取り専用でファイルを書き込みません。Auto は操作を自動実行し、Bypass は確認プロンプトなしで実行します |
| ワークスペース | フォルダーを開く / Git をインポート / worktree を追加 | Cowork と Code では、UI からローカルフォルダーへの切り替え、Git プロジェクトのクローン、Git worktree の作成ができます |
| ガバナンス | OpenSSF Scorecard / ISO 42001 AIMS への準拠 | Scorecard、CodeQL、Dependabot、ピン留めされた Actions、AI 影響評価、リスク登録簿、レビュー周期については、docs/security/ と docs/governance/ に記載されています |
| セキュアな修正 | 組み込み + Semgrep CE + Trivy + OSV-Scanner / SARIF / ケース / worktree / テスト / ドラフト PR | Dvalin はインストール済みのエンジンを検出し、SARIF を正規化してリスクを評価し、ケースを保存します。また、証拠に基づく修正を進め、変更を検証したうえで、ユーザーが明示的に操作した場合にのみ公開します |
| スキル | アップロード / ダウンロード / 組み込みのセキュリティスキル | スキルは ~/.dvalincode/skills に保存されます。組み込みスキルは、専用のエージェントツールを使ったセキュリティスキャンと修正を支援します。形式 → |
| Composer | @ ファイル参照 | @ を入力すると、ファジー検索でファイルを検索できます。選択したファイルはプロンプトにインラインで挿入されます |
/ スラッシュコマンド | /clear /compact /git /plan /undo /help | |
| 複数行入力 + 中断 | 改行するには Shift+Enter を押し、停止ボタンで処理の途中でも中断できます | |
| ツール UI | インライン差分 | edit_file と write_file の結果は、赤と緑の統合差分として表示されます。デフォルトでは折りたたまれています |
| 差分付き承認ダイアログ | Cowork モードでは、変更が適用される前に差分が表示されます | |
| ツール数 + トークン数 + コストのリアルタイム表示 | トップバーにセッションの合計がリアルタイムで表示されます | |
| エージェント | LLM ベースのコンテキスト圧縮 | /compact は Goal / Completed / Decisions / Pending に要約します |
| 永続的な取り消し履歴 | /undo [N] は直近 N 件のツール呼び出しを取り消します | |
| 実行レポート | 実行ごとの Markdown 要約(ファイル、コマンド、判断、テスト結果) — GUI カード + dvalincode report | |
| Git の認識 | トップバーにブランチ名を表示し、git_status ツールを提供します。Git のコンテキストはプロンプトに自動挿入されます | |
AGENTS.md プロジェクトメモリー | リポジトリごとに永続化された指示が、各ターンで自動的に読み込まれます | |
| セキュリティ | 改ざんを検知できる監査証跡 | 実行ごとのハッシュチェーン付き JSONL を ~/.dvalincode/audit/ に保存します。dvalincode report verify で編集を検出できます |
| macOS シェルサンドボックス | sandbox-exec がネットワークを拒否し、書き込みを cwd と /tmp 内のみに許可します | |
.dvalincodeignore | gitignore 形式の除外設定です。read_file / list_files / search_text をブロックします | |
| アクションごとの承認 | Cowork モードで書き込み / 削除 / シェル呼び出しごとに許可または拒否できます | |
| 外観 | テーマ切り替え | ダーク / ライト / システムを選択でき、設定は保持されます。system は OS の設定にリアルタイムで従います |
| プロバイダー | OpenAI 互換エンドポイント | DeepSeek · OpenAI · Groq · OpenRouter · Ollama · カスタム |
| 複数プロファイルの設定 | 名前付きの(プロバイダー、モデル、API キー)セットを保存して切り替えられます | |
| セッション | 自動保存 + 復元 | すべてのセッションが JSON として ~/.dvalincode/sessions/ に保存されます |
| LLM 要約メモリー | セッションをまたいで保持される要約により、再起動後もエージェントが状況を把握できます | |
| メモリー | ローカルのユーザー / プロジェクトメモリー | ~/.dvalincode/memory/ に保存される、検索可能な事実、設定、判断です。Claude/Hermes/Markdown からインポートできます |
| データのポータビリティ | すべてのデータをエクスポート / インポート | メモリー + セッション + 設定 + 監査データをまとめたバンドル — dvalincode export / import、または GUI の Settings → Export / Import |
| Markdown トランスクリプト | サイドバーのダウンロードアイコン、dvalincode session md <id>、または /api/sessions/:id/markdown から、任意の会話を Markdown としてダウンロードできます |
⌨️ スラッシュコマンド
| コマンド | 説明 |
|---|---|
/clear | 現在の会話を消去します(クライアント側で新しいセッションを開始します) |
/compact | LLM ベースでコンテキストを圧縮します — 履歴を構造化された要約に置き換えます |
/undo [N] | 直近の N 件のツール呼び出しを取り消します(既定値は 1) |
/git | git_status を実行し、ブランチ、最近のコミット、変更されたファイルを表示します |
/plan <task> | 実行せずに、タスクを段階的に計画するようエージェントに依頼します |
/help | 利用可能なすべてのスラッシュコマンドを表示します |
🛠️ アーキテクチャ
┌───────────────────────────┐ ┌─────────────────────────┐
│ Terminal UI (readline) │ │ Browser GUI (React/Vite)│
│ streaming · approvals │ │ ChatThread · DiffViewer │
└─────────────┬─────────────┘ └────────────┬────────────┘
│ in-process HTTP / WebSocket
│ ┌───────────────▼─────────────┐
│ │ Express + ws server │
│ │ /api/* · `dvalincode serve` │
│ └───────────────┬─────────────┘
└──────────────┬─────────────────┘
┌────────────────────────────▼────────────────────────────┐
│ runAgentTurn — shared turn-runner (src/agent/session) │
│ provider · prompt (mode · git · AGENTS.md) · session │
└────────────────────────────┬────────────────────────────┘
│
┌────────────────────────────▼────────────────────────────┐
│ Agent Engine │
│ AgentLoop (8-state machine) → AgentRunner │
│ Streaming · Interrupt · Undo stack · LLM compaction │
│ run_start / run_end → AuditSink (hash-chained JSONL) │
└──────────────────────────┬──────────────────────────────┘
│ run()
┌──────────────────────────▼──────────────────────────────┐
│ ToolRegistry — Zod schemas + permission gating │
│ + audit taps: tool_call · file_* · shell_exec │
│ read_file · list_files · search_text · git_status · │
│ write_file · edit_file · delete_file · shell │
└─────────────────────────────────────────────────────────┘
エージェントのループ — 8 つの状態
RESTORE → COMPACT → COMMAND → BUILD → RUN → SAVE → RESPOND → DONE
- RESTORE —
~/.dvalincode/sessions/からセッションを読み込みます - COMPACT — コンテキストが上限に近い場合、履歴を圧縮します(LLM による要約)
- COMMAND — 組み込みのスラッシュコマンドを処理します
- BUILD — システムプロンプトを組み立てます(モードプロンプト + プロジェクト + git + AGENTS.md)
- RUN —
AgentRunnerに委譲し、LLM のツール呼び出しループを実行します - SAVE — セッションを保存します
- RESPOND — セッションをまたいだ要約メモリーを生成します
- DONE
🧪 テスト
npm test
コアテスト 584 件 · 74 ファイル · すべて成功。 VS Code 拡張機能には、別途 37 件のテストスイートと、オプトイン方式の公開済みパッケージ統合テストが 1 件あります。
🏗️ ソースからビルドする
Bun(curl -fsSL https://bun.sh/install | bash)が必要です。
git clone https://github.com/arthurpanhku/dvalincode
cd dvalincode
npm install
npm run dev:all # start backend (3001) + Vite (5173)
すべてのプラットフォーム向けにリリースバイナリをビルドします。
bash scripts/build-release.sh # → release/ with tar.gz / zip + SHA256SUMS.txt
bash scripts/build-release.sh darwin # macOS only
bash scripts/build-release.sh windows # Windows only
リリースを公開する前に:
(cd release && shasum -a 256 -c SHA256SUMS.txt)
unzip -l release/dvalincode-v*-windows-x64.zip | grep 'web/dist/index.html'
tar tzf release/dvalincode-v*-macos-arm64.tar.gz | grep 'DvalinCode.app/Contents/Resources/AppIcon.icns'
Windows のスモークテスト:dvalincode-v*-windows-x64.zip を Windows で解凍し、展開したフォルダーから start.bat を実行します。サーバーが http://localhost:3000 を開けば成功です。B:\~BUN\root\web\dist 配下のパスで ENOENT が報告される場合は、コンパイル済みの Bun 仮想パス検出に問題が再発しています。パッケージ化されたバイナリは、展開した実行ファイルの隣にある web/dist を解決できる必要があります。
注:Bun では、Windows の .exe へのアイコン/メタデータの埋め込みは Windows 上でコンパイルした場合にのみ可能です。macOS/Linux でのクロスビルドでも有効な Windows アーカイブは生成されますが、埋め込みの .exe アイコンは含まれません。
🌐 プロバイダー
DvalinCode は OpenAI 互換のエンドポイントに対応しています。組み込みのプリセットをコストの低い順に示します。
| プロバイダー | 最安モデル | 入力/出力 | 備考 |
|---|---|---|---|
| Groq | llama-3.1-8b-instant | 無料枠 | 最速のオープンモデル — Llama 3.3 70B、Mixtral |
| Ollama | qwen2.5-coder | $0(ローカル) | API キー不要。お使いのマシンで動作します |
| DeepSeek | deepseek-chat | 100 万トークンあたり $0.14/$0.28 | 低価格で高性能。v3 は GPT-4 にほぼ匹敵する品質です |
| OpenRouter | google/gemini-2.0-flash-001 | 100 万トークンあたり $0.10/$0.40 | Claude、Gemini、Llama を含む 200 以上のモデル |
| OpenAI | gpt-4o-mini | 100 万トークンあたり $0.15/$0.60 | 信頼性が高く、深い推論には o1 を利用できます |
| カスタム | — | プロバイダーによって異なります | OpenAI 互換のベース URL を利用できます |
DvalinCode では、セッションごとのコストがトップバーにリアルタイムで表示されます。LLM Configuration モーダルでプロバイダーを切り替え、名前付きプロファイルを保存し、その場で比較できます。
❓ よくある質問
コードが第三者に送信されますか?
設定した LLM にエージェントが送信する内容だけが送信されます。セッション、設定、プロファイルはすべて、マシン上の
~/.dvalincode/ に保存されます。エージェントから機密ファイルを除外するには、リポジトリのルートに .dvalincodeignore を配置してください(gitignore 形式のパターンを使用します)。
API キーなしで実行できますか?
はい。Ollama を使用してください。モデルを取得(
ollama pull qwen2.5-coder)した後、LLM Configuration モーダルで Ollama プロバイダーを選択します。キーもインターネット接続も不要で、トークンごとの料金もかかりません。
Home、Code、Dvalin にはどのような違いがありますか?
それぞれ、異なる成果と安全性の既定値を表しています。Home は読み取り専用の Ask と、承認が必要な Collaborate をまとめています。Code はソフトウェア開発に特化したエージェントです。Dvalin は、スキャナーの証拠、修正ケース、分離されたワークツリー、検証、明示的なドラフト PR の公開機能を備えたセキュリティパイプラインです。プロジェクトのコンテキストを維持したまま、いつでも切り替えられます。
シェルツールはサンドボックス化されていますか?
macOS ではコマンドに
sandbox-exec を使用します。Linux では、Bubblewrap がインストールされている場合、制限付きのネットワークポリシーにこれを使用します。Windows では、サブプロセスのネットワークサンドボックスはまだサポートされていないため、制限付きポリシーは制限なしで実行されることなく、安全側に倒して失敗します。ネイティブのコマンドランナー自体は、3 つすべてのプラットフォームで動作します。
どのオペレーティングシステムのシェルに対応していますか?
Linux と macOS のコマンドは
/bin/sh を介して実行されます。Windows のコマンドはシステムの ComSpec(既定では cmd.exe)を介して実行されます。完全なネイティブコマンドラインでは、パイプ、リダイレクト、条件演算子に対応しています。分割形式の command + args では、ホストシェル向けに実行ファイルのパスと引数を引用符で囲みます。
エージェントが実際に行ったことを確認するにはどうすればよいですか?また、そのログは信頼できますか?
実行のたびに、
~/.dvalincode/audit/run-<timestamp>-<id>.jsonl に JSONL 監査ログが書き込まれます。dvalincode report --last で表示するか(GUI の折りたたみ可能な Run Report カードも参照してください)、ログを確認できます。各レコードは SHA-256 ハッシュで直前のレコードと連結されるため、後から編集すると検出できます。dvalincode report verify <run-id> を実行すると、✓ chain intact と表示されるか、破損箇所が正確に報告されます。これは改ざんを検知可能にするものであり、改ざんを防止するものではありません。ファイル全体を書き換えられるローカルの攻撃者は、連結を再計算できます。その価値は、フォレンジックと説明責任にあります。脅威モデルの詳細については、docs/AUDIT-TRAIL.md を参照してください。
確認なしにファイルが上書きされることはありますか?
モードによって異なります。Home → Ask は書き込みを行いません。Home → Collaborate では、ファイルごとに承認が必要です(Allow をクリックする前に、変更箇所がインラインで赤と緑で表示されます)。Code と Dvalin は、選択した権限レベルに従います。Auto は、信頼できるワークスペースまたは分離されたブランチでのみ使用してください。
macOS のバイナリが開かず、「未確認の開発元」と表示されます
バイナリには署名がありません。隔離フラグを解除するには、次のコマンドを一度実行してください。
xattr -dr com.apple.quarantine ~/.dvalincode
または、Finder でバイナリを右クリックして「開く」を選び、一度だけ確認してください。
AGENTS.md はターンごとに送信されますか?
はい。DvalinCode は各ターンの前にプロジェクトルートから
AGENTS.md を読み込み、システムプロンプトの === PROJECT INSTRUCTIONS === の下に挿入します。トークン予算に含まれるため、内容は簡潔にしてください。
🤝 コントリビューション
コントリビューションを歓迎します。コードベースは意図的に小さく、的を絞った構成になっています。CONTRIBUTING.md を参照してください。
git clone https://github.com/arthurpanhku/dvalincode
cd dvalincode && npm install
npm test # 584/584 core tests ✅
npm run typecheck
📄 ライセンス
MIT — LICENSE を参照してください。
🔗 独立性とクレジット
DvalinCode は独立した実装です。ここに記載されている Anthropic、Claude、Claude Code、OpenAI、OpenAI Codex、GitHub、Cursor、Aider、opencode、Cline、HKUDS/nanobot、その他のプロジェクトやベンダーとは、提携、資金提供、推奨のいずれの関係もありません。
DvalinCode の製品方針とアーキテクチャは、公開された研究、オープンソースプロジェクト、公開論文、標準、リリースノート、エージェント型コーディングのエコシステム全体で一般的なワークフローパターンから知見を得ています。これらの貢献に心より感謝いたします。
- HKUDS/nanobot(MIT)は、DvalinCode の
TurnStateフローで採用している、明示的なターン状態のアプローチの検証に役立ちました。 - ReAct 論文(Yao ほか、2022 年)は、多くの最新のツール使用エージェントに影響を与えている、広く使われている「推論、行動、観察」のループを示しています。
- OpenAI の
tool_callsメッセージ形式と、より広範な OpenAI 互換プロバイダーのエコシステムは、モデルとツールの連携において、DvalinCode にポータブルなインターフェースを提供しています。 - OpenAI Codex / Codex CLI、Claude Code、Aider、opencode、Cursor、Cline などのコーディングエージェントは、ターミナルエージェント、計画/ビルドモード、権限プロンプト、プロジェクトローカルのコンテキスト、サンドボックス化、セッションのライフサイクル、MCP 統合、差分を優先する編集ワークフローに関するユーザーの期待を明確にしました。
- OpenAI Codex Security とその公開ドキュメントは、Dvalin のセキュリティ専門エージェントに関する研究と、ポータブルな SARIF 引き継ぎに知見をもたらしました。Dvalin は、独立した競合セキュリティランタイムであり続けます。
- コーディングエージェントツールで一般的な、プロジェクトの指示を記述する
AGENTS.mdの規約は、DvalinCode のプロジェクトローカルな指示の読み込み動作に影響を与えました。 - CodeQL、GitHub Code Scanning、Semgrep、SARIF、OpenSSF Scorecard、ISO/IEC 42001 は、DvalinCode のセキュリティ修正と承認可能性に関する方針に知見をもたらしました。
- Git worktree、MCP、ローカルファーストの開発者向けツールのパターンは、分離された修正、管理されたツールアクセス、監査可能な実行に関する製品方針に影響を与えました。
これらの参考資料は、コーディングエージェントにユーザーが何を期待するかについての理解を形作りました。明記されている場合を除き、DvalinCode のソースコード、プロンプト、UI テキスト、ツールスキーマ、モジュール構成、製品実装はオリジナルです。上記プロジェクトのソースコード、プロンプト、UI テキストは一切コピーしていません。
出典の全一覧:docs/REFERENCES.md
💛 貢献者の皆さまに感謝
問題の報告、アイデア、ドキュメントの改善、テスト、コードの貢献はすべて、DvalinCode の改善に役立っています。
| 貢献者 | GitHub プロフィール |
|---|---|
| Arthur Pan | @arthurpanhku |
| Shivas | @shivasb42 |
| Aditya | @adity982 |
| badhope | @weed33834 |
| Samran Asif | @webdevsamran |
| dchaudhari7177 | @dchaudhari7177 |
| TayfurYldz | @TayfurYldz |
自動化された依存関係の更新やメンテナンスの更新を含む、貢献履歴の全一覧をご覧ください。
参加してみませんか?貢献ガイドを読み、最初のプルリクエストを送ってください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。