Atlas / MCP servers / agenxy / dibs

dibsBLOCK

mcp/agenxy/dibs

Keeps your agents in the loop about each other. See what the fleet is doing, then message, sync and send files between agents. Dibs reports; it never acts.

Verdict
BLOCK
Grade
D
Trust score
62 /100
Exposed tools
21 21r · 0w · 0d
Transport
streamable-http
License
GPL-3.0
Stars
2
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://github.com/agenxy/dibs/actions/workflows/ci.yml) [](https://github.com/agenxy/dibs/releases/latest) [](https://pkg.go.dev/github.com/agenxy/dibs) [](LICENSE)

Keeps your agents in the loop about each other.

One place your agents look to see what the rest of the fleet is doing, and the means to do something about it: typed messages with deadlines and receipts, file transfer, advisory claims on shared resources, and topic spaces they can join. Dibs reports, and it never decides what an agent should do next. The three things it performs, it performs to deliver something somebody sent: approving a request that carries grant or adopt makes that change, which is the point of approving it, and a stopped agent with mail is told so. It is told in one of three ways: owned ChatGPT agent threads accept a native app notice (start when idle, steer when running), before the canonical configured queue route runs; [wake.exec] runs an operator-configured delivery command for other routes; or the session socket its harness publishes carries a best-effort digest. A matching native reply confirms input acceptance; a command exit confirms that command ran. Neither confirms mail consumption. The command route carries only the event, without participant names or private bodies in its world-readable argv; the socket carries the bounded coordination digest. Neither carries an imperative. Native app notices carry the event and sender privately, without mail bodies or a window-opening call. Cold ChatGPT threads retain the queue/open fallback, which can navigate the app; queue admission is never claimed

Read from source at commit 0266659a8800OBSERVED · 2026-10-11
02

Connect

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-code
claude mcp add dibs-panel-e2e --env OPENROUTER_API_KEY=${OPENROUTER_API_KEY} --env PI_API_KEY=${PI_API_KEY} -- npx -y dibs-panel-e2e
claude-desktop
{
  "mcpServers": {
    "dibs-panel-e2e": {
      "command": "npx",
      "args": [
        "-y",
        "dibs-panel-e2e"
      ],
      "env": {
        "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}",
        "PI_API_KEY": "${PI_API_KEY}"
      }
    }
  }
}
03

Exposed tools (21)

21 read · 0 write · 0 destructive.

ToolRiskDescription
askerreadwake e2e
builderreadon the web board
cc-agentreadwake e2e
checkerreadpeer
clone-workerreadon a third machine
curiousreadasks and leaves
ghostreadwas refactoring auth
hub-workerreadon the hub machine
intruderreadguard e2e
misboundreadguard e2e
nothreadreadwake e2e
oraclereadanswers
own-sessionreadwake e2e
panel-inspectreadLooking at the board panel: an instrument, not a worker
peerreadsends mail
remote-sleeperreadasleep on the joining machine
remote-workerreadon the joining machine
reviewerreadreviewing the panel
sleeperreadwake e2e
socket-sleeperreadwake e2e
workerreaddoing the work
04

Trust audit

BLOCKgrade D · trust 62/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (5 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
internal/engine/engine.go:445
func (e *Engine) exec(op *core.Op, now time.Time) (core.Result, error) {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
internal/core/post_visibility_test.go:56
const secret = "THE-BODY-OF-THE-POST"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
internal/engine/nobodies_test.go:44
const secret = "SENSITIVE-BODY-NOBODY-ELSE-MAY-READ"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
internal/engine/nobodies_test.go:325
const secret = "SENSITIVE-BODY-NOBODY-ELSE-MAY-READ"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
internal/mcp/apps_test.go:746
const secret = "SECRET-BODY-THE-PANEL-MUST-NOT-GET"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
internal/mcp/apps_test.go:789
const secret = "NESTED-BODY-MUST-NOT-ESCAPE"
LOWInventory / provenance · inv.hidden_file · CWE-1104
.golangci.yml
.golangci.yml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.goreleaser.yml
.goreleaser.yml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
cmd/dibd/human_settings_desktop_test.go:199
cmd := exec.CommandContext(ctx, "xcrun", "swiftc", "-j1", "../../internal/notify/app/notify_darwin.swift", "-o", executable) // #nosec G204 -- exact production source and private test bundle
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
cmd/dibs/hint_commands_test.go:29
for _, root := range []string{"../../cmd", "../../internal"} {
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
cmd/dibs/joinconfig_test.go:797
"hub.example:4777/../../escaped",
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
cmd/dibs/joinconfig_test.go:808
for _, nasty := range []string{"../../escape:4777", "a/b:4777", `a\b:4777`} {
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
cmd/dibs/reconnect_startup_darwin_test.go:136
if out, err := exec.Command("go", "build", "-o", queueBinary, "../../internal/wakeexec/testdata/codexqueue").CombinedOutput(); err != nil {
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
CHANGELOG.md:3219
the scheme. `http://10.0.0.9:4777` served TLS to clients speaking plaintext;
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
CHANGELOG.md:3220
`https://127.0.0.1:4777` served plaintext to clients speaking TLS. The scheme
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
CHANGELOG.md:4069
started with `-addr https://127.0.0.1:4777` registered the bare listener,
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
CHANGELOG.md:5469
"https://127.0.0.1:4777"` passed the loader and produced a confident HTTPS
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
CHANGELOG.md:6328
replacement inherits. A board launched with `DIBS_ADDR=http://10.0.0.9:4777`
LOWNetwork egress · net.tls_off · CWE-200, CWE-319
internal/mcp/e2e/remote_e2e.ts:354
const r = await fetch(`${URL}/api/hosts`, { headers: { "X-Dibs-Local": secret }, tls: { rejectUnauthorized: false } } as any)
Why it matters. certificate verification is disabled
Fix. leave verification on
LOWObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
internal/ledger/ledger_test.go:236
for i, n := range []string{"seedа", "seedb", "seedc"} {
LOWObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
cmd/dibd/guard_presence_test.go:202
"QRST",
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
internal/mcp/e2e/package.json
@modelcontextprotocol/ext-apps, @modelcontextprotocol/sdk, playwright
Why it matters. 3 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
docs/GUEST-BRIDGE-DESIGN.md:439
trust context from endpoint TLS; never share pools or credential transports.
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
internal/mcp/staff.md:175
## If you are an admin
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
CHANGELOG.md:5076
`ProcessType` as `dibd` read the login keychain and ran a complete
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 0266659a8800full audit observations/trust-audit/mcp-server/agenxy__dibs.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-110266659a8800BLOCKD62first audit
06

Questions

What is the dibs MCP server?

Keeps your agents in the loop about each other. See what the fleet is doing, then message, sync and send files between agents. Dibs reports; it never acts.

What tools does dibs expose?

21 in total: 21 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is dibs safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (62/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What credentials does dibs need?

It reads OPENROUTER_API_KEY and PI_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 dibs run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as dibs-panel-e2e.

How current is this page?

The grade is for one exact copy of the source (0266659a8800), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement