Banditkeep

io.github.CloudCorpRecords由 GitHub 帳號 CloudCorpRecords 發布v0.1.0更新於 Nov 7, 2026

Decision memory for agents: bandit campaigns that learn which action works in which context.

已驗證STDIO僅桌面資料與分析AI 與機器學習

概覽

AI 產生的概覽

BanditDB 情境式賭博機伺服器的用戶端,讓助理建立決策活動、依情境詢問該選哪個動作,並回報結果。

可以做什麼
  • 建立、列出、封存與還原決策活動,新增動作並調整其狀態
  • 針對指定情境詢問應選哪個動作,可單次或跨活動批次查詢
  • 記錄某次互動的成功或失敗,以更新共用模型
  • 檢視各動作的學習狀態,並取得含信賴區間的收斂報告
  • 查看每個活動的預算消耗、剩餘額度、使用率與耗盡情況
適用情境
適合助理或多個代理需要在多個動作間反覆選擇(例如模型路由或方案變體)並從結果中學習的情境,也適合檢查既有活動是否已收斂或預算使用狀況。
執行需求
透過 npx 或 Docker 在本機執行,需要可連線的 BanditDB 伺服器。選用環境變數:BANDITDB_URL(預設 Bearer 權杖送出)、BANDITDB_TIMEOUT_MS(預設 15000)。
安裝前請注意
README 指出由於沒有公開的 API 文件,HTTP 請求路徑是重建推測的,可能與實際伺服器不符。若設定了 BANDITDB_API_KEY,它會在每次請求中送出。相關工具會建立、封存、還原及修改活動與動作,並記錄會改變共用模型的結果。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Banditkeep,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

banditkeep

Give a swarm of agents a memory for decisions. banditkeep is a small client for a BanditDB server: a contextual bandit database that learns, per campaign, which action tends to pay off in which context. An agent asks which arm to pick, acts on the answer, then reports whether it worked — and every later agent pointing at the same server benefits from that outcome immediately, with no retraining step.

Two exploration algorithms anchor the campaigns: LinUCB, deterministic and tunable through alpha, and Thompson Sampling, which explores naturally in a Bayesian way and needs no tuning. Campaigns can also carry budgets for actions that cost something limited, so spend is steered across a horizon instead of running dry on the first day.

Configuration

Three environment variables control the client:

  • BANDITDB_URL (optional) — base URL of your BanditDB server. Defaults to http://localhost:8080.
  • BANDITDB_API_KEY (optional) — when set, it is sent on every request as Authorization: Bearer <key>. Omit it when your server runs without auth; leaving it unset is never an error by itself.
  • BANDITDB_TIMEOUT_MS (optional) — per-request timeout in milliseconds, enforced with an AbortController. Defaults to 15000. (This variable is this rebuild's own addition.)

Tools

  • create_campaign — create a new decision campaign. Requires campaign_id and arms; optionally takes features (names, in order) or feature_dim, alpha, algorithm ("linucb" or "thompson_sampling"), metadata, budgets, and decay_half_life_hours.
  • list_campaigns — list all active campaigns, showing algorithm and alpha; useful to check what exists before calling get_intuition.
  • campaign_diagnostics — inspect per-arm learning state: theta norms, prediction counts, reward rates, and entropy health. Reach for it when a campaign does not seem to be learning or one arm is dominating.
  • campaign_report — a business-level convergence report: whether the campaign has statistically converged, and which arm is winning, with confidence intervals.
  • get_intuition — ask which arm to pick for a given context (an object of feature-name to number, or an array of numbers). Optional eligible_arms / exclude_arms narrow the choice for this request only. Returns the arm and an interaction_id to save.
  • batch_get_intuition — get decisions for multiple campaigns in a single round-trip: pass predictions as a list of {campaign_id, context} dicts, at most 100 per call.
  • record_outcome — report whether the chosen action succeeded (1.0) or failed (0.0), closing the loop for an interaction_id. Rewards outside [0, 1] are rejected locally with reward must be between 0 and 1.
  • archive_campaign — soft-delete a campaign: it pauses predictions and rewards but preserves all learned weights.
  • restore_campaign — restore an archived campaign to active status with all weights intact.
  • campaign_budget — budget spend per resource: consumed, remaining, utilization, shadow price, and exhaustion.
  • add_arm — add an action to a live campaign, optionally warm-started from existing arms and with budget costs.
  • set_arm_status — pause, retire, or reactivate an action (status is "active", "paused", or "retired"); the arm keeps everything it learned.

Unset optional arguments are omitted from requests entirely. Responses come back exactly as the server returned them. An upstream non-2xx reply fails with banditdb error: HTTP <status> and an unreachable server (including a timeout) with banditdb unreachable.

Endpoint provenance

The original project's README and MCP documentation pin the twelve tools, their arguments, the configuration above, and the decision-loop semantics — but no HTTP API is published in those sources. The request paths below are reconstructions, labelled as such:

  • POST <base>/campaigns with the arguments as the JSON body (used by create_campaign).
  • GET <base>/campaigns (used by list_campaigns).
  • GET <base>/campaigns/{campaign_id}/diagnostics (used by campaign_diagnostics).
  • GET <base>/campaigns/{campaign_id}/report (used by campaign_report).
  • GET <base>/campaigns/{campaign_id}/pacing (used by campaign_budget; the SDK method is named pacing).
  • POST <base>/predict with body {"campaign_id": ..., "context": ...} (used by get_intuition).
  • POST <base>/predict/batch with body {"predictions": [...]} (used by batch_get_intuition).
  • POST <base>/reward with body {"interaction_id": ..., "reward": ...} (used by record_outcome).
  • POST <base>/campaigns/{campaign_id}/archive with body {} (used by archive_campaign).
  • POST <base>/campaigns/{campaign_id}/restore with body {} (used by restore_campaign).
  • POST <base>/campaigns/{campaign_id}/arms with body {"arm_id": ...} (used by add_arm).
  • POST <base>/campaigns/{campaign_id}/arms/{arm_id}/status with body {"status": ...} (used by set_arm_status).

Path segments are sent verbatim. One discrepancy worth knowing: the vendor's MCP docs page lists nine of the twelve tools (it omits campaign_budget, add_arm, and set_arm_status); the package's own MCP table enumerates all twelve, and this rebuild follows the package table.

CLI

Each tool is a subcommand taking one JSON argument string:

bash
npx @reneturcios/banditkeep create_campaign '{"campaign_id":"model-routing","arms":["fast","cheap"],"feature_dim":4}'npx @reneturcios/banditkeep list_campaigns '{}'npx @reneturcios/banditkeep campaign_diagnostics '{"campaign_id":"model-routing"}'npx @reneturcios/banditkeep campaign_report '{"campaign_id":"model-routing"}'npx @reneturcios/banditkeep get_intuition '{"campaign_id":"model-routing","context":[0.8,0.2,0.5,0.1]}'npx @reneturcios/banditkeep batch_get_intuition '{"predictions":[{"campaign_id":"model-routing","context":[0.8,0.2,0.5,0.1]}]}'npx @reneturcios/banditkeep record_outcome '{"interaction_id":"9f2c-4e1a","reward":1.0}'npx @reneturcios/banditkeep archive_campaign '{"campaign_id":"model-routing"}'npx @reneturcios/banditkeep restore_campaign '{"campaign_id":"model-routing"}'npx @reneturcios/banditkeep campaign_budget '{"campaign_id":"model-routing"}'npx @reneturcios/banditkeep add_arm '{"campaign_id":"model-routing","arm_id":"balanced"}'npx @reneturcios/banditkeep set_arm_status '{"campaign_id":"model-routing","arm_id":"cheap","status":"paused"}'npx @reneturcios/banditkeep --version

Output is the tool's result text (the upstream body on success). Exit codes: 0 on success, 1 on a runtime error, 2 on a usage error.

MCP server

bash
npx -y @reneturcios/banditkeep mcp

MCP client config (provide the key through the client's environment when your server uses one):

json
{  "mcpServers": {    "banditkeep": {      "command": "npx",      "args": ["-y", "@reneturcios/banditkeep", "mcp"],      "env": {        "BANDITDB_URL": "http://localhost:8080",        "BANDITDB_API_KEY": "<your key>"      }    }  }}

Docker

bash
docker run -i ghcr.io/cloudcorprecords/banditkeepdocker run --rm ghcr.io/cloudcorprecords/banditkeep list_campaigns '{}'

Development

bash
npm installnpm run build   # tsc -> dist/npm test        # tsx --test test/*.test.ts (fake fetch only, no network)npm run dev     # run the CLI from source

License

MIT — Copyright (c) 2026 Rene Turcios

來源:README.md,提交 1489354

工具

12

create_campaign

Create a new decision campaign. Accepts algorithm ("linucb" or "thompson_sampling"), alpha, and optional budgets for actions that cost something limited. Use Thompson Sampling for natural Bayesian exploration with no tuning needed.

輸入參數arms必填alphabudgetsfeaturesmetadataalgorithmcampaign_id必填feature_dimdecay_half_life_hours

list_campaigns

List all active campaigns (shows algorithm and alpha) — useful to check what exists before calling get_intuition.

無需輸入參數。

campaign_diagnostics

Inspect per-arm learning state: theta_norm, prediction counts, reward rates, and entropy health. Use when a campaign doesn't seem to be learning or one arm is dominating.

輸入參數campaign_id必填

campaign_report

Business-level convergence report. Tells you whether the campaign has statistically converged and which arm is winning with confidence intervals.

輸入參數campaign_id必填

get_intuition

Ask BanditDB which arm to pick for a given context. Optional exclude_arms / eligible_arms narrow the choice for this request only. Returns the arm and an interaction_id to save.

輸入參數context必填campaign_id必填exclude_armseligible_arms

batch_get_intuition

Get decisions for multiple campaigns in a single round-trip. Pass a list of {campaign_id, context} dicts.

輸入參數predictions必填

record_outcome

Report whether the chosen action succeeded (1.0) or failed (0.0). Updates the shared model.

輸入參數reward必填interaction_id必填

archive_campaign

Soft-delete a campaign. Pauses predictions/rewards but preserves all learned weights.

輸入參數campaign_id必填

restore_campaign

Restore an archived campaign to active status with all weights intact.

輸入參數campaign_id必填

campaign_budget

Budget spend per resource: consumed, remaining, utilization, shadow price, exhaustion.

輸入參數campaign_id必填

add_arm

Add an action to a live campaign, optionally warm-started from existing arms and with budget costs.

輸入參數costsgrouparm_id必填warm_startcampaign_id必填

set_arm_status

Pause, retire, or reactivate an action. It keeps everything it learned.

輸入參數arm_id必填status必填campaign_id必填

版本歷史

1
  1. v0.1.0最新Nov 4, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分