ventrox
OfficialVentrox
编码代理每天都会无数次撞上同一堵墙,却没有人看到。
Ventrox 为代理增加一个工具调用:它尝试了什么、什么失败了、损失了多少分钟。
代理无法回读 vents;服务器为每条 vent 盖上会话、项目、分支和时间的戳。
审查者运行 VENTROX_SECRET=$(ventrox grant) claude,然后按粗略相似度分组列出 vents,按数量和分钟数排序。
损失分钟数最多的那堵墙排在最前面。
几百行 Python,主目录中的一个 SQLite 文件,两条命令即可安装。
不会通过网络传输任何内容,也不会落入你的仓库。
聚类是对 n-gram 做 TF-IDF,会漏掉同义词;脱敏是一个正则列表,尽力而为。
限制:每个会话 20 条 vents,每 10 分钟 5 条。
这个想法来自 Lovable 的 vent 工具和 vent-widget。
安装
将 Ventrox 安装为全局工具:
uv tool install git+https://github.com/Vetrox/ventrox.git或者克隆并从检出目录安装:
git clone https://github.com/Vetrox/ventrox && cd ventrox && uv tool install .然后运行设置:
ventrox setup设置会将 ventrox-report 和 ventrox-review 技能复制到 ~/.claude/skills/。
然后它会用 claude mcp add --scope user ventrox -- ventrox 注册 MCP 服务器。
Related MCP server: todox MCP Server
使用
报告者:代理用 tried、failed 和 minutes_lost 调用 ventrox_vent。
它每轮只写一条 vent,并且只有在同样的摩擦重复出现后(两次失败或超过 10 分钟)才写。
它可以在同一会话中用 ventrox_edit 修正一条 vent。
服务器接受每个会话 20 条 vents,每 10 分钟 5 条。
审查者:用一次性令牌启动会话:
VENTROX_SECRET=$(ventrox grant) claude该令牌是一次性的,有效期为 10 分钟。 会话随后持有审查者工具。按以下顺序调用它们:
ventrox_recluster按词汇重叠对未关闭的 vents 分组。ventrox_clusters列出分组,按未关闭数量排序,然后是损失分钟数。ventrox_resolve_cluster将一组标记为resolved或wontfix。
卸载
ventrox setup --remove
uv tool uninstall ventrox
rm -r ~/.local/share/ventrox # deletes all vents工具
工具 | 模式 | 参数 | 返回 |
| 报告者 |
|
|
| 报告者 |
|
|
| 审查者 |
| 该 vent,或 |
| 审查者 |
|
|
| 审查者 | 无 |
|
| 审查者 | 无 |
|
| 审查者 |
|
|
| 审查者 |
|
|
文本字段长度为 1 到 4000 个字符。minutes_lost 的范围是 0 到 1440。
环境变量
变量 | 用途 | 默认值 |
| 数据目录 | 未设置 |
| 会话 ID | 每个进程生成 |
| 审查者会话的授权令牌;一次性,有效 10 分钟 | 未设置 |
| 包含项目示例的文件的路径 | 未设置 |
| 服务器每个会话接受的 vents 数量 | 20 |
| 服务器每 10 分钟接受的 vents 数量 | 5 |
数据位置
服务器按顺序选择 $VENTROX_HOME、$XDG_DATA_HOME/ventrox 和 ~/.local/share/ventrox 中的第一个。
所有 vents 都存放在该目录下的 vents.db 中。
该文件是纯 SQLite,没有加密;只有文件权限保护它。
当数据目录位于 git 工作树内时,服务器拒绝启动,并以退出码 2 退出。
技能
ventrox-report 告诉代理什么情况下一次摩擦算作一条 vent,以及三个字段必须包含什么。
ventrox-review 告诉审查者依次运行 recluster、clusters,然后 resolve。
ventrox setup 安装两者。
项目示例
在项目根目录放置一个 .ventrox.md 文件,以添加项目特定的优质 vent 示例。
将 VENTROX_EXAMPLES 设置为文件路径,以对所有项目添加示例。
服务器会将两者追加到 ventrox_vent 工具描述中。
开发
uv sync
uv run pytest
uv run ventrox非目标
Ventrox 不同步到问题跟踪器。 它没有多用户模式。 它不记录工具调用轨迹,只记录代理写入的三个字段。 它不打开任何网络连接。
Available Tools
2 toolsventrox_editA
Edit the tried, failed, or minutes_lost of a vent you wrote.
Provide the vent ID. Validation rules match ventrox_vent. Returns ok (true or false). If the edit fails, we do not state the reason. Possible causes: wrong ID, wrong session, or validation error.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| tried | No | ||
| failed | No | ||
| minutes_lost | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description correctly explains that it returns a bare true/false, does not report failure reasons, and lists likely causes of failure. It also indicates scope ('a vent you wrote'), which implies an ownership or session restriction, though it does not detail authentication behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is focused, front-loaded with the action, and every clause earns its place. It includes the necessary fields, the required input, return shape, and failure behavior without padding or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description gives sufficient info to call it and interpret false results. The user session context is mentioned but not explained, and validation rules are deferred to a sibling tool, which is acceptable but not fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must clarify parameter meaning. It names all editable fields ('tried, failed, or minutes_lost') and the required id, covering the four parameters adequately even without per-property explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description's leading sentence clearly states the action ('Edit') and the resource ('a vent you wrote') and specifies the editable fields. It distinguishes itself from the sibling ventrox_vent by framing this as an edit operation for existing vents, not a creation operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the required input ('Provide the vent ID') and implies this is used to modify an existing vent instead of creating one. It does not explicitly name ventrox_vent as the alternative, but the context signals make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ventrox_ventA
Record friction you hit today.
A vent describes what blocked you. Write what you tried, what failed, and how many minutes you lost. Do not write fixes, workarounds, or lessons. We do not read vents back to you.
Write one vent per turn. Write a vent only after you hit the same friction again. Friction repeats when the same thing fails two times or more, or when one thing costs more than 10 minutes.
Good vents:
tried "run the test suite with
uv run pytest", failed "import error onconftest.pythree times in a row; the fix needed PYTHONPATH that no doc states", minutes_lost 25tried "deploy to staging with the standard CloudFormation template", failed "VPC id mismatch in the template; had to edit manually each time for 3 deploys", minutes_lost 18
tried "install the linter with
pip install ruff", failed "no wheel for Python 3.13 on macOS arm64; built from source twice, flaky on CI", minutes_lost 12tried "run database migration with
python manage.py migrate", failed "timeout on the first attempt; docs don't mention --timeout flag; second attempt with flag succeeded", minutes_lost 8
Not vents:
A one-off typo you fixed once. That is not repeated friction.
"How do I make the tests faster?" That is a question, not friction.
"Next time use pytest-xdist for parallel tests". That is a lesson or a fix, not what blocked you.
"Finished the feature, took 3 hours". That is a task-progress note, not friction.
| Name | Required | Description | Default |
|---|---|---|---|
| tried | Yes | ||
| failed | Yes | ||
| minutes_lost | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does so thoroughly. It discloses that vents are not read back, that only one vent should be written per turn, that vents should only be logged after repeated friction, and that fixes/workarounds/lessons should be excluded. This goes well beyond a simple 'record friction' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average, but every section earns its place: a front-loaded purpose statement, eligibility thresholds, and illustrative good/bad examples. It is information-dense rather than padded, and the structured examples are easy for an agent to pattern-match against.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a logging tool with no output schema and no annotations, the description is complete. It tells the agent what to record, when recording is appropriate, what not to record, and what happens after recording ('we do not read vents back to you'). No critical operational detail appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must supply all parameter meaning. It clearly maps 'tried' to what you attempted, 'failed' to what blocked you, and 'minutes_lost' to the time lost. The examples reinforce this by showing realistic combinations, and the 'not vents' section clarifies what should not go into the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as recording friction: what you tried, what failed, and minutes lost. It gives strong examples of good and bad vents. However, it does not explicitly differentiate itself from the sibling tool ventrox_edit, so the agent must infer the create-vs-edit boundary from the tool names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: write a vent only after the same friction repeats, with precise thresholds like two failures or more than 10 minutes lost. It also gives clear exclusions such as one-off typos, questions, lessons, and task-progress notes. It does not mention ventrox_edit as the alternative for editing existing vents, so the usage guidance is excellent for creation but not complete against its sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.0- First observed
ventrox_edit - First observed
ventrox_vent
TDQS
Scored across 2 tools
ventrox_vent is exclusively for recording a new friction event, while ventrox_edit explicitly modifies an existing vent's fields. There is no overlap or ambiguity between creating and editing.
Both tools share the ventrox_ prefix and use short action-style names, making the pattern predictable. The only minor inconsistency is that ventrox_vent uses the verb 'vent' while ventrox_edit omits an object noun such as 'vent'.
Two tools is slightly thin, but it matches the server's focused purpose of recording and correcting friction entries. Each tool is meaningful and there is no bloat.
The server covers creating and editing vents, which are the core operations for its purpose. There is no delete or list/read tool, though deletion is a minor gap and reading is intentionally not provided.
Related MCP Connectors
Error tracking for small teams and their coding agents.
Memory for coding agents: the decisions, the dead ends, and where the last session stopped.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Read-only production error evidence for coding agents investigating failures.
Related MCP Servers
- AlicenseCqualityAmaintenanceEnables coding agents to query, compare, and audit local profiler traces, benchmarks, memory captures, and execution evidence without uploading code or data, using CLI and MCP interfaces.11150 PyPI118MIT
- AlicenseNot gradedqualityAmaintenanceEnables agents to create and manage persistent task logs, decisions, dead ends, questions, and handoffs, with file staleness detection and activity reporting.2 npm2MIT
- AlicenseBqualityCmaintenanceEnables local engineering workflow management by consolidating tickets, QA evidence, time tracking, root cause investigation, knowledge, and reporting into a single SQLite database, allowing generation of complete ticket packages for handoffs, dailies, or career evidence.236 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables MCP-capable coding agents to coordinate via authenticated task creation, claiming, messaging, and review approval over a secure local event log.-