Open Multi AgentBLOCK
Self-hosted TypeScript agent runtime with durable approvals and verifiable run records. Own it, approve it, audit it.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
OMA
Agents your organization can own, approve, and audit. OMA (Open Multi-Agent) is a self-hosted TypeScript agent runtime: consequential actions wait for durable, tamper-evident approvals, and every run leaves a record you can verify offline, byte for byte.
Website ·
dfe2da8cbc42OBSERVED · 2026-10-12Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add release-bot --env AGENT_API_KEY=${AGENT_API_KEY} --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env ARK_API_KEY=${ARK_API_KEY} --env ASTA_API_KEY=${ASTA_API_KEY} -- npx -y @open-multi-agent/[email protected]{
"mcpServers": {
"release-bot": {
"command": "npx",
"args": [
"-y",
"@open-multi-agent/[email protected]"
],
"env": {
"AGENT_API_KEY": "${AGENT_API_KEY}",
"ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
"ARK_API_KEY": "${ARK_API_KEY}",
"ASTA_API_KEY": "${ASTA_API_KEY}"
}
}
}
}Exposed tools (74)
66 read · 8 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
a | read | A |
b | read | B |
bash | write | Run a shell command. |
big | read | Returns large output. |
big_output | read | returns a large string |
boom | read | fails |
change-analyst | read | Classifies merged changes and drafts evidence-backed changelog entries. |
charge_card | read | Charge a card. |
commit | write | Commit a labelled side effect. |
commit_effect | write | Commit a labelled side effect to an external system. |
compatibility-auditor | read | Attempts to find breaking changes, migration requirements, and release blockers. |
custom_tool | read | Custom tool |
danger | read | Dangerous op. |
delegate_to_agent | write | Run a sub-task on another agent from this team and return that agent\ |
echo | read | Echo input |
echo_tool | read | Return the caller-supplied payload unchanged. |
engram_commit | write | Commit a verified fact to Engram shared team memory. |
engram_conflicts | read | List conflicts between facts in Engram shared memory. |
engram_query | read | Query Engram shared memory for facts about a topic. |
engram_resolve | read | Override an auto-resolution for a conflict between facts. |
errorbig | read | Throws a huge error. |
fail | read | Always throws. |
failed_pic | read | Pic |
file_edit | write | Edit file |
file_read | read | Read the contents of a file from disk. |
file_write | write | Write file |
files | read | Files |
format_currency | read | Format a number as a localised currency string. |
get_exchange_rate | read | Get the current exchange rate between two currencies. |
get_release_evidence | read | Return immutable release evidence collected from the latest core tag through the current HEAD. |
get_weather | read | Get the weather for a city |
glob | read | List file paths under a directory that match an optional filename glob. |
greet | read | greets |
grep | read | Search for a regular-expression pattern in one or more files. |
invalid | read | returns invalid output |
json-errored | read | Always fails with a non-JSON error message. |
json-gated-invalid | read | Returns invalid JSON output after the gate allows it. |
json-ok | read | Returns valid JSON output. |
json-truncated | read | Returns broken-but-deceptive JSON output. |
leaky | read | returns a sensitive-looking value |
legacy | read | legacy string tool |
limited | read | Has its own limit. |
long_tool | read | Returns long output |
lookup | read | Look up |
malformed_gate | read | Uses a malformed gate decision. |
my_custom | read | A custom capability. |
my_custom_tool | read | A custom tool for testing |
no-schema | read | No output schema configured. |
noop | read | noop |
nullable_input | read | Accepts a required nullable value. |
pic | read | Pic |
private_lookup | read | Privacy test tool. |
read_release_contract | read | Read the repository release contract from .github/RELEASING.md. |
read_release_review_bundle | read | Read one deterministic, risk-ranked, size-bounded bundle of base-to-HEAD diffs. The bot selects the paths; model-supplied repository paths are not accepted. Unselected paths remain listed in the full evidence metadata. |
release-planner | read | Combines independent analysis into one bounded release proposal. |
release-reviewer | read | Independently approves or rejects the bounded proposal before any mutation. |
release_marker | read | Return a fixed marker for the provider E2E test. |
render | read | render an artifact |
render_preview | read | Render an image preview for a named artifact. |
repo_search | read | Search underscore. |
run_landing_variant | write | Generate this variant\ |
search | read | Search the web |
search_issues | read | Search repository issues. |
short_tool | read | Returns short output |
slow_gate | read | Runs after a delayed gate. |
slow_tool | read | Slow op. |
small | read | Returns small output. |
spy | read | Captures the abort signal from context. |
structured | read | Structured output. |
tdam_search_conversations | read | Search the raw conversation history captured in long-term memory. |
tdam_search_memories | read | Search the team\ |
test | read | test |
track | read | Tracks concurrency. |
typed | read | typed application output |
Trust audit
BLOCKgrade F · trust 56/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- declared (3 observation(s))
- Shell
- declared (6 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
exec(command: string, options: ShellExecOptions): Promise<ShellExecResult> {exec(command: string, options: ShellExecOptions): Promise<ShellExecResult>
const { stdout } = await exec(process.execPath, ['--expose-gc', benchmark, core, otel], {const { stdout, stderr } = await exec(file, args, {+ console.log('login', email, password)origin: `http://127.0.0.1:${port}`,return `http://127.0.0.1:${this.port}/v1`await store.set('secret', 'token sk-ant-api03-abcdefghijklmnopqrstuvwxyz0123456789')expect(stored).not.toContain('sk-ant-api03-abcdefghijklmnopqrstuvwxyz0123456789')credentials: { token: 'credential-secret-value' },token: 'session_from_device_flow',
apiKey: 'session_from_device_flow',
const secret = 'sk-dashboardsecretvalue1234567890'
apiKey: 'deepseek-test-key-123',
const input = '-----BEGIN RSA PRIVATE KEY-----\nMIIEv...\n-----END RSA PRIVATE KEY-----'
dependency-payload.test.ts
console.log(`Total token usage: ${result.totalTokenUsage.input_tokens} input, ${result.totalTokenUsage.output_tokens} output`)console.log(`Total token usage: ${result.totalTokenUsage.input_tokens} input, ${result.totalTokenUsage.output_tokens} output`)?? fileURLToPath(new URL('../../otel/dist/index.js', import.meta.url))import { OpenMultiAgent, defineTool } from '../../src/index.js'import type { AgentConfig, OrchestratorEvent } from '../../src/types.js'import { Agent, AgentPool, ToolRegistry, ToolExecutor, registerBuiltInTools } from '../../src/index.js'import { OpenMultiAgent, Agent, ToolRegistry, ToolExecutor, registerBuiltInTools, type SupportedProvider } from '../../src/index.js'' export OPEN_DESIGN_MCP_ARGS=\'[".../daemon-cli.mjs","mcp","--daemon-url","http://127.0.0.1:7456"]\'\n' +
return fail(`${name} must be a JSON array of strings, e.g. ["mcp","--daemon-url","http://127.0.0.1:7456"].`)Gates applied: no_behavioural_pass.
dfe2da8cbc42full audit observations/trust-audit/mcp-server/open-multi-agent__open-multi-agent.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-12 | dfe2da8cbc42 | BLOCK | F | 56 | first audit |
Questions
What is the @open-multi-agent/core MCP server?
Self-hosted TypeScript agent runtime with durable approvals and verifiable run records. Own it, approve it, audit it.
What tools does @open-multi-agent/core expose?
74 in total: 66 read-only, 8 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is @open-multi-agent/core safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (56/100) and found 4 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What credentials does @open-multi-agent/core need?
It reads AGENT_API_KEY, ANTHROPIC_API_KEY, ARK_API_KEY, ASTA_API_KEY, DASHSCOPE_API_KEY, DEEPSEEK_API_KEY, ENGRAM_INVITE_KEY, GEMINI_API_KEY, GITHUB_TOKEN, GOOGLE_AI_STUDIO_API_KEY, GOOGLE_API_KEY and GROQ_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does @open-multi-agent/core run?
It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as @open-multi-agent/release-bot at 0.0.0.
How current is this page?
The grade is for one exact copy of the source (dfe2da8cbc42), read on 2026-10-12. The repository is watched and re-audited when it changes.