Vent

by bnomei

Not rated
GitHub

About

Have your agents file their own bug reports

Details

Author
bnomei
Categories
Developer Tools, Automation

missing environment variable <NAME>

Cause: A webhook header references an environment variable that is not set in theventprocess environment.

Fix: Export the variable before starting the MCP client or remove the header from the sink.

Cause: The binary was built without theclifeature and received CLI arguments.

Fix: Use the binary only as an MCP server or rebuild with--features cli.

- src/main.rs: binary mode selection, config loading, CLI output, and MCP server startup.
-
src/config.rs: config path resolution, defaults, validation, and built-in provider maps.
-
src/server.rs: MCP tool definitions and dynamic tool-surface shaping.
-
src/delivery.rs: message trimming, channel selection, event construction, and acknowledgement output.
-
src/sinks.rs: JSONL writing, webhook delivery, env-backed headers, timeout handling, and error redaction.
-
src/provider.rs: provider path validation and webhook JSON rendering.
-
tests/cli.rs: process-level CLI behavior and config bootstrapping coverage.

This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases.

Agents make claims. Reelier writes receipts — record an agent's tool-call workflow once, replay it deterministically at 0 tokens, and diff runs to catch drift.

Equip AI agents with evaluation and self-improvement capabilities with Root Signals.

fable-discipline is a Claude Code plugin that makes agentic software work follow repeatable working patterns: design before code, verify after edits, separate author from reviewer, preserve verified state between sessions, and report uncertainty honestly.

An MCP server for Factifai, enabling integration with any MCP-compatible AI tool to create and retrieve test results asynchronously.

Preflight checks for paid x402 and MCP tools before marketplace listing.

An intelligent MCP server that automates the reproduction of GitHub issues for AWS CDK projects.

Modern Open source Test Management with MCP Server integration

Read-first Jenkins MCP server in Go for agent-driven build debugging. 20 tools including compare_builds, flaky-test detection, JUnit/Ginkgo failure parsing, and disk-cached console logs with on-disk path handoff. Write tools (trigger/stop/cancel) gated by JENKINS_MCP_READONLY env var.

Receive-only email and SMS inboxes for automated testing, with wait-for-OTP and wait-for-link tools that let agents complete verification flows.

A YAML-based server for managing manual test cases with tools for test automation workflows.

Allow your agent to complain before the same paper cut becomes tomorrow's bug.

vent-mcpis a small STDIO MCP server that gives agents a non-destructive place to send actionable feedback while they work. Agents can report blocked work, repeated failures, missing capabilities, confusing workflows, or operational friction without interrupting the task flow.

The crate is namedvent-mcp; the installed binary is namedvent. The Rust library surface supports that binary and is not a stable embedding API.

The idea pairs well with Benjamin Verbeek's talk,The agent that files its own bug reportsand theofficial Lovable blog post.

Use this path when you wantventavailable to a local MCP client and a default JSONL feedback log.

- Rust 1.88 or newer and Cargo, when installing from crates.io or source.
- An MCP client that can run a local STDIO server, such as Codex or Claude.

This installs theventbinary with the defaultcliandwebhookfeatures.

On first run,ventcreates a default config at$XDG_CONFIG_HOME/vent-mcp/config.tomlor~/.config/vent-mcp/config.toml. The default config contains onefeedbackchannel and one local JSONL sink.

feedback (default) - Blocked work, repeated failures, or confusing workflows. Avoid routine progress updates.

JSONL events are written tovents.jsonlbeside the config file unless you set[logging].jsonl_dir.

Ifventis on yourPATH, add it as a local STDIO MCP server:

codex mcp add vent -- vent claude mcp add --transport stdio vent -- vent

Use an absolute path toventif your MCP client does not inherit your shellPATH.

Download a prebuilt archive from theGitHub Releasespage, extract it, and placeventon yourPATH.

git clone https://github.com/bnomei/vent-mcp.git cd vent-mcp cargo build --release

The binary is written totarget/release/vent.

Build without webhook and HTTP dependencies:

cargo build --release --no-default-features

Build JSONL-only delivery while keeping the shell CLI:

cargo build --release --no-default-features --features cli

When theclifeature is disabled, the binary only accepts a bare MCP server invocation. Any CLI arguments exit with an error.

With no arguments,ventstarts the STDIO MCP server:

Use the same binary from a shell when theclifeature is enabled:

vent list vent "The queue changed mid-run." vent --channel automation "The failing check output was hard to correlate." vent --mcp

Successful CLI delivery prints the event id and channel:

Message text is trimmed before delivery. Empty messages and unknown channels are rejected before any sink receives an event.

When the config contains only the default channel,list_channelsis hidden and theventinput schema only containsmessage. When multiple channels exist,list_channelsis exposed andventaccepts an optionalchannel.

{ "message": "The failing check output was hard to correlate with the changed file.", "channel": "automation" }

Theventresponse is an acknowledgement:

{ "ok": true, "eventId": "aZ8pQ2xK", "channel": "automation" }

If delivery fails,okisfalseanderrorcontains the first sink failure. TheeventIdis a short trace id, not a deduplication key. Agents should not send repeated vents for the same issue unless they have new root-cause evidence.
- VENT_MCP_CONFIG
- $XDG_CONFIG_HOME/vent-mcp/config.toml
- ~/.config/vent-mcp/config.toml

Implicit XDG or home-directory configs are created when missing. IfVENT_MCP_CONFIGpoints to a missing file, startup fails instead of creating it.

Start fromconfigs/config.sample.tomlor the generated default config.

default_channel = "feedback" [[channels]] name = "feedback" description = "Blocked work, repeated failures, or confusing workflows. Avoid routine progress updates." sinks = ["log"] [[sinks]] type = "jsonl" name = "log"
{ "id": "aZ8pQ2xK", "timestamp": "2026-06-03T12:34:56Z", "channel": "automation", "message": "The failing check output was hard to correlate with the changed file.", "project": "my-repo" }

Theprojectvalue is only the current directory name.vent-mcpdoes not record the full local workspace path.

vent-mcpkeeps routing deliberately simple:

- A channel is the route the agent can choose, or omit to usedefault_channel.
- A sink is a concrete destination, such as local JSONL logging or a webhook.
- A provider is a webhook payload shape.

Sink names and channel names do not have to match. For example, anautomationchannel can write to the default log and post to Discord:

default_channel = "feedback" [[channels]] name = "feedback" description = "General feedback." sinks = ["log"] [[channels]] name = "automation" description = "Build, test, CI/CD, deployment, scheduler, or pipeline failures that blocked progress." sinks = ["log", "discord-automation"] [[sinks]] type = "jsonl" name = "log" [[sinks]] type = "webhook" name = "discord-automation" provider = "discord" url = "https://discord.com/api/webhooks/..." timeout_ms = 10000

With this config,channel = "automation"vents are written tovents.jsonland posted to Discord. Other channels go only to the sinks they list.

Webhook sinks POST JSON. With no provider, or withprovider = "raw", the raw vent event is sent unchanged.

Custom provider maps live in the same TOML config file. The left side is a canonical event field and the value is a dotted JSON output path. Numeric path segments create arrays. Iffield_label_keyis set, paths ending in.valuealso get a generated label such asProject.

[providers.discord] field_label_key = "name" message = "content" project = "embeds.0.fields.0.value" [[sinks]] type = "webhook" name = "discord-automation" provider = "discord" url = "https://discord.com/api/webhooks/..." timeout_ms = 10000

Webhook headers read values from environment variables:

[[sinks]] type = "webhook" name = "private-endpoint" url = "https://example.test/vent" [[sinks.headers]] name = "Authorization" env = "VENT_WEBHOOK_AUTH"

If a webhook returns a non-2xx response, the error preview is shortened and known URL or header secrets are redacted before the caller sees it.

Cause:VENT_MCP_CONFIGpoints to a path that does not exist.

Fix: Create the file at that path, unsetVENT_MCP_CONFIG, or point it at an existing TOML config.

Cause: The CLI or MCP caller requested a channel that is not declared in[[channels]].

Fix: Runvent list, choose one of the configured names, or add the channel and its sink route to the config.

Cause: The message was empty after trimming whitespace.

Fix: Send a specific, actionable message that says what failed and what would unblock the work.

missing environment variable <NAME>

Cause: A webhook header references an environment variable that is not set in theventprocess environment.

Fix: Export the variable before starting the MCP client or remove the header from the sink.

Cause: The binary was built without theclifeature and received CLI arguments.

Fix: Use the binary only as an MCP server or rebuild with--features cli.

- src/main.rs: binary mode selection, config loading, CLI output, and MCP server startup.
-
src/config.rs: config path resolution, defaults, validation, and built-in provider maps.
-
src/server.rs: MCP tool definitions and dynamic tool-surface shaping.
-
src/delivery.rs: message trimming, channel selection, event construction, and acknowledgement output.
-
src/sinks.rs: JSONL writing, webhook delivery, env-backed headers, timeout handling, and error redaction.
-
src/provider.rs: provider path validation and webhook JSON rendering.
-
tests/cli.rs: process-level CLI behavior and config bootstrapping coverage.

This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases.

Agents make claims. Reelier writes receipts — record an agent's tool-call workflow once, replay it deterministically at 0 tokens, and diff runs to catch drift.

Equip AI agents with evaluation and self-improvement capabilities with Root Signals.

fable-discipline is a Claude Code plugin that makes agentic software work follow repeatable working patterns: design before code, verify after edits, separate author from reviewer, preserve verified state between sessions, and report uncertainty honestly.

An MCP server for Factifai, enabling integration with any MCP-compatible AI tool to create and retrieve test results asynchronously.

Preflight checks for paid x402 and MCP tools before marketplace listing.

An intelligent MCP server that automates the reproduction of GitHub issues for AWS CDK projects.

Modern Open source Test Management with MCP Server integration

Read-first Jenkins MCP server in Go for agent-driven build debugging. 20 tools including compare_builds, flaky-test detection, JUnit/Ginkgo failure parsing, and disk-cached console logs with on-disk path handoff. Write tools (trigger/stop/cancel) gated by JENKINS_MCP_READONLY env var.

Receive-only email and SMS inboxes for automated testing, with wait-for-OTP and wait-for-link tools that let agents complete verification flows.

A YAML-based server for managing manual test cases with tools for test automation workflows.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.