search_docs
Search Tandem docs
Search the published Tandem docs index for relevant pages.
limitquery必填audiencedocs_refengine_version
ac.tandem由 tandem.ac 发布官方发布者v0.3.2更新于 Oct 24, 2026
Remote MCP server for Tandem docs, install guides, SDKs, workflows, and agent setup help.
远程 MCP 服务器,让助手搜索、读取并回答 Tandem 已发布文档中关于安装、SDK、工作流和代理设置的问题。
Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。
把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。
阅读 https://sourceweft.com/mcp/ac.tandem%2Fdocs-mcp/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。把它添加到你客户端的 mcpServers 配置中。
{
"mcpServers": {
"docs": {
"type": "http",
"url": "https://tandem.ac/mcp"
}
}
}[Website] [CI] [Registry Publish] [Latest Release] [npm client] [PyPI client] [License: Mixed MIT/Apache-2.0 + BUSL-1.1]
Interested in Tandem Hosted? Join the waitlist
Tandem enforces policy between AI agents and the tools, data, memory, and actions they use.
Agents can reason, draft, and propose work. Tandem decides what they are authorized to see, which tools they can call, which actions must pause for approval, what memory/context they can access, and what evidence gets recorded.
This makes Tandem useful when agents touch real company systems: files, repositories, email, MCP tools, customer data, internal docs, production workflows, and long-running automations.
For platform and security teams, Tandem acts as a runtime control plane for agentic systems: scoped tool access, approval gates, permissioned memory, tenant/resource boundaries, and audit evidence.
The model proposes. Tandem enforces.
In governance terms, Tandem manages delegated authority for AI agents at runtime.
An agent may be allowed to draft a customer email, but not send it.
Tandem can expose the draft tool, hide or block the send tool, pause at an approval gate, resume only after a human approves, and record the decision in the audit trail.
Tandem calls this runtime authority: authorization, execution control, approval, scoped memory, and audit enforced outside the model. Entrypoints such as the desktop app, TUI, web control panel, channels, and SDKs are clients of the same engine runtime.
Agent intent -> Runtime policy -> Scoped tool/data access -> Approval gates -> Artifacts -> Audit trail
-> AI runtime infrastructure | Enterprise readiness | Runtime trust boundaries | EU AI Act readiness | Compliance starter pack | Connect an agent via MCP
Agents are becoming workers. They read company context, call tools, open pull requests, draft customer communication, operate project boards, and prepare decisions that used to stay inside human-only systems.
Prompts are not permissions. A system prompt can ask a model to avoid a tool, skip a folder, or wait for approval, but the model should not be the security boundary. Tandem puts those controls in the runtime, so a workflow can grant the agent only the tools, memory, and actions needed for the current step — and deny anything outside that scope.
Companies also need central AI context without flat access. A permissioned company memory should know what the company knows, but an agent acting for one team, tenant, project, or user should only retrieve the slice it is allowed to use.
Tandem is designed for teams that need to run AI work under real operational controls:
Tandem is useful locally and grows toward stricter company deployments:
tandem-engine serve for SDKs, control panels, automations, and CI/dev environments.Tandem helps teams operate AI workflows with human oversight, scoped tools, durable execution evidence, and protected-action controls. For regulated or security-sensitive deployments, start with the EU AI Act readiness brief, then use the Compliance Starter Pack for control mapping, Article 50 transparency guidance, deployer instructions, an Annex IV documentation template, and a limitations/responsibility matrix.
Install the master CLI, then bootstrap the panel and its engine service:
Use this when you want the browser-based control center backed by the engine.
For local installs, you can now open Settings -> Providers -> openai-codex and choose Connect Codex Account to sign in through the browser instead of pasting an OpenAI API key.
openai-codex.Generate a fully editable control panel app in your own folder:
Use this when you want to customize routes, pages, themes, styles, or runtime behavior without editing node_modules.
If you want an existing agent to help install or configure Tandem, connect that agent to Tandem's MCP interface first. The MCP docs explain how to wire your own agent into Tandem so it can assist with setup, configuration, and follow-up tasks:
If you only want the engine runtime, you can keep it foreground-only:
npm i -g @frumu/tandem-tui && tandem-tuinpm install @frumu/tandem-client or pip install tandem-clientTandem is built for developers first, using an open-core model. We believe that to trust an AI runtime, you must be able to audit the execution router line-by-line.
Local Development & Evaluation: The permissively licensed crates and libraries (MIT OR Apache-2.0) may be used under their own terms. Every distributed engine binary also includes the source-available BUSL-1.1 components, which are free for evaluation, development, testing, source inspection, personal non-commercial use, and non-production proofs of concept.
Enterprise Path: Advanced features for scaled organizational deployments, such as enterprise identity federation, richer policy enforcement, signed receipt chains, private sidecar enforcement, SIEM export, and HA packaging, are planned enterprise capabilities and may be governed under commercial or source-available terms, including the Business Source License 1.1 (BUSL-1.1) where declared.
License Boundary: Commercial production use of the BUSL-1.1 components — including internal production use, client production deployments, and managed, hosted, SaaS, white-label, embedded, OEM, or reseller offerings — requires a separate commercial license from Frumu LTD. See docs/LICENSING.md for the exact package-by-package terms.
.env, .ssh/*, *.pem, *.key, secrets folders).pptx) generationTandem already includes the runtime building blocks for governed AI work in hosted and self-managed environments. The next enterprise capabilities strengthen identity, policy, audit export, and administration around those building blocks.
Available now:
Planned enterprise capabilities:
The SDKs are API clients. They do not bundle tandem-engine.
You need a running Tandem runtime (desktop sidecar or headless engine) and then use the SDKs to create sessions, trigger runs, and stream events.
Runtime options:
Desktop app running locally (starts the sidecar runtime)
Headless engine via npm:
TypeScript SDK: @frumu/tandem-client
Python SDK: tandem-client
Engine package: @frumu/tandem
Configure providers in Settings.
Notes:
openai-codex is currently intended for local engine-backed Tandem setups.openai provider.websearch can now be configured directly from:
Recommended default:
Backend = autoauto prefers configured providers and can fall through across backends instead of pinning the engine to a single hosted search path. For headless installs you can still configure this through env vars:
If Brave is rate-limited and Exa is configured, auto can continue with Exa instead of immediately surfacing search as unavailable.
MIT, Apache-2.0, and MIT OR Apache-2.0 components sit alongside source-available BUSL-1.1 compiler and governance components, as documented in docs/LICENSING.md.127.0.0.1) and configured endpoints.For the full threat model and reporting process, see SECURITY.md.
Advanced MCP behavior (including OAuth/auth-required flows and retries) is documented in docs/ENGINE_CLI.md.
For local self-built updater artifacts, generate your own signing keys and configure:
pnpm tauri signer generate -w ./src-tauri/tandem.keyTAURI_SIGNING_PRIVATE_KEYTAURI_SIGNING_PASSWORDpubkey in src-tauri/tauri.conf.jsonReference: Tauri signing documentation
Output paths:
If a downloaded .dmg shows "damaged" or "corrupted", Gatekeeper is usually rejecting an app bundle/DMG that is not Developer ID signed and notarized.
aarch64/arm64 vs x86_64/x64).Right click -> Open or System Settings -> Privacy & Security -> Open Anyway).Contributions are welcome. See CONTRIBUTING.md.
Engine-specific build/run/smoke instructions: docs/ENGINE_TESTING.md
Engine CLI usage reference: docs/ENGINE_CLI.md
Engine runtime communication contract: docs/ENGINE_COMMUNICATION.md
.github/workflows/release.yml (tag pattern v*).github/workflows/publish-registries.yml (manual trigger or publish-v*)This repository uses a mixed licensing model. docs/LICENSING.md is the canonical package-by-package map.
Core engine crates and tools (e.g. tandem-core, tandem-server, tandem-types, tandem-orchestrator, and others in crates/):
MIT OR Apache-2.0 unless their manifest or local license says otherwiseMission compiler crate (tandem-plan-compiler):
BUSL-1.1)crates/tandem-plan-compiler/LICENSE for termsGovernance engine crate (tandem-governance-engine):
BUSL-1.1)crates/tandem-governance-engine/LICENSE for termsIncident monitor crate (tandem-incident-monitor):
BUSL-1.1)crates/tandem-incident-monitor/LICENSE for termsEnterprise server crate (tandem-enterprise-server):
BUSL-1.1)crates/tandem-enterprise-server/LICENSE for termsEngine server crate (tandem-server, since 0.7.0):
BUSL-1.1)crates/tandem-server/LICENSE for termsIn short: Tandem is open core. The permissive protocol, SDK, client, and local tooling surfaces are open source, while the engine server, mission/plan compiler, recursive governance engine, incident monitor, and enterprise server are source-available under Business Source License terms.
None of the licenses in this repository grant trademark rights. "Tandem", "Frumu", and the associated logos are trademarks of Frumu LTD — see TRADEMARKS.md for the usage policy.
来源:README.md,提交 4a15cd0
Search Tandem docs
Search the published Tandem docs index for relevant pages.
limitquery必填audiencedocs_refengine_versionFetch a docs page
Fetch and normalize a published Tandem docs page by path or URL.
path必填docs_refengine_versionGet a starting docs path
Recommend the best Tandem docs starting path for a desktop user, server admin, or developer.
role必填docs_refRecommend next docs
Recommend the next Tandem docs to read after a current page, optionally biased toward a goal.
goallimitdocs_refcurrent_path必填Answer a Tandem how-to question
Answer how to install or use Tandem, build workflows, or use the SDKs by synthesizing relevant published docs.
task必填limitaudiencedocs_refengine_versionGet a Tandem guide
Return a structured Tandem learning guide for install-engine, python-sdk, typescript-sdk, build-workflows, or headless-deploy.
topic必填docs_refWarm docs cache
Refresh the docs index and preload the most important Tandem docs pages into cache.
docs_refforce_refreshInspect docs cache status
Inspect the current docs cache state for index sources and warmed pages.
无需输入参数。
Refresh docs index
Force-refresh docs indexes and report whether data came from the network, cache, or stale fallback.
docs_refforce_refreshRefresh one docs page
Force-refresh a docs page and report whether content came from the network, cache, or stale fallback.
path必填docs_refforce_refreshInvalidate docs cache
Invalidate docs cache entries for index data, all pages, or a specific page path.
pathtargetdocs_refCompare docs index refresh
Force-refresh the docs indexes and return before/after hashes so content changes can be proven.
docs_refCompare page refresh
Force-refresh a docs page and return before/after hashes so page content changes can be proven.
path必填docs_ref已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在仓库或注册中心条目中声明许可证。
npm i -g @frumu/tandemtandem install paneltandem panel inittandem panel opennpm create tandem-panel@latest my-panelcd my-panelnpm installnpm run devtandem-engine serve --hostname 127.0.0.1 --port 39731flowchart TD Human[Human operator or team]
subgraph Entrypoints["Entrypoints: clients, not authority boundaries"] Desktop[Desktop app] Panel[Web control panel] TUI[Terminal UI] SDK[TypeScript / Python SDKs] Channels[Slack / Discord / Telegram] end
subgraph Agents["Agents and models: propose, reason, draft"] Workers[Agent workers] Models[OpenAI / Anthropic / OpenRouter<br/>OpenCode Zen / Ollama] end
subgraph Tandem["Tandem governed runtime: owns authority"] API[HTTP/SSE API] Tenant[Auth mode, tenant context<br/>and authority chain] Projection[Authority projection<br/>resources, grants, data classes] Runs[Sessions, workflows<br/>automations, context runs] Gates[Human approval gates] Policy[Tool and MCP policy] Memory[Permissioned memory<br/>and company knowledge] Secrets[Provider and MCP secrets] Artifacts[Artifacts, validation<br/>and run evidence] Audit[Audit trail and tool ledger] end
subgraph Systems["Company systems and data"] Workspace[Workspace files and repos] MCP[MCP servers and connectors] Data[Customer / company data] Browser[Browser and external tools] end
Human --> Desktop Human --> Panel Human --> TUI Human --> SDK Human --> Channels
Desktop --> API Panel --> API TUI --> API SDK --> API Channels --> API
API --> Tenant Tenant --> Projection Projection --> Runs Runs <--> Workers Workers <--> Models
Runs --> Gates Runs --> Policy Runs --> Memory Runs --> Artifacts Gates --> Audit Policy --> Audit Artifacts --> Audit
Policy --> Secrets Policy --> Workspace Policy --> MCP Policy --> Data Policy --> Browser Memory --> Datanpm install -g @frumu/tandemtandem-engine serve --hostname 127.0.0.1 --port 39731// npm install @frumu/tandem-clientimport { TandemClient } from "@frumu/tandem-client";
const client = new TandemClient({ baseUrl: "http://localhost:39731", token: "..." });const sessionId = await client.sessions.create({ title: "My agent" });const { runId } = await client.sessions.promptAsync(sessionId, "Summarize README.md");
for await (const event of client.stream(sessionId, runId)) { if (event.type === "session.response") process.stdout.write(event.properties.delta ?? "");}# pip install tandem-clientfrom tandem_client import TandemClient
async with TandemClient(base_url="http://localhost:39731", token="...") as client: session_id = await client.sessions.create(title="My agent") run = await client.sessions.prompt_async(session_id, "Summarize README.md") async for event in client.stream(session_id, run.run_id): if event.type == "session.response": print(event.properties.get("delta", ""), end="", flush=True)TANDEM_SEARCH_BACKEND=autoTANDEM_BRAVE_SEARCH_API_KEY=...TANDEM_EXA_API_KEY=...TANDEM_SEARXNG_URL=http://127.0.0.1:8080TANDEM_SEARCH_URL=https://search.tandem.acgit clone https://github.com/frumu-ai/tandem.gitcd tandempnpm installcargo build -p tandem-aipnpm tauri devpnpm tauri build# Windows: src-tauri/target/release/bundle/msi/# macOS: src-tauri/target/release/bundle/dmg/# Linux: src-tauri/target/release/bundle/appimage/# Run lintspnpm lint
# Run testspnpm testcargo test
# Format codepnpm formatcargo fmttandem/├── src/ # React frontend│ ├── components/ # UI components│ ├── hooks/ # React hooks│ └── lib/ # Utilities├── src-tauri/ # Rust backend│ ├── src/ # Rust source│ ├── capabilities/ # Permission config│ └── binaries/ # Sidecar (gitignored)├── scripts/ # Build scripts└── docs/ # Documentation