MINARA

環境変数

エージェントがシークレットを読み込む仕組みと、新しい変数を追加する際の規約

このページでは、minara-agent-v2 が環境変数を読み込む規約と、新しい変数を導入する際の手順を説明します。エージェントが読み込む各変数のデフォルト値・フォーマット・利用ファイル・「未設定時に何が壊れるか」については、リファレンス → 環境変数 を参照してください。

公式テンプレートはプロジェクトルートの .env.example です。このファイルと両ページを常に同期させてください。

MINARA_ は Minara プラットフォーム固有の変数(MINARA_API_KEYMINARA_BASE_URLMINARA_SKIP_FUND_CONFIRMMINARA_DATA_DIRMINARA_OPENAI_BASE_URLMINARA_OPENAI_CHAT_PATH)に予約されています。エージェントループの基盤変数(ゲートウェイ、ログ、モデル、シナリオ、メモリ設定)にはこのプレフィックスを付けません。

ユーザー向けのつまみは Settings(settings.json#preferences)に保存します。シークレットは credentials.json(設定 → API Keys / Messaging)に保存します。呼び出し側は prefs.get / secrets.* / infra.get で読みます。Env は起動時のオペレーター層であり、上書きチェーン上の文書化されたフォールバックです。

規約の要点

API キー・シークレット・token・上書き可能な URL が必要なスキルやツールは、必ず次の手順に従ってください。

  1. 正しい保存先に書き、façade から読む。 シークレットは API-key / messaging レジストリと secrets.dataSource / secrets.messaging。ユーザー向けつまみは preferences schema と prefs.get。オペレーター基盤(GATEWAY_PORTMINARA_DATA_DIR)は config/infra/schema.tsinfra.get。シークレットをハードコードしないでください。CLI 引数として受け取りエコーすることも禁止です。

  2. 同じコミットで apps/agent/src/config/env-docs/ にドキュメント付きエントリを追加し、.env.example を再生成する。 エントリには次の情報を記載してください。制御する内容・利用するスキル / ツール・オペレーターが設定するタイミング・未設定時のデフォルト動作・有効な値のフォーマット。1 行だけのスタブ(# FOO_KEY=)は却下されます。

  3. ドメインスキルapps/agent/src/skills/builtin/*.ts または apps/agent/src/skills/external/<id>/)の場合は、資格情報が存在しないときにスキルが完全に非表示になるよう requires_env で宣言してください。

    export const myNewSkill: DomainSkill = {
      id: "research.my_provider",
      // ...
      requires_env: ["MY_PROVIDER_API_KEY"],
    };
  4. ツールapps/agent/src/tools/*.ts)の場合、シークレットが存在しないときはファクトリ関数が空の ToolEntry[] を返すようにしてください。ツールレジストリは未登録の名前を静かに除外するため、下流スキルの tool_names 参照はグレースフルにデグレードします。

    export function createMyProviderTools(): ToolEntry[] {
      const apiKey = secrets.dataSource("MY_PROVIDER_API_KEY");
      if (!apiKey) return [];
      // ...
    }
  5. 本物のシークレットをコミットしないでください。 .env は git-ignore 済みです。コミットするテンプレートは空の値を持つ .env.example です。

.env の読み込み方

読み込みは apps/agent/src/config/load-env.ts が担います。これは Node 22 の組み込み process.loadEnvFile(".env") を呼び出す副作用モジュールで、すべてのエントリーポイントの最初の行でインポートされます。

  • apps/agent/src/gateway/cli.ts, REPL モード
  • apps/agent/src/gateway/server.ts, HTTP モード

ESM の評価順序により、process.env.<NAME> をインポート時に読み込む下流モジュールよりも前にローダーが実行されることが保証されます。

優先順位: シェル / CI / systemd がすでにエクスポートしている変数は .env の値より優先されます。ローダーは既存のキーを上書きしません。これは Node のデフォルト動作に合致しており、CI が注入したシークレットを意図せず隠してしまうことがない、最も安全なルールです。

dotenv 依存なし。 Node 22.5 以降で安定している process.loadEnvFile のみを使用します。.env が存在しない場合はエラーにならず、何も起きません。

変数一覧

各変数の詳細ドキュメント(デフォルト値・フォーマット・利用ファイル・「未設定時に何が壊れるか」)は、リファレンス → 環境変数 を参照してください。以下の表はクイックリファレンスです。

LLM プロバイダー

少なくとも 1 つが解決(直接、または minara auth login で保存した OAuth プロファイル経由)しなければ、エージェントは起動を拒否します。

変数デフォルトフォーマット効果
ANTHROPIC_API_KEYなしsk-ant-...Claude のプライマリ認証情報。未設定時は保存済み OAuth、次に OpenRouter へフォールスルー。
OPENROUTER_API_KEYなしsk-or-...マルチモデルの代替ルーター。未設定時は Anthropic パスが失敗した場合にのみ試行。
OPENAI_API_KEYなしsk-...画像生成、KB エンベディング、TTS、および(オプトイン)LLM。この変数だけでは LLM プロバイダとして OpenAI は自動選択されません。LLM パスを有効にするには minara auth login openai --api-key $OPENAI_API_KEY を実行してください。画像 / 音声 / KB ツールはこの変数だけで動作します。
OPENAI_BASE_URLhttps://api.openai.com/v1URLOpenAI API ベース URL の任意の上書き。Azure 互換ゲートウェイや企業プロキシ向け。
OPENAI_ORG_IDなしorg-...課金ルーティング用の任意の OpenAI-Organization ヘッダー。
XAI_API_KEYなし不透明文字列ネイティブ xAI(Grok)LLM プロバイダのキー : xai-api-key プロバイダ経由で api.x.ai/v1 に直接呼び出し。auto-select で優先度は最も低く、既存の Anthropic / OpenRouter 設定を置き換えません。
XAI_BASE_URLhttps://api.x.ai/v1URLxAI API ベース URL の任意の上書き。
MINARA_XAI_OAUTH_CLIENT_IDxAI Grok-CLI 公開 idUUIDauth.x.ai に送る OAuth public client_id を上書き。デフォルトは Hermes Agent と共有する公開 id を再利用(RFC 8252 §8.4 で許可)。xAI 側でいつでも無効化される可能性あり。

Minara コア

変数デフォルトフォーマット効果
MINARA_API_KEYなし不透明な文字列Minara REST の認証情報。未設定時は保存済みの OAuth プロファイル(Web UI でのサインイン)へフォールバック。
MINARA_BASE_URLhttps://api.minara.ai絶対 URLバックエンド API のオリジン。ステージング環境やローカルモックを指す場合のみ上書きします。
MINARA_FRONTEND_BASE_URLhttps://minara.ai絶対 URLWeb フロントエンドのオリジン。ターミナルハイパーリンクとディープリサーチレポート内の token:// / address:// ディープリンクが解決される URL。ステージングフロントエンドやローカル Next.js dev server を指す場合に上書きします。
AGENT_MODELclaude-sonnet-4-6モデル IDメインのエージェントループモデル。/model コマンドでも設定可能。
MINARA_DATA_DIR~/.minara絶対パスSQLite・サンドボックス・認証・ログのルートディレクトリ。
MINARA_TERMINAL_CWD絶対パスエージェントの作業ディレクトリを上書きします(ファイル読み書きおよびシェルコマンドの cwd)。解決順序:セッション単位の上書き → この変数 → process.cwd()。起動ディレクトリと作業ディレクトリが異なる gateway/cron の常駐プロセスに使用します。ローカル CLI は通常未設定のままシェルの cwd にフォールバックします。存在しないパスは無視されます。
FILES_URL_BASE/v1/filesURL またはパス公開ファイルリンクのプレフィックス(リバースプロキシ経由)。
OFFLINE_MODEオフ1/true/yes/onサンドボックスツールからの外部 HTTP を強制無効化。
LOG_LEVELinfodebug|info|warn|errorログ出力の閾値。debug は安全ですが、ログ量が約 4 倍になります。

HTTP ゲートウェイ

変数デフォルトフォーマット効果
GATEWAY_HOST127.0.0.1IP / ホスト名バインドするインターフェース。ループバック = ローカルのみ。ループバック以外は認証が必要(対話モードではガードが起動を拒否、Docker/CI モードではトークンを自動生成)。
GATEWAY_PORT8080整数ゲートウェイがバインドする TCP ポート。
GATEWAY_AUTH_TOKENなし不透明な文字列すべての /v1/... ルートの Bearer token。ループバック上で未設定の場合は認証が無効。ループバック以外のバインドで未設定の場合は自動生成または起動拒否。
MINARA_ALLOW_INSECURE_BINDなし1/true/yes/onセキュアバインドガードをバイパスし、ループバック以外のアドレスで未認証のまま起動する。信頼済みのファイアウォール保護下のホスト専用。
WEB_UI_DIST_DIRなし絶対パス同一オリジンで / に配信する web-ui の dist/(デスクトップ / 単一ポート)。未設定時は静的 UI なし(API のみ)。
WEBHOOK_PORTなし整数オプションの受信 webhook 専用ポート。

セーフティと資金移動

変数デフォルトフォーマット効果
DISABLE_STRICT_PLAYBOOK未設定(厳格モード有効)1/true で無効化buildPlaybookBlock をレガシーのソフトアドバイザリヘッダーに戻します。デフォルト動作では「このターンの AUTHORITATIVE specification」チェックリスト形式が使用されます。
DISABLE_METHODOLOGY_INJECTION未設定(注入有効)1/true で無効化オンデマンドメソドロジーの 3 パス(シナリオプレースホルダー、ツール出力 <methodology_reminder>methodology_lookup ツール)すべての無効化スイッチ。デフォルト動作では Wilson ≥ 0.55 の昇格ティアでストアに問い合わせます。
DISABLE_METHODOLOGY_INSTANCE_DISPATCH未設定(ディスパッチ有効)1/true で無効化BO チューニング済みメソドロジーインスタンスオーバーライドの無効化スイッチ。デフォルト動作ではインスタンスの閾値をテンプレートのデフォルトにマージします。無効時はテンプレートのみで解決します。
DISABLE_KNOWLEDGE_BUDGET未設定(バジェット有効)1/true で無効化knowledge-budget ネゴシエーターの無効化スイッチ。デフォルト: シナリオ / メモリ / ロールブロックの合計 token を KNOWLEDGE_BUDGET_TOKENS に制限。無効時はフル長で出力。
ROLE_MEMORY_MODEshadowoff / shadow / active起動時に固定される Role Memory モード。off は既存データを監査用に保持しますが、新規作成・評価・検索・注入を停止します。shadow は対応付けられ実行済みの手動取引だけを生成・評価し、prompt には注入しません。active は反省済みケースを一致する分析ロールと Institution Trader / PM の prompt に追加します。自動または発生元不明の perps は常に除外され、実行ツールにもケース文は渡りません。不正値は警告後 shadow に戻り、変更には再起動が必要です。
DISABLE_PARALLEL_TOOL_CALLS未設定(並列有効)1/true で無効化エージェントループのターンごと並列ツールディスパッチの無効化スイッチ。デフォルト: META_UNSAFE 拒否リスト(activate_skills)に含まれない READ_ONLY ティアのツールは Promise.all で並列実行。CONFIRM_ONCE 以上のティア(資金移動 / 書き込み / 出金)は常にシリアル実行。無効時はレガシーの for-await ループと同様に 1 ツールずつ実行。tool_result メッセージの順序はいずれの場合も保持されます。
CHAT_INTENT_GATING_ENABLED未設定(オフ)1/true で有効化インテントゲート方式のパーソナライゼーション注入。有効時: キャッシュされるプレフィックスには常時注入されるパーソナライゼーションのコア(取引サマリー、コアの知識 / リスクタグ、最近のメモリ、カスタムプロンプト、有効な嗜好)が入り、ワンショット分類器がそのターンに必要な残りの行動タグ次元だけを揮発ブロックに追加するため、キャッシュを乱しません。無効時: 毎ターン完全なパーソナライゼーションブロックがキャッシュプレフィックスに注入されます(レガシー)。有効時はターンごとに短い分類器呼び出しが 1 回増えます。
POSITION_MEMORY_ENABLED未設定(オフ)1/true で有効化ポジション / セッション認識のメモリ注入。有効時: 資産に関わるターン(メッセージ内のティッカー、またはユーザーの直近スポット上位銘柄)で、その資産に関する保存済みメモリを最大 5 件、揮発ブロックに注入します。アドバイス系の質問には過去の見解と取引メモを、ファンダメンタルズ系の質問にはユーザーの分析嗜好と習慣を取り込みます。決定的かつローカルに動作します(キーワードによるインテントルーティングと SQLite 参照のみで、追加の LLM 呼び出しはありません)。取引シグナルは、取引サマリー再構築で更新される事前構築のスポット上位銘柄アーティファクトを読み取ります。実行時には personalization.positionMemory 嗜好としても変更できます。
SHADOW_MODEsampledoff|sampled|onA/B 観測レコーダー。分類器 / メモリスナップショット / ロールヒント決定ポイントで(現在、提案)の変数ペアを shadow_runs SQLite テーブルに書き込みます。
SHADOW_SAMPLE_RATE0.1[0, 1]SHADOW_MODE=sampled 時のサンプリング確率。
SHADOW_RETENTION_DAYS30正の整数shadow_runs の行を保持する日数。起動時に 1 回だけ削除が実行されます。
MEMORY_SNAPSHOT_PREF_LIMIT50非負整数セッションメモリスナップショットの preference カテゴリ行のクォータ。
MEMORY_SNAPSHOT_STRAT_LIMIT30非負整数strategy カテゴリ行のクォータ。
MEMORY_SNAPSHOT_TRADE_LIMIT50非負整数trade_note カテゴリ行のクォータ。
MEMORY_SNAPSHOT_OBS_LIMIT30非負整数observation 行のベースクォータ。pref / strategy / trade バケットの未使用スロットがこのバケットにオーバーフローします。
MEMORY_REFRESH_WRITES3非負整数ソフトスナップショット更新のリビルド以降の書き込み数閾値。
MEMORY_REFRESH_TURNS10非負整数ソフトスナップショット更新のリビルド以降のターン数閾値。セッション中間リビルドにはどちらの閾値(AND 条件)も満たす必要があります。0 に設定するとリフレッシュを完全に無効化します(スナップショットはセッション固定)。
MEMORY_WRITE_MAX_LEN2000正の整数(200〜8000)エージェントが memory_writeobservation / preference / trade_note / strategy)でメモリを保存する際に保持する最大文字数。長い内容は保存前に切り詰められ、1 件の過大なエントリがプロンプトや検索インデックスを圧迫しないようにします。実行時には memory.writeMaxLen 設定でも変更できます。より厳しいパーソナライズ事実の経路は独自の短い上限を持ち、影響を受けません。
KNOWLEDGE_BUDGET_TOKENS15000非負整数シナリオプレイブック・メモリコンテキスト・ロールヒントの合計 token の上限。超過時は優先度の低い順(ロール → メモリ → シナリオ)にカット。0 でキャップを無効化。DISABLE_KNOWLEDGE_BUDGET=1 でトリミング自体をバイパス。
KNOWLEDGE_SOURCE_TAGSfalsetrue|false各動的ナレッジブロックに HTML コメントの出典タグを付加します。人間 / ログ監査用のみ。
PREFERENCE_LEARNING00/1M2 嗜好進化フロー(定期的な LLM プロポーザーとチャット内昇格カード)のマスタースイッチ。0 の場合、M1 PreferenceStore と REPL/CLI/REST による手動管理は引き続き利用可能。プロポーザーは実行されず、カードも注入されません。
PREFERENCE_PROPOSER_INTERVAL30正の整数プロポーザーが実行されるターン間隔。fire-and-forget の非同期処理で、ユーザーへのレスポンス送信後に実行されるため、ユーザーレイテンシには影響しません。
PREFERENCE_WEEKLY_QUOTA3正の整数7 日間のローリングウィンドウ内で許可される最大昇格数。達すると、プロポーザーはそのサイクルをスキップします。手動の /preferences approve はクォータを上書きします。AutoClaw の「週 1〜3 回のディープ進化」原則を踏まえた設計です。
PREFERENCE_DEDUP_THRESHOLD0.85[0, 1]候補が既存のライブ嗜好(状態 ∈ active/proposed/deprecated)の重複とみなされ、永続化前に除外される TF-IDF コサインスコア。
PREFERENCE_PROPOSER_BATCH_SIZE200正の整数1 回のプロポーザー LLM 呼び出しに取り込む最近の候補の最大数。
PREFERENCE_MIN_CLUSTER_SIZE3正の整数(≥ 2)提案を永続化するためにプロポーザーの LLM が報告する必要がある、1 クラスターあたりの最小サポートメッセージ数。3 のフロアにより、シングルトンはキューに入りません。
PREFERENCE_ASK_COOLDOWN_HOURS24正の整数同じ嗜好に対する連続昇格リクエストの最小間隔(時間)。「あとで」または無返答後、行は proposed のままになりますが、このウィンドウが経過するまでリクエストキューから非表示になります。
PREFERENCE_ASK_MIN_GAP_TURNS5正の整数同じ REPL セッション内で異なる嗜好の連続昇格リクエスト間の最小ターン数。連続したカードリクエストを防ぎます。
PREFERENCE_SKIP_IN_CHAT_ASK00/1チャット内昇格カードを完全に無効化します。プロポーザーは引き続き実行され提案を書き込みます。オペレーターは /preferences pending + approve(REPL/CLI/REST)で確認できます。
PREFERENCE_HARD_AUTO_ACTIVATE10/1M3。有効時、強シグナルキーワード(never绝不kill switch など)を含むユーザーメッセージで、カードなしに hard_constraint が自動アクティベートされます。ユーザーは /preferences undo <id> で 24 時間以内に取り消せます。
PREFERENCE_STYLE_AUTO_ACTIVATE10/1M3。同じ dedup_key の N 回の観測後に personal_style 嗜好をサイレント自動アクティベート。カードはより高い影響の嗜好のために予約されます。
PREFERENCE_STYLE_MIN_OBSERVATIONS2正の整数M3。スタイルが自動アクティベートされる前に必要な同一ステートメントの観測数。高いほど、ユーザーが自己矛盾する余地が増えます。
PREFERENCE_HARD_UNDO_WINDOW_HOURS24正の整数M3。強シグナル自動アクティベーション後、ユーザーが /preferences undo <id> を使用できる期間(時間)。このウィンドウ外の行は /preferences deprecate を使用する必要があります。
MINARA_SKIP_FUND_CONFIRMオフ1/true/yes/onすべての資金移動ツールの確認ゲートをバイパスします。非インタラクティブ環境専用。
DISABLE_SCRIPT_RISK_GATEオフ1/true/yes/onexecute_code / terminal / write_file / patch の前で実行される静的解析スクリプトリスクゲートを無効化します。未設定時、RED 検出(大規模 rm *、ワークスペース外パスの削除、IMDS / SSRF、コンテナ脱出、認証情報 / ウォレットストア読み取り、間接的難読化 + シンク)はハード拒否され、YELLOW 検出(資金移動 CLI シェルアウト、オンチェーン危険メソッド、env 汚染、特定パス rm、リスクのあるパッケージインストール)は AskUserQuestion で確認を求めます。truthy に設定すると RED と YELLOW の両方をバイパスします。インシデント対応または完全オフライン CI でのみ使用してください。日常のワークフロー除外にはワークフロー定義の script_risk_policy(body_sha256 + カテゴリ)を使用し、このグローバル env は設定しないでください。監査時、script_risk_decisions.bypassed_by="env_global" が記録されます。
MINARA_TOOL_RESULT_RETAIN_HOURS24[1, 720] の整数<dataDir>/sandbox/files/.tool-results/ に永続化されたオーバーサイズのツール結果が定期的な掃除で削除されるまでの保持時間(時間)。コンプライアンス / 四半期レビュー用には 168(7 日)、一時的な CI 実行には 1 に設定します。不正値 / 範囲外の値は警告ログを出力して 24 時間にフォールバックします。

ハイブリッドメモリ検索

EMBEDDING_PROVIDER=disabled(デフォルト)の場合、ハイブリッド検索のコードパスは非アクティブです。すべてのメモリ行は embedding_state='pending' のままで embedding カラムは NULL になり、searchMemoriesHybrid は既存の FTS5 BM25 パスにフォールスルーして同一のバイト結果を返します。クロスボキャブラリーの検索精度向上(例: 中国語クエリ 山寨币最近怎么样 が英語の altcoin drawdown レッスンを検索できるようにする)が必要な場合にのみ、オペレーターがこれを有効化します。書き込みパスは同期のままです。エンベディングは行のコミット後に queueMicrotask で実行されるため、ユーザー向けレイテンシは変わりません。

変数デフォルトフォーマット効果
EMBEDDING_PROVIDERdisableddisabled|openai|voyageエンベッダーを選択します。disabled = ファクトリ関数が null を返し、ハイブリッドパスは非アクティブ。それ以外は EMBEDDING_API_KEY が必要です。
EMBEDDING_API_KEYなし不透明な文字列Bearer token。OpenAI: sk-...。Voyage: pa-...。disabled 以外のプロバイダーで未設定の場合、警告ログを出力したうえでファクトリ関数は null を返します。
EMBEDDING_MODELプロバイダーネイティブ(text-embedding-3-small / voyage-3モデル IDモデルの識別子。次元数が EMBEDDING_DIM と一致することを検証済みの場合のみ上書きしてください。
EMBEDDING_DIM1536正の整数ベクトルの次元数。起動時に vec0 仮想テーブルを宣言するために使用されます。モデルの次元数が一致しない場合、行は embedding_state='failed' になります。既存の DB で変更する場合は vec0 テーブルの手動削除と再作成が必要です。
EMBEDDING_BASE_URLプロバイダーネイティブ/embeddings で終わる URLセルフホストゲートウェイやプロキシ用のオプション上書き。
SQLITE_VEC_EXTENSION_PATHバンドルされた sqlite-vec npm バイナリ絶対ファイルシステムパスsqlite-vec ロード可能拡張への明示的なパス。バイナリを独自管理する場合(カスタムビルド・システムパス・node_modules を削除した Docker レイヤー)にのみ設定します。読み込みに失敗しても非致命的です。ハイブリッドパスはサイレントに BM25 へデグレードします。

プロバイダーが有効でも一時的な API 障害が発生した場合、行は embedding_state='failed' になります。minara doctor(フェーズ E1)は状態ごとのカウントを表示するため、オペレーターは蓄積状況を確認できます。minara doctor --fix --apply(フェーズ E2)は MemoryStore.backfillEmbeddings() でバックフィルします。failedpending の両方がバックフィルの対象になり、同じ行が成功するまで循環することがあります。10 文字未満の行やメソドロジー注入スキャナーに引っかかった行は skipped になり、エンベディングされません。

バックテストフィードバックループ(Sprint 6, オンライン結果フィラー)

対象実行の学習ループを閉じる定期ジョブです。決定論的な取引後市場結果("+5.20% in 24h" など)を計算・保存し、その後に任意の推論評価を実行します。統一 Trading Memory の発生元ルールが先に適用され、自動または発生元不明の perps は手動評価経路に入りません。

過去の判断を再実行しません。 trade_executions にある pending 行だけを評価します。有効時は通常間隔の前に gateway 起動時に期限超過分を一度処理します。デフォルトは無効です(BACKTEST_ENABLED=false)。

変数デフォルトフォーマット効果
BACKTEST_ENABLEDfalsetrue|falseマスタースイッチ。false = ランナーとスケジューラーは一切登録されません(ランタイムコスト ゼロ)。true = スケジューラーが BACKTEST_CRON_HOURS 時間ごとに実行されます。
BACKTEST_DRY_RUNfalsetrue|falseドライラン: 結果を計算して shadow_runs(facet='backtest_outcome') に出力しますが、updateTradeOutcomerecordUsage はスキップします。初週ロールアウトのプロトコルです。
BACKTEST_MIN_TRADE_AGE_MS86400000(24 時間)正の整数(ミリ秒)トレードが評価対象になるまでの最小経過時間。ReviewEngine.minTradeAgeForEvalMs に渡されます。
BACKTEST_OUTCOME_HORIZON_HOURS24正の整数(時間)created_at からの時間。その時点の価格が結果としてサンプリングされます。評価器がウィンドウ長を確認できるよう結果文字列に表示されます。
BACKTEST_BATCH_LIMIT20正の整数1 回の実行でプルする最大ペンディング行数。ReviewEngine.maxEvalsPerBatch に渡されます。
BACKTEST_CRON_HOURS24正の数スケジューラーの間隔。setInterval().unref() を使用します。1 分未満の値は切り上げられます。
BACKTEST_PRICE_PROVIDERautoauto|hyperliquid|yahoo単一の過去価格ソースを強制します。auto はクリプト → Hyperliquid → Yahoo -USD、株 / 不明 → Yahoo、ステーブルコイン → 1.0 にルーティングします。
BACKTEST_MAX_COST_USD_PER_RUN2.00非負の浮動小数点数1 回の実行あたりのコスト上限。ランナーは実行前後に BudgetTracker.getDailySpend("learning") のスナップショットを取り、超過した場合は status=stopped_budget で停止します。0 で無効化。BudgetTracker の日次 / 月次上限に積み重なります。
LEARNING_RECORD_USAGEfalsetrue|false帰属確認後に live 推論品質とメソドロジー feedback を有効化します。帰属済み取引は methodology_observations と promoted benchmark run 経由で更新され、runner は旧 Wilson カウンターを一律加算しません。shadow 行を確認してから最後に有効化します。

ロールアウトプロトコル(plan dapper-coalescing-shell § Sprint 6):

  1. BACKTEST_ENABLED=trueBACKTEST_DRY_RUN=true を設定して 1 クロンサイクル実行します。shadow_runs WHERE facet='backtest_outcome' を確認し、結果文字列が ±N.NN% in Xh に一致し、スキップ理由が妥当かを確認します。
  2. BACKTEST_DRY_RUN=false に切り替えます。Runner は決定論的 outcome と終端 state を trade_executions に書き、evaluation run と observation は append-only のままです。
  3. 帰属が正常な場合だけ LEARNING_RECORD_USAGE=true にします。evaluation_runsmethodology_observationsmethodology_metric_stats を profile version ごとに監視します。新統計に影響するのは promoted primary run だけです。

パーソナライゼーションリビルド(M3.2 イベント駆動型閾値)

Minara は PersonalizationRebuilder を通じて、すべての会話からトレード嗜好を学習します。M3.2 以前はリビルダーがクールダウン付きで 10 分ごとに実行されていました。M3.2 ではイベント駆動型 + 閾値ゲートに変わりました。データ書き込み(トレード、メモリ、チャットターン)がイベントを発行してリビルダーを起動し、各リビルドは「最小新規入力数」と「最終リビルドからの最小経過時間」という独立した 2 つのゲートをどちらも満たす必要があります。どちらか一方だけでは起動しません。

60 分ごとの安全網スケジューラーは引き続き存在し(例: プロセス再起動によって書き込みとサブスクライバーの間でイベントが失われた場合に対応します)、静かなシステムでは LLM 呼び出しも info ログも発生しません。

トレードサマリーの閾値

変数デフォルトフォーマット効果
FIN_PROFILE_TRADING_SUMMARY_MIN_NEW_TRADES3正の整数ゲート 2 がトレードサマリーリビルドを許可するために必要な、最終リビルド以降の最小新規トレード数。
FIN_PROFILE_TRADING_SUMMARY_MIN_INTERVAL_MIN30正の整数(分)最終リビルドからの最小経過時間。
FIN_PROFILE_TRADING_SUMMARY_MAX_TRADES100正の整数コールドスタート / 強制再生成時に LLM に渡すトレード数の上限。
FIN_PROFILE_TRADING_SUMMARY_INCREMENTAL_MAX_TRADES50正の整数既存のサマリーにマージする際に LLM に渡す新規トレード数の上限。

トレード頻度が高くサマリーが頻繁に更新される場合は閾値を上げてください。バックテストやオンボーディング中にサマリーをできるだけ早く収束させたい場合は下げてください。

メモリ抽出の閾値

変数デフォルトフォーマット効果
FIN_PROFILE_MEMORIES_MIN_NEW_TURNS5正の整数rebuildMemories が実行される前に必要な、最終抽出以降の最小新規チャットターン数。
FIN_PROFILE_MEMORIES_MIN_INTERVAL_MIN10正の整数(分)最終メモリ抽出からの最小経過時間。
MEMORY_CONSOLIDATION_ENABLED未設定(既定でオン)0/false/no/off で無効チャットから抽出した事実の矛盾解消。既定で有効:リビルドごとにバックグラウンド LLM 呼び出しが 1 回増え、各事実が既存の事実の重複・refine・supersede のいずれかを判定します。supersede された事実はソフト削除(復元可能)され、すべての判断が memory_consolidation_events 監査テーブルに記録されます。agent が記録した事実の近重複の調停にも使われます。0 にすると追記のみ(ADD)に戻ります。
MEMORY_CONSOLIDATION_GUIDANCE自由テキスト、最大 500 文字統合が事実をどう統合・廃棄するかを示す任意の非権威的な指針(例「最新の発言を優先」)。ハードな安全ルールを上書きすることはありません。ユーザーが設定したハード制約は、より新しい明示的なユーザー発言がない限り破棄されず、ユーザーが述べた事実は常にアシスタント推論の事実に優先します。統合が無効のときは効果がありません。

rebuildMemories はカーソル last_indexed_chat_id 以降に書き込まれた chat_turns 行をスキャンし、個別の事実を抽出します。既定では ADD のみのプロンプト(UPDATE/DELETE なし)を使い、矛盾は先行する事実と並んで ADD され、検索時に解決されます。MEMORY_CONSOLIDATION_ENABLED が有効な場合は、後続のリゾルバパスが各事実について ADD / UPDATE / SUPERSEDE を判定し、古い行や矛盾する行を書き込み時に整理します(Minara Memory を参照)。抽出された各事実は fact_typeattributed_toentities_jsonlinked_memory_ids のメタデータとともに共有 memories テーブルに行として書き込まれます。

共通の設定

変数デフォルトフォーマット効果
FIN_PROFILE_EVENT_DEBOUNCE_SEC30正の整数(秒)scheduleCheck(dim) のデバウンスウィンドウ。急速なバーストを 1 回のゲートチェック付きリビルドにまとめます。
CHAT_TURN_RECORDING1(有効)0/false/no/off で無効化1 ターンごとに (user_message, final_response, tool_calls)chat_turns に永続化します。rebuildMemories の入力として必要です。

運用上のヒント: 新規デプロイ時は、リビルダーが素早くウォームアップできるよう初日だけ FIN_PROFILE_TRADING_SUMMARY_MIN_NEW_TRADES=1FIN_PROFILE_MEMORIES_MIN_NEW_TURNS=2 を設定してください。プロファイルが安定したらデフォルトに戻してください。

エージェント外履歴ミラー

パーソナライズ・リビルダーは 3 つのデータソースを利用します: ローカル trade_history(エージェント内)、perps_fills(Minara /v1/perp-wallets/fills のサブウォレット横断ミラー)、external_spot_activities(Minara /v1/tx/cross-chain/activities)。以下のノブで MinaraHistorySync の同期戦略と LLM が読む量を調整します。

変数デフォルトフォーマット効果
FIN_PROFILE_HISTORY_SYNC_WINDOW_DAYS90正の整数(日)ローリング同期ウィンドウ。これを超える古いレコードは取得しません。
FIN_PROFILE_HISTORY_SYNC_MIN_INTERVAL_MIN5正の整数(分)連続する同期トリガーのスロットルフロア。ウィンドウ内の複数 scheduleSync() は 1 回にまとめられます。
FIN_PROFILE_HISTORY_SYNC_TIMEOUT_SEC8正の整数(秒)syncAll() 1 回のハードタイムアウト。AbortController 経由で進行中の HTTP リクエストもキャンセルされます。
FIN_PROFILE_HISTORY_SYNC_PAGE_HINT500正の整数(行)perps fills エンドポイントの "ページが満杯かも" 判定。getPerpSubAccountFills が ≥ この値を返すと startTime を進めて再取得します。
FIN_PROFILE_HISTORY_SYNC_OVERLAP_SEC60正の整数(秒)切り詰められた可能性のあるページで startTime をずらすときのオーバーラップ。fill_uid 重複排除でオーバーラップは無害です。
FIN_PROFILE_HISTORY_SYNC_MAX_ROUNDS_PER_SUB10正の整数サブアカウントごとの切り詰めローリングループのハード上限。
FIN_PROFILE_HISTORY_SYNC_MAX_FAILURES5正の整数(source, sub_account_id) ごとの連続失敗閾値。これに達すると通常スケジュールでそのキーをスキップします。
FIN_PROFILE_HISTORY_SYNC_FAILURE_COOLDOWN_MIN30正の整数(分)MAX_FAILURES 到達後、次のプローブ試行はこのクールダウンでゲートされます。成功でカウンターはリセット、失敗で増加。永久停止を防止。
FIN_PROFILE_HISTORY_SYNC_SPOT_MAX_PAGES20正の整数spot ページネーションループのハードキャップ。
FIN_PROFILE_HISTORY_SYNC_SPOT_PAGE_SIZE100正の整数spot ページネーションのバッチサイズ。limit として Minara に転送されます。
FIN_PROFILE_TRADING_SUMMARY_PERPS_RECENT_FILLS30正の整数LLM リビルドが読む最新 perps fills の数。集約データは常に全量送られます。
FIN_PROFILE_TRADING_SUMMARY_SPOT_RECENT_ACTIVITIES20正の整数spot 向けの同等項目。
FIN_PROFILE_TRADING_SUMMARY_AGGREGATE_WINDOW_DAYS90正の整数(日)LLM に渡す per-symbol / per-pair 集約のウィンドウ。
FIN_PROFILE_MEMORY_SOFT_DELETE_RETENTION_DAYS30正の整数(日)ソフトデリートされたメモリの復元可能期間。これを超えると 30 分の purge cron が物理削除します。

同期トリガーモデル。 3 つの経路で MinaraHistorySync.scheduleSync() が発火します: (1) 任意の trade:recorded イベント(エージェントが取引を実行した直後はユーザーも web/mobile で操作した可能性が高い)、(2) PersonalizationRefreshTask の毎時セーフティネット tick(取り逃したイベントの補完)、(3) 明示的な /refresh-personalization --force / POST /v1/profile/refresh 経路。5 分のスロットルでウィンドウ内 API は 1 回しか叩かれません。

ウォーターマーク粒度。 minara_history_sync_state のキーは (source, sub_account_id) です。単一サブアカウントの一時的な失敗が他サブのウォーターマークやグローバル spot カーソルを汚染しません。

Hyperliquid パーペチュアル

MINARA_HL_DEX_DISCOVERY は、パーペチュアルのスナップショット構築と取引履歴の同期時に、Minara が Hyperliquid の名前付きパーペチュアル DEX をどこまで探索するかを制御します。

変数デフォルトフォーマット効果
MINARA_HL_DEX_DISCOVERYオフ1/true/yes/on で有効化パーペチュアルのスナップショットと履歴同期を Hyperliquid の perpDexs ライブディスカバリーにオプトインします。デフォルト動作では、現在のユーザーコホートがポジションを保有する 2 つの DEX(デフォルトの "" と株 / コモディティ向け "xyz")のみをクエリし、スイープごとのファンアウトを 4 サブ × 2 DEX × 2 呼び出し = 16 HL リクエストに抑えます(HL の IP あたりのレート制限内)。有効化するとスナップショットは perpDexs(10 分キャッシュ)を呼び出し、HL が現在公開しているすべての DEX(xyz、flx、vntl、hyna、km、abcd、cash、para、約 9 つ)にファンアウトします。4 サブの典型的なユーザーでは、スイープごとに約 72 リクエストになり、公開 /info エンドポイントで 429 エラーが発生します。デフォルトペア以外の DEX にポジションを保有している場合のみ設定してください。

Strategy Studio(ベータ版)

1 つのオペレーター設定で、strategy-rl ベンチマークランナーが使用するオフラインのストラテジーコード生成サブエージェントを制御します。デフォルト値が適切に設定されているため、未設定のままでも問題ありません。

変数デフォルトフォーマット効果
MINARA_SS_CODEGEN_MAX_ITER3正の整数([1, 10] にクランプ)オフラインコード生成サブエージェントの 1 回のベンチマーク実行あたりの「コード生成 → エフェメラルバックテスト → 改善」ループのステップ予算。サブエージェントはこのステップ数まで実行します。モデルはこの予算内でいつバックテストし、いつ停止するかを自ら判断します。戻り時に、成功は最終バックテストから再計算されます(ステータス COMPLETED かつ取引数が非ゼロかつドローダウン < 0.95)。高速 / 安価な llmClient(例: Haiku)でより良い収束が必要な場合は値を上げてください。低速 / 高コストなモデルでは低くします(1〜2)。apps/agent/src/core/strategy-code-subagent.tsrunStrategyCodeSubagent が参照します。

Harness RL

環境変数デフォルト許可される値用途
MINARA_SKILL_ROUTER_RL_ENABLED未設定(オフ)1 / true / yes / onオペレーター専用の Skill Router Harness RL パイロットを有効にします。バージョン管理されたランキングポリシー、差し替え可能なベンチマークケース、境界付き探索、明示的な昇格とロールバック、昇格済みポリシーによるターンごとの Skill カタログ順序付けを提供します。未設定の場合、skill_router_* テーブルは作成されず、カタログは従来の priority 順を維持します。Skill 本文、ツール権限、安全ゲート、モデル重みは変更しません。

機関投資家モード(マルチエージェント運用チームシミュレーション)

minara_institution_analyze ツールは、高リスクな単一アセット分析のために 6 フェーズのパイプライン(4 アナリストの並列実行 → ブル/ベア討論 → リサーチマネージャー → トレーダー → 3 者リスク討論 → ポートフォリオマネージャー)を実行します。TradingAgents をモデルにしており、ラウンド数のデフォルト値はそのプロジェクトの default_config.py に準拠。タイムアウト / token 上限は Minara の deep-research とエージェントループの規約に従います。

以下の変数はすべてエージェントループのインフラ変数であり、プロジェクト規約に従って MINARA_ プレフィックスはありません。すべて未設定にすると TradingAgents 準拠のデフォルト値が使用されます。

変数デフォルトフォーマット効果
INSTITUTION_MAX_DEBATE_ROUNDS1整数([1, 5] にクランプ)フェーズ 2 のブル対ベアの交互ラウンド数。1 ラウンド = 2 ターン(ブル 1 回 + ベア 1 回)。TradingAgents の max_debate_rounds: 1 に一致します。追加の対立検証が必要な場合は 2 に上げてください。通常分析では 1 のままにしてください。apps/agent/src/tools/institution/orchestrator.tsrunInstitution が参照します。
INSTITUTION_MAX_RISK_ROUNDS1整数([1, 5] にクランプ)フェーズ 5 のアグレッシブ → コンサバティブ → ニュートラルのローテーションラウンド数。1 ラウンド = 3 ターン。TradingAgents の max_risk_discuss_rounds: 1 に一致します。
INSTITUTION_WALL_CLOCK_TIMEOUT_MS1200000整数ミリ秒([60000, 1800000] にクランプ)1 回の minara_institution_analyze 呼び出しのハード上限時間。超過した場合、オーケストレーターはショートサーキットし、完了済みフェーズと meta.truncated: true を返します。LLM 呼び出しごとのタイムアウトは INSTITUTION_PER_CALL_TIMEOUT_MS で管理され、この壁時計を超えないようクランプされます。per-call 上限が 60 秒から 300 秒に移行した際に 600 秒から引き上げられました。以前の速い失敗動作に戻したい場合は両方の設定を元に戻してください。
INSTITUTION_PER_CALL_TIMEOUT_MS300000整数ミリ秒([5000, INSTITUTION_WALL_CLOCK_TIMEOUT_MS] にクランプ)すべてのサブエージェント呼び出し(アナリスト、討論者、マネージャー、構造化リトライ)の LLM 呼び出しごとのタイムアウト。2〜3 のデータツールをディスパッチして 1 回のサブエージェントループで構造化 AnalystReport を書き込む必要があるアナリストは、60 秒の上限を超えることがよくあります。以前の wallClock / 10 の導出ではその途中で中断されていました。クイックモデルのデプロイでは 60000 に下げて速い失敗を実現し、低速なディープモデルでは 600000 に上げて壁時計上限も合わせて引き上げてください。
INSTITUTION_MAX_OUTPUT_TOKENS_PER_TURN4096整数([1024, 16384] にクランプ)パイプライン内のすべての LLM 呼び出し(アナリスト、討論者、マネージャー、構造化リトライ)に適用される max_tokens の上限。コスト上限であり、動作上限ではありません。エージェントループのデフォルト max_tokens に一致します。ポートフォリオマネージャーが executive_summary を切り詰め続ける場合は上げてください。

単一モデルポリシー。 パイプライン内のすべてのロール(アナリスト、討論参加者、リサーチマネージャー、トレーダー、リスクペルソナ、ポートフォリオマネージャー、アロケーター)は、オペレーターが選択したエージェントモデル(エージェントの残りの部分と同じプロバイダー / モデル)で実行されます。ロールごとのオーバーライドはありません。合成に強力なモデルを使用したい場合は、セッション全体のデフォルトモデルを切り替えてください。

コストに関する注記: 1 回の institution 実行は約 25 LLM 呼び出し × 4K 出力 token ≈ 10⁵ 出力 token です。デフォルト設定の Sonnet クラスモデルで約 1〜3 ドルになります。エンドユーザーにツールを公開する場合はこれを明示してください。

ハードコードされた定数(v1 ではオペレーターが調整可能な環境変数ではありません):

  • フェーズ 1 のアナリスト並列数 = 4(アナリスト数。セマフォライブラリなしで 4 スロットに対して Promise.all)。
  • サブエージェントの内部ループターン上限 = 5 ターン。Minara の strategy-code-subagent の規律に一致します。アナリストはレポートを作成するまでに通常 1〜3 回のツール呼び出しで済みます。
  • LLM 呼び出しごとのタイムアウト = wallClock / 10(5 秒のフロア付き)。
  • 出力言語 = 既存のユーザーメッセージ言語検出から継承(deep-research が使用するのと同じパターン)。内部討論ターンは英語のまま。最終レポートのみローカライズされます。

ハードコードされた定数を実際の運用でチューニングする必要がある場合は、フォローアップ PR で環境変数に

メソドロジー監査サブシステム(受動オブザーバー)

学習ループの上に重なる読み取り専用の監査サブシステムで、複合的な健全性スコアを出力します。6 つの次元が複合スコアを構成: synthesis 判定の安定性、卒業後の早期降格率、帰属健全性、アセットクラス カバレッジ、隔離フラッピング検知、cron 健全性。サブシステムは学習状態を一切変更せず、唯一の書き込みは methodology_audit_reports への 1 パス 1 行のみです。エンドツーエンドテストが監査パス前後で 4 つの学習テーブルをハッシュし、書き込みを導入する回帰を即座に検出します。

cron はエージェントループと協調します。各 tick は共有 BusyTracker をチェックし、ユーザーターンが進行中、またはエージェントのアイドル時間が閾値未満なら tick を延期します。連続 N 回延期後はスターベーション ガードが強制実行し、常時忙しい環境でも監査カバレッジを失わせません。パス実行中、オーケストレーターは SQL ステージ間でイベントループに譲り、ターンが入ってくると busy tracker で一時停止します。

デフォルト周期は 1 日 1 回。cron_healthmethodology_cron_runs ハートビート テーブル(src/learning/methodology-cron.ts が各学習 tick の末尾で書き込み)を読みます。帰属レーンが静か(処理対象 case なし)でもループ停止と誤判定されません。

変数デフォルト効果
METHODOLOGY_AUDIT_CRON_ENABLED0プロセス内監査スケジューラのオプトインスイッチ。マルチワーカー環境では IS_PRIMARY_WORKER にも従う。
METHODOLOGY_AUDIT_CRON_INTERVAL_MS86400000(24h)tick 間隔。実行時 [5min, 30d] にクランプ。
METHODOLOGY_AUDIT_WINDOW_DAYS30窓界次元の振り返り期間。[1, 365] にクランプ。
METHODOLOGY_AUDIT_RETENTION_DAYS90methodology_audit_reports 行の保持期間、ローカル日ごとに最多 1 回プルーニング。[7, 3650] にクランプ。
METHODOLOGY_AUDIT_SKIP_BUSY_THRESHOLD_MS180000(3min)BusyTracker が busy または idle 窓がこの値未満を報告した場合、tick を延期。[0, 1h] にクランプ。0 でプリフライト無効化。
METHODOLOGY_AUDIT_MAX_DEFERRED_TICKS4スターベーション ガード。連続延期がこの値に達すると、次の tick は busy でも強制実行。[0, 100] にクランプ。
METHODOLOGY_AUDIT_YIELD_TIMEOUT_MS60000(60s)パス内各譲りポイントでアイドル待機する最大時間、タイムアウト後 busy でも続行。[0, 10min] にクランプ。
DISABLE_METHODOLOGY_AUDITunset1/true で書き込みパス(cron + CLI audit run)を短絡。band=disabled プレースホルダーを返し永続化しない。読み取りパス(audit show/trend/findings)は利用可。

CLI:

minara learning audit run [--window-days N]  # インライン単一パス
minara learning audit show [--latest|--pass <id>]
minara learning audit trend [--days N]       # 複合スコア履歴 + sparkline
minara learning audit findings [--severity high|medium|low]

プロアクティブ・ウェルス・エージェント

有効化された各マンデートをバックグラウンドで動かす監督ループ(ポジションの時価評価、利確/損切り/リバランス、損益スナップショット、作業ログの記録)と、新しい機会を探す低頻度の再探索です。3つとも 設定 → プロアクティブ(およびプロアクティブモジュール内の設定タブ)でライブ編集できます。以下の環境変数は起動時のフォールバックです。マルチワーカー構成では IS_PRIMARY_WORKER=1 のワーカーでのみループが動作します。

変数デフォルト効果
PROACTIVE_SUPERVISOR_ENABLED1(オン)バックグラウンド監督のマスタースイッチ。0 で有効化済みマンデートの自律動作を一時停止します(マンデート自体は有効なまま、再びオンにするまで動作を止めるだけ)。
PROACTIVE_SUPERVISOR_INTERVAL_SEC900(15分)各マンデートがポジションを確認する間隔(秒単位)。実行時に [10s, 1h] にクランプされます。
PROACTIVE_REDISCOVER_INTERVAL_SEC1800(30分)マンデートが新しい機会を探す間隔(有料の再計画ステップ、秒単位)。[1min, 24h] にクランプ。毎サイクル都度読み込むため、再起動なしで変更が反映されます。モデル未設定時は適切にスキップされます。

Point-in-time 財務スナップショット

変数既定値用途
SEC_USER_AGENT未設定SEC EDGAR の照会に必須です。SEC が運用者を識別して連絡できるよう、ProductName [email protected] を使用します。未設定の場合、モードが shadow または enforce でも PIT スナップショット構築は無効です。
PIT_FINANCIAL_SNAPSHOT_MODEshadowdata.pitFinancialSnapshots.mode の起動時フォールバックです。off は従来の Fundamentals フローを維持し、shadow は従来入力を維持しながらスナップショットを構築、記録します。enforce は PIT スナップショットと Fundamentals 分析キャッシュを正式な入力にします。Settings の設定がこの値より優先されます。

履歴スナップショットには、SEC accepted time が要求された締切以前の fact だけを含めます。FMP データは SEC filing と決定的に一致した場合だけ fact を補完します。Yahoo の現在サマリー、時価総額、セクター、業種、TTM 値、DCF は latest-only approximation として扱います。

行動メモリ

BEHAVIOR_MEMORY_ENABLED=true でオプトインします。カテゴリは個別に切り替えられ、資産コンテキスト・取引・会話は明示的に有効化しない限り収集されません。本文、秘密情報、アドレス、注文パラメータ、個別ポジションは保存しません。

変数既定値用途
BEHAVIOR_MEMORY_ENABLEDfalseマスターオプトイン
BEHAVIOR_MEMORY_CAPTURE_{ENGAGEMENT,FEATURE_USAGE,CONFIGURATION,AUTOMATION,STRATEGY}true非機密カテゴリ
BEHAVIOR_MEMORY_CAPTURE_{FINANCIAL_CONTEXT,TRANSACTION,CONVERSATION}false機密集計のオプトイン
BEHAVIOR_REFLECTION_ENABLED / BEHAVIOR_REFLECTION_INCLUDE_IN_MEMORYtrue / false反省とチャット連携
BEHAVIOR_REFLECTION_CUSTOM_PROMPT最大 1,000 文字の反省専用ガイダンス
BEHAVIOR_MEMORY_RAW_RETENTION_DAYS / BEHAVIOR_MEMORY_MAX_MB90 / 128保持期間 / SQLite 上限
BEHAVIOR_MEMORY_BATCH_SIZE / BEHAVIOR_MEMORY_BATCH_KB / BEHAVIOR_MEMORY_FLUSH_MS / BEHAVIOR_MEMORY_QUEUE_MAX256 / 256 / 500 / 10000バッファ書き込み制限
BEHAVIOR_MEMORY_PRESSURE_FREE_MB / BEHAVIOR_MEMORY_CRITICAL_FREE_MB / BEHAVIOR_MEMORY_DISK_CHECK_MS5120 / 1024 / 60000GC・停止・確認しきい値

目次