Coderbuds
Server Details
Your team's shipping standards, org map and delivery metrics, inside your coding agent.
- Status
- Healthy
- Uptime
- 89.0% over 62 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 44 tools
Most tools are carefully steered apart in their descriptions (e.g. get-created vs get-merged explicitly state they must never be reconciled; get-guidance-drift points at get-repo-readiness for existence checks; assess-change-fit vs record-change-fit-decision is clean). The weak spots are a cluster of overlapping health/metrics tools — get-team-overview, get-dora-metrics, get-pull-request-metrics — where 'how is the team doing' could reasonably land on any of the three, and the insights trio (get-my-insights, get-team-insight-summary, mark-insight-seen).
Every name is kebab-case verb_noun with a uniform '-tool' suffix (get-*, set-*, record-*, propose-*, assess-*, link-*, deploy-*, update-*), so the pattern is predictable throughout. Verb choice tracks the action meaningfully rather than drifting.
44 tools is far past a comfortable surface and mixes several distinct products into one server: PR/analytics, DORA, AI and MCP adoption, repo readiness, org mapping, review policy, plus internal sales-pipeline and self-review admin tools. Several metric tools could plausibly be consolidated into fewer parameterized calls, so the count is not earned.
The domain is well covered end to end: change-fit has assess/record/set-standard, prospects have add/update/worklist/draft/record-outreach, self-review has get/propose/record-fix, and team context, readiness, deploy and repo setup all exist. Gaps are minor — no way to remove/close a prospect outright or configure deploy triggers, but those are workable around.
Available Tools
44 toolsadd-prospect-toolAdd prospectAInspect
Internal Coderbuds staff only. Add a company or adviser to the outbound pipeline.
The buyer to look for: a CTO, head of engineering or hands-on engineering manager at a product company with 10–30 engineers on GitHub or Bitbucket. Coderbuds does not support GitLab — a GitLab-only team is not a prospect, however good the fit otherwise looks.
Give the signal that made them worth writing down and the source_url it came from,
and put what you could not verify in qualification_needed rather than guessing. A row
whose signal is "looked like a fit" is a row nobody can act on later.
Everything starts at Sourced regardless of what you pass. Duplicates are worth checking
for first with get-prospect-worklist.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | company or partner. An adviser — fractional CTO, consultancy — is a partner. | company |
| name | Yes | Company or adviser name. | |
| signal | No | What makes them worth approaching now. | |
| website | No | Their website. | |
| location | No | Where they are based. | |
| priority | No | A, B or C. | |
| source_url | No | Where the signal came from, so it can be rechecked. | |
| contact_url | No | Profile URL for that person. | |
| next_action | No | The first thing to do about them. | |
| contact_name | No | Who to approach. | |
| contact_role | No | Their role as published, not as inferred. | |
| qualification_needed | No | What you could not verify. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the lone destructiveHint=false annotation: discloses an access restriction (internal staff only), a state override the caller cannot control ('Everything starts at Sourced regardless of what you pass'), duplicate existence, and the GitLab exclusion that would otherwise produce a bad row. These are exactly the side effects an agent needs before writing.
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?
Front-loaded with the scope rule and the staff-only gate, then the ICP, then the data-quality rules. Every sentence carries information, though the prose is slightly long for a create tool and the 'nobody can act on later' justification is editorial padding.
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 12-parameter create tool with full schema coverage, minimal annotations and no output schema, the description covers audience, qualification criteria, dedupe ordering, state behaviour and data-quality expectations. Missing only what the call returns on success or on a duplicate hit, which is a modest gap given no output schema exists.
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 coverage is 100%, so the baseline is 3; the description earns above that by adding intent beyond the field docs — signal must be why-now, source_url must be recheckable, qualification_needed is where unverified facts go rather than guessing. The only gap is that priority (A/B/C) and next_action get no extra guidance.
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?
States a concrete verb and resource (add a company or adviser to the outbound pipeline) and immediately scopes it to a specific ICP (CTO/head of engineering/hands-on EM at a 10–30 engineer product company on GitHub or Bitbucket, no GitLab). That is enough to distinguish it from save-prospect-draft-tool, update-prospect-tool and get-prospect-worklist-tool without opening any schema.
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?
Explicitly gates the tool to internal Coderbuds staff, tells the agent to de-duplicate with get-prospect-worklist first, and prescribes what to put in signal/source_url versus qualification_needed instead of guessing. It even gives a negative example ('looked like a fit') so the agent knows a low-quality invocation when it writes one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assess-change-fit-toolAssess change fitAInspect
Pre-flight fit check for a change you are about to open as a pull request. Pass the
numstat of your working diff (or, failing that, its additions, deletions, and
changed-file counts) and Coderbuds answers whether the change fits how this team
ships: a verdict with reasons, the team's own merged-PR size norms (median/p75) and
merge time by size category, and the current review-queue pressure. Pass repository and that queue is scoped to it —
human-authored open pull requests on the repo you are working in, not every repo the
team owns, because "review one of these first" is only actionable if you are near
them.
Four verdicts, and only two of them ask anything of you. fits — go. fits_at_edge —
over the standard but inside its tolerance, which is stated for the record and needs
no action, because changes this close to the line merge like changes under it.
caution — meaningfully over; weigh the guidance. split_required — effectively
unreviewable; split it.
Coderbuds applies its own opinionated standard (on by default, teams can opt out): changes well above the standard size get at least a caution regardless of what the team's historical norms would allow — reported as team_norms.target_total_changes.
Also pass review_goals: the distinct outcomes a reviewer must approve in this
change. Describe outcomes, not implementation layers — an API, UI, migration, tests,
and docs that deliver one behavior are one review goal. One goal fits. Two prompt a
caution to confirm they really must ship atomically. Three or more require a split.
This is the scope-coherence standard: a small diff can still be hard to review when
it bundles unrelated decisions. If multiple goals truly cannot ship separately, use
scope_rationale to preserve that context and record the decision after the check.
Best results: pass numstat, the raw output of git diff --numstat <base>.... Coderbuds
then works out the split from the file paths itself — tests, documentation, generated
files (lockfiles, snapshots, minified bundles) and binary assets are identified and
discounted, so the verdict judges the CODE a reviewer actually has to read. 400 lines
of blog post and 400 lines of business logic are not the same review, and without the
paths there is no way to tell them apart.
Failing that, declare the split yourself: test_lines (changed lines living in test
files, e.g. from git diff --shortstat -- tests/) and moved_lines (code relocated
without behavioral change, e.g. an extraction refactor) are subtracted from the
verdict, because a raw count punishes test coverage and double-counts refactors.
Report these honestly; they are recorded with the check and visible to the team.
Do the same for files with test_files and moved_files. A rename sweep, codemod, or
file-move refactor touches a lot of files with almost nothing to read in each, and the
file count is judged separately from the line count — so without these a mechanical
change is called oversized on file count alone. git diff --shortstat -M and
git diff --summary will tell you how many of the changed files were renames.
When the verdict is not "fits", say what you did about it with record-change-fit-decision
— including when you proceed anyway. Overriding is allowed; overriding silently is what
leaves the standard unable to learn it is in the wrong place.
| Name | Required | Description | Default |
|---|---|---|---|
| numstat | No | Strongly recommended: raw `git diff --numstat <base>...` output (tab-separated "added deleted path" rows, `-` for binary). Coderbuds counts the lines and files from it and classifies the paths itself, discounting tests, docs, generated files and binary assets, so the verdict judges the code a reviewer must read. Supersedes test_lines/test_files when given. | |
| additions | No | Lines added in the proposed change (e.g. from `git diff --shortstat`). Required unless numstat is given; worked out from the numstat when omitted. | |
| deletions | No | Lines deleted in the proposed change. Required unless numstat is given; worked out from the numstat when omitted. | |
| repository | No | Optional "owner/name" repository slug the change targets (e.g. patchstack/hub). | |
| test_files | No | Optional: how many of the changed files are test files. Discounted from the file count the same way test_lines is discounted from the line count. | |
| test_lines | No | Optional: changed lines that live in test files (e.g. from `git diff --shortstat -- tests/`). Discounted from the verdict — test coverage is not review burden. Ignored when numstat is given. | |
| moved_files | No | Optional: how many of the changed files were renamed or moved rather than edited (see `git diff --summary`). Discounted from the file count — without this a rename sweep is judged oversized on file count alone. | |
| moved_lines | No | Optional: lines that are relocated code, not new logic (e.g. an extraction refactor). Discounted from the verdict — a raw diff double-counts moves. Estimate honestly; recorded with the check. | |
| review_goals | No | Strongly recommended: the distinct outcomes a reviewer must approve. Describe user or system outcomes, not implementation layers; supporting code, tests, docs, and migrations for one behavior are one goal. One fits, two get a caution, and three or more require a split. | |
| changed_files | No | Number of files changed. Optional but improves the size categorization. | |
| scope_rationale | No | Optional: why multiple review goals must ship atomically. This preserves the reasoning for the team but does not silently waive the scope standard. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| reasons | Yes | Why the verdict is what it is, in plain language. |
| verdict | Yes | The strongest result across active standards: fits | fits_at_edge (over the size standard but inside tolerance — stated, no action expected) | caution | split_required. |
| check_id | Yes | Id of the recorded check — pass it to record-change-fit-decision to say what you did about this verdict. |
| guidance | Yes | Concrete next steps when the change does not cleanly fit. |
| proposed | Yes | The proposed change: additions, deletions, changed_files, total_changes, the discounted surfaces (test_lines, moved_lines, docs_lines, generated_lines, test_files, moved_files, docs_files, generated_files, binary_files), reviewable_changes and reviewable_files (what the verdict judges), size_category (tiny|small|medium|large|oversized, of the reviewable surface). |
| standards | Yes | Per-standard results. `size` reports its own verdict and threshold; `scope_coherence` reports assessed|not_assessed|disabled, the normalized review goals, rationale, reason, and guidance. |
| repository | No | Matched team repository slug, or null if none given/matched. |
| team_norms | Yes | The box: merged PRs analyzed, median/p75 total changes, the Coderbuds standard size ceiling when active (target_total_changes), and average merge-time hours by size category. |
| review_queue | Yes | Current open PR count, how many are awaiting a reviewer, and how many have waited past the Coderbuds review-turnaround standard. Scoped to the repository when one was given. PRs left unreviewed for over a month are reported separately as `abandoned` and excluded from the awaiting/stale pressure counts — they call for closing, not reviewing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only `destructiveHint: false` in annotations, the description carries the behavioral burden well: it explains the four verdict meanings, the default opinionated size standard, repository-scoped queue pressure, discounting of tests/docs/generated/moved content, and that overriding the verdict is allowed but should be recorded. This is rich disclosure beyond annotations.
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 front-loaded with purpose and verdicts, then moves into parameter guidance and follow-up recording. It is long for a tool description, but the complexity of 11 parameters and four verdicts justifies most of the length; a few illustrative passages could be trimmed.
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?
Given an output schema, the description does not need to explain return values in detail, and it covers the important decision context: verdict categories, size norms, queue scope, discounting rules, and the required follow-up recording tool. An agent has enough information to invoke and interpret the tool correctly.
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?
Although schema coverage is already 100%, the description adds meaningful semantics: `numstat` supersedes `test_lines`/`test_files`, test and moved line/file counts are discounted, `review_goals` must describe outcomes rather than implementation layers, and `scope_rationale` preserves context without waiving the standard. These details help an agent choose and populate parameters correctly.
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 states a specific pre-flight action (“fit check for a change you are about to open as a pull request”) and explains exactly what Coderbuds returns: a verdict with reasons, team size norms, merge times, and review-queue pressure. It is clearly distinct from the sibling recording tool, which is named later as the follow-up action.
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 gives strong usage context: run it before opening a PR, pass `numstat` when possible, fall back to manual counts, and use `record-change-fit-decision` afterward when the verdict is not `fits`. It does not explicitly compare against other assessment-adjacent siblings, but the core when-to-use guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy-repository-toolDeploy repository to productionADestructiveInspect
Trigger a production deploy for one of your team's connected repositories. The repository must have a deploy trigger configured — either a deploy hook URL or a GitHub Actions workflow — in its Coderbuds settings. Identify the repository by name (e.g. "saas") or by full name (e.g. "patchstack/saas"). This ships whatever is currently merged; it is not a dry run. Use GetUndeployedPullRequestsTool first if you want to see what will go out.
| Name | Required | Description | Default |
|---|---|---|---|
| repository | Yes | The repository to deploy, by name (e.g. "saas") or full name (e.g. "patchstack/saas"). Must be connected to your team and have a deploy trigger configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
| method | Yes | How the deploy was triggered: "hook" or "workflow". |
| message | Yes | A human-readable summary of the outcome. |
| success | Yes | Whether the deploy was triggered. |
| repository | Yes | The repository that was deployed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already flag destructiveHint=true and openWorldHint=true, so the safety profile is partly covered; the description still adds real value by spelling out what the destruction means ("ships whatever is currently merged; it is not a dry run") and by surfacing the trigger-configuration prerequisite. It omits auth/permission requirements and whether a deploy is idempotent or repeats if called twice.
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?
Four short sentences, front-loaded with the action, then prerequisite, then identifier format, then the dry-run caveat and alternative. Nothing is padding and there is no duplication of boilerplate.
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 one-parameter mutation tool with an output schema (return values need not be explained) and annotations covering the safety profile, the description covers purpose, precondition, argument format, and the irreversibility caveat. An agent has everything needed to call it correctly.
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 coverage is 100% and the single parameter already documents both naming formats and the trigger requirement, so the schema carries the semantics. The description repeats the same examples ("saas", "patchstack/saas") rather than adding new meaning such as case sensitivity or ambiguity resolution across teams.
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?
States a specific verb and resource: "Trigger a production deploy for one of your team's connected repositories." It is clearly differentiated from read-only siblings such as get-deployments-by-person-tool and get-undeployed-pull-requests-tool, which report rather than act.
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?
Gives an explicit prerequisite (the repo must have a deploy hook URL or GitHub Actions workflow configured), explains two accepted identifier formats, and names the alternative: "Use GetUndeployedPullRequestsTool first if you want to see what will go out." That is when-to-use, when-not, and the alternative in a few sentences.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain-pull-request-score-toolExplain pull request scoreARead-onlyIdempotentInspect
Explain why one specific pull request got the quality score and label Coderbuds gave it. Returns the receipts rather than a summary: the recorded score, its label, the size counts, every penalty that was applied with its point cost, the AI adjustment, and the stored breakdown. Use this when someone asks "why is #1186 marked poor" or wants to understand a low score on a PR they opened.
The score is structural: it starts at 100 and subtracts penalties for diff size, lines
changed, files changed, change complexity, focus, title/description quality and changes
spanning unrelated areas, then applies a bounded AI adjustment (at most ±20) for
readability, test coverage and security. It does not read CI results and does not run a
linter — never claim otherwise. Report only the factors this tool returns.
| Name | Required | Description | Default |
|---|---|---|---|
| repository | Yes | The repository the pull request lives in, as "owner/name" (e.g. patchstack/saas) or a bare repository name. | |
| pull_request_number | Yes | The pull request number, e.g. 1186. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | Link to the pull request. |
| size | No | additions, deletions, total_changes, changed_files, lines_category, diff_characters. |
| found | Yes | Whether Coderbuds is tracking this pull request. |
| label | No | The label for that score: Elite, Excellent, Good, Average, Below Average, Needs Improvement, Poor. |
| score | No | The recorded quality score out of 100. |
| title | No | Pull request title. |
| author | No | Who opened it. |
| number | Yes | Pull request number. |
| scored | Yes | Whether a quality score was recorded. |
| status | No | Pull request status. |
| factors | Yes | Human-readable receipts: each penalty applied and its point cost. |
| message | No | Why the lookup failed, when found is false. |
| category | No | How Coderbuds categorised the change (feature, bug-fix, dependency-update, …). |
| repository | No | Full repository name. |
| ai_adjustment | No | Points the AI review added or removed on top of the structural score. |
| scoring_basis | Yes | What the score does and does not measure. Quote this rather than inventing criteria. |
| recommendation | No | What would raise the score next time. |
| objective_score | No | The structural score before any AI adjustment. |
| not_scored_reason | No | Why there is no score, when scored is false — usually the PR was past the size limit for review. |
| recorded_breakdown | No | The breakdown stored when the review ran. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent), and the description goes well beyond them: it explains the scoring model (starts at 100, subtracts diff/file/complexity/focus/title penalties), the bounded ±20 AI adjustment and its dimensions, and explicitly disclaims CI and linting so the agent cannot misreport. It also instructs 'Report only the `factors` this tool returns', which is real behavioral guidance.
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 lead sentence front-loads the purpose followed by the return contents and usage triggers, all earning their place. The second paragraph on the scoring algorithm is longer than strictly necessary for tool selection but does support correct interpretation of the output, so the cost is mild.
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?
With an output schema present, the description needn't document return fields, yet it highlights the key ones and warns about what the score does and does not include. For a two-parameter read tool with full annotation coverage, nothing an agent needs is 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 100% for both required parameters, so the schema already documents repository format and PR number. The description adds only an incidental example ('#1186') and no additional semantics, so the baseline of 3 applies.
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 opens with a precise verb and resource: 'Explain why one specific pull request got the quality score and label Coderbuds gave it.' It also enumerates what the response contains (score, label, size counts, penalties with point costs, AI adjustment, stored breakdown), which distinguishes it from aggregate siblings like get-pull-request-metrics-tool without naming them.
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 gives concrete triggering contexts ('why is #1186 marked poor', 'a low score on a PR they opened') and states explicit exclusions: it does not read CI results and does not run a linter. It does not name a specific sibling tool as the alternative for aggregate or list-level questions, which is the only gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-delivery-bottleneck-toolFind delivery bottleneckARead-onlyIdempotentInspect
Where does a change spend its waiting time — in the backlog, being written, before review, in review, or after merge? Splits the path from "somebody asked for this" to "shipped to production" into six stages — sitting in the backlog, being written on a branch, waiting for a first review, in review, merged and waiting for a deploy, and the deploy itself running — times each one across recently merged pull requests, and names the single slowest stage with the pull requests that prove it and one intervention to try.
Use this to answer "why is our delivery slow" with one stage instead of five dashboards. The interventions differ completely by stage: chasing reviewers does nothing when the wait is after merge.
A stage is only named as the bottleneck when it was measurable on enough of the window's work. A stage that could barely be seen is still reported, with the reason it is ineligible — so missing deployment tracking reads as missing deployment tracking rather than as a fast deploy. Bot pull requests are excluded. Review history is pruned after 90 days, so the window is clamped there.
The backlog stage is measured and reported but never named as the bottleneck: it is the gap before anybody started rather than a change waiting to move, it dwarfs the delivery stages wherever a tracker is connected, and it answers to prioritisation instead. It is timed from the linked Jira or Linear issue.
The two deploy stages are scored only against repositories that have ever recorded a
production deployment, because a package or a docs site never deploys and counting its
merged work as untracked buries the repositories that do. Each stage carries its own
analysed count for that reason; the repositories left out are named in the blind spots.
A stage that is blank because nothing is connected to time it carries an unlock string —
a tracker for the backlog, a named production environment or deploy reporting for the two
deploy stages — with the full ask in its note. Relay that as something to connect and
what it would reveal, never as a stage with no wait in it: the changes did reach
production, and how long that took is the part nothing can see.
| Name | Required | Description | Default |
|---|---|---|---|
| window_days | No | How many days of merged pull requests to time. Defaults to 30, clamped to 1–90 because review history is pruned after 90 days. | |
| repositories | No | Optional "owner/name" repository slugs to scope to. Leave empty for every active repository the team ships to. Scoping to one representative repository makes the result easier to interpret with a team. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| period | Yes | The window actually measured: ISO start, ISO end, and its span in days. |
| stages | Yes | All six stages — waiting_to_start, writing_the_change, waiting_for_review, in_review, waiting_to_deploy, deploy_running — each with median/p75 hours, sample size, the count it was scored against (`analysed`, which for the two deploy stages counts only repositories that deploy), coverage, whether it is eligible to be ranked, whether it competes for the bottleneck at all (`ranked`, false for waiting_to_start), how many changes merged with no review from anyone but their author and so never entered the stage (`skipped`, review stages only — a skipped change did something, it is not missing data), what would have to be connected to see it (`unlock`), and a note saying why it cannot or will not be ranked. |
| headline | Yes | One-line answer to lead with when relaying this result. |
| bottleneck | No | The single slowest eligible stage: median and p75 hours, sample size, coverage, one intervention to try, and the three slowest pull requests as evidence. Null when no stage was measurable on enough of the window — read the stage notes for what is missing. |
| blind_spots | Yes | What these numbers cannot see. Relay these alongside the finding; the failure mode of this diagnostic is a confident reading of a gap in the data. |
| repositories | Yes | Repository slugs included in the result. |
| contributing_factors | Yes | Patterns that make the slowest stage slower — review concentration, oversized changes, current queue pressure, work merging without a recorded review. Reported, never ranked. |
| pull_requests_analysed | Yes | Human-authored pull requests merged in the window. |
| unmatched_repositories | Yes | Requested slugs that did not match an active team repository — either not tracked, or archived. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description discloses extensive behavior: six timed stages, eligibility rules for naming a bottleneck, bot PR exclusion, 90-day review-history clamping, backlog treatment, deploy-stage repository scoping, blind spots, and unlock strings for missing data. These are exactly the operational caveats an agent needs to interpret results correctly.
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 front-loaded with the core question and stage model, and each paragraph addresses a distinct behavioral caveat. It is long and somewhat verbose for a tool definition, but the length is largely justified by the complexity of the analysis and the edge cases being disclosed.
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?
Given the tool's analytical complexity and the presence of an output schema, the description is complete enough for correct invocation and interpretation. It covers what stages exist, how bottlenecks are chosen, what is excluded, how missing data appears, and how to relay unlock guidance.
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 100%, so both window_days and repositories are already documented in the input schema. The description largely reinforces the schema by mentioning the 90-day clamp and the interpretability of scoping to a representative repository, but adds little parameter-level detail beyond what is structured.
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 states a specific analytical purpose: splitting the path from request to production into six stages, timing each across recently merged pull requests, and naming the single slowest stage with supporting PRs and an intervention. It distinguishes itself from dashboard-style alternatives by framing the result as 'one stage instead of five dashboards.'
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 clearly says to use this tool to answer 'why is our delivery slow' and explains that stage-specific interventions differ, which helps an agent understand the intended context. It does not explicitly name sibling alternatives such as get-dora-metrics or get-pull-request-metrics or state when not to use this tool, so it falls short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-agent-activity-toolGet agent activityARead-onlyIdempotentInspect
Get a summary of autonomous agent activity for the authenticated user's team. Returns which agents are enabled, recent actions, per-agent stats, and pending approval counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| posture | Yes | How loudly the agent speaks: off, preview, quiet, public or direct. The single control over whether it acts. |
| agent_summary | Yes | Per-agent statistics. |
| enabled_agents | Yes | List of agent types currently active for the team. |
| recent_actions | Yes | Most recent agent actions (up to 10). |
| pending_approvals | Yes | Count of actions awaiting approval. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so safety and repeatability are covered. The description adds the team-level scope, which is useful, but leaves 'recent actions' undefined — no time window, no pagination or volume limits — and repeats return contents that the output schema already supplies.
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?
Two sentences, zero filler, and the resource plus scope are front-loaded before the return summary. Every clause earns its place.
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 zero-parameter read-only tool with annotations covering the safety profile and a full output schema, the description is nearly sufficient — scope and contents are both stated. The remaining gap is the undefined 'recent' window, which affects how an agent interprets and reports the data.
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?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The stated team scope correctly signals that no user or team identifier needs to be passed.
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?
States a specific verb ('Get') and resource ('autonomous agent activity') plus the scope ('authenticated user's team'), and enumerates what comes back (enabled agents, recent actions, per-agent stats, pending approvals). That enumeration distinguishes it from neighbors like get-person-activity-tool, get-ai-adoption-tool, and get-my-insights-tool, though it never names an alternative explicitly.
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?
There is no statement of when to reach for this tool versus the many overlapping reporting siblings (get-ai-adoption-tool, get-mcp-adoption-tool, get-team-overview-tool, get-my-status-tool). The only guidance is the implicit 'for the authenticated user's team' scoping; no exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-ai-adoption-toolGet AI adoptionARead-onlyIdempotentInspect
How much of this team's shipped work is AI-assisted, and what that work did once it shipped.
Returns adoption rate (share of active contributors using AI), contribution intensity (share of
lines changed), the AI-assisted PR rate, which AI tools were detected, detection confidence, and
a delivery outcome split comparing AI-assisted merged PRs against the rest on lead time and size.
Use it to answer "is AI actually in our SDLC yet" and "is it paying off" with the same call.
Adoption alone is a pilot metric — the outcome split is what turns it into a KPI, and the result
says plainly when the samples are too small to compare or when detection has not covered the
period. Bot and dependabot PRs are excluded from the outcome comparison.
Where a coding agent reported a change (first-party, via report-ai-usage), its report decides
how that PR is counted. The attribution block lists those reports and grades what Coderbuds
inferred from the same diffs against them — the error rate every unreported PR carries.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Reporting period. Defaults to rolling_30d. | rolling_30d |
| repository | No | Optional "owner/name" repository slug used to resolve which of your teams this call is about. It does not filter the metrics — they always cover the whole team. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| tools | Yes | Detected AI tools with counts and shares. |
| period | Yes | Human-readable period label. |
| caveats | Yes | What these numbers do and do not prove. |
| adoption | Yes | Share of active contributors who shipped AI-assisted PRs. |
| headline | Yes | One-line read of adoption, intensity, and the outcome split together. |
| outcomes | Yes | AI-assisted versus other merged PRs on lead time and size, with a comparable flag. |
| detection | Yes | Detection threshold and how much of the period has actually been analysed. |
| intensity | Yes | Share of lines changed that came from AI-assisted PRs. |
| confidence | Yes | Detection confidence distribution across AI-assisted PRs. |
| attribution | Yes | What coding agents reported about their own usage, and how often the inferred detector agreed with them. |
| assisted_pull_requests | Yes | Share of PRs that were AI-assisted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses real behavioral detail: bot and dependabot PRs are excluded from the outcome comparison, first-party reports override inference for the same PRs, the result self-reports when samples are too small or detection hasn't covered the period, and the attribution block grades inferred attribution error rates. That is exactly the caveat context an agent needs before trusting or quoting the numbers.
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?
It front-loads the business question and the returned metrics, then layers caveats in decreasing importance. It is dense but nearly every clause carries information; the attribution paragraph is the longest and slightly buries its point, but is still relevant and not redundant with the schema or annotations.
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?
With an output schema present, the description needn't restate return shapes, and it correctly spends its words on interpretation and caveats instead: sample-size warnings, detection coverage gaps, bot exclusion, and attribution confidence. For a two-optional-parameter read tool with full annotations, nothing material is 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 coverage is 100%, and the schema itself carries the important nuance (the repository slug resolves team scope but does not filter metrics; period enum defaults to rolling_30d). The description adds no period semantics or hints about choosing between rolling vs calendar windows, so it sits at the baseline rather than adding value.
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 names a specific question and then enumerates exactly what the tool returns: adoption rate, contribution intensity, AI-assisted PR rate, detected tools, detection confidence, and an outcome split on lead time and size. This clearly distinguishes it from adjacent siblings such as get-mcp-adoption-tool (MCP-specific) and report-ai-usage-tool (ingestion rather than reporting).
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 gives concrete intent framing — answer "is AI actually in our SDLC yet" and "is it paying off" with one call — and positions the outcome split as the KPI-grade signal versus adoption as a pilot metric. It also flags interaction with report-ai-usage-tool for first-party reports. What it lacks is an explicit exclusion, e.g. when to prefer get-mcp-adoption-tool or the DORA/PR metric tools instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-created-pull-requests-toolGet created pull requestsARead-onlyIdempotentInspect
Count pull requests OPENED over a recent window (default 1 day), broken down per repository and per author, with a human-vs-bot/dependabot split. Use this whenever the question is how many pull requests were created, opened or raised — today, this week, on a repo, or across the team — and especially when someone asks to see it "per repo" or "by repository".
Prefer this over a per-person activity breakdown for any total. It counts from
the team's repositories rather than its member list, so it includes authors who
have no Coderbuds account (reported as authors_without_member and
created_by_non_members) and excludes a member's work in repositories this
team does not ship. A member-first count gets both of those wrong.
The result carries its own denominator: repositories is exactly the list the
numbers came from, so you can answer "which repos is this based on" from the
same call. Slugs that match no team repository come back in
unmatched_repositories instead of quietly counting zero.
Opened is counted by the time the provider recorded the pull request being
opened. That is a different set from merged in the window — use
get-merged-pull-requests for merges, and never present the two as reconciling.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-back window in days, trailing from now. Defaults to 1 — note that is the last 24 hours, not today's calendar day. | |
| include_bots | No | Whether to include bot/dependabot PRs in the totals. Defaults to true; the result always reports the human-vs-bot split regardless. | |
| repositories | No | Optional list of "owner/name" repository slugs to scope to (e.g. ["patchstack/saas"]). A bare repo name like "saas" also matches. Omit to include every repository on the team. |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | Yes | Look-back window used, in days. |
| team | Yes | Team name. |
| since | Yes | ISO-8601 start of the window. |
| until | Yes | ISO-8601 end of the window. |
| authors | Yes | Per-author counts with is_bot and is_member flags. |
| counted_as | Yes | What "created" means in this result, to quote when reporting it. |
| bot_created | Yes | PRs opened by bots (any "[bot]" login). |
| not_captured | Yes | Limits of this result, to repeat when reporting the numbers. |
| repositories | Yes | Repository slugs the numbers came from — the denominator for the whole result. |
| human_created | Yes | PRs opened by humans. |
| total_created | Yes | Total PRs opened in the window (respects include_bots). |
| dependabot_created | Yes | PRs opened by dependabot specifically. |
| authors_without_member | Yes | Human authors with no Coderbuds membership on this team — people a per-person breakdown would have omitted entirely. |
| created_by_non_members | Yes | PRs those non-member humans opened. |
| repositories_breakdown | Yes | Per-repository totals with human/bot split, highest first. |
| unmatched_repositories | Yes | Requested slugs that did not match a team repository. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent, but the description adds real behavioral context: counting is based on team repositories rather than member list, non-member authors surface as separate fields, unmatched slugs land in `unmatched_repositories` instead of silently returning zero, and opened-time is distinct from merge-time.
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?
Front-loaded with the core action and the denominator caveat, and every paragraph carries distinct information. Slightly long — the quoted 'per repo' / 'by repository' phrasing and the 'today, this week, on a repo, or across the team' list are a touch redundant, but nothing is wasted enough to hurt.
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 read-only counting tool with an output schema and full param coverage, the description supplies everything an agent needs: window semantics, inclusion rules for bots, repository scoping behavior, and the mismatch/edge-case handling. No gaps remain that would cause a wrong call.
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 coverage is 100%, so the schema already documents all three parameters including the 24-hour-vs-calendar-day caveat and the bare-name matching rule. The description adds no parameter detail beyond what the schema states, so the baseline 3 applies.
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?
States a specific verb and resource ('Count pull requests OPENED'), plus the scope (recent window, default 1 day) and the breakdowns produced (per repository, per author, human vs bot). It explicitly separates itself from get-merged-pull-requests and from a per-person activity breakdown, so an agent can route without opening the schema.
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?
Gives concrete triggering questions ('how many PRs were created/opened/raised — today, this week, on a repo, across the team') and an explicit preference rule over a sibling: 'Prefer this over a per-person activity breakdown for any total.' It also names the alternative for merges and warns against reconciling the two.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-deployments-by-person-toolGet deployments by personARead-onlyIdempotentInspect
List who triggered production deployments over a recent window (default 7 days) and how many each shipped, with failed deploys surfaced per person — e.g. "Bob Marley: 5 deploys (3 failed)". Use this to answer "who has deployed to production this week and how much". Returns each person's deploy count, failed count, and the repositories they shipped to, sorted by deploy count, plus team totals.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many days back to count production deploys. Defaults to 7 (this week), clamped to 1–90. |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | Yes | Lookback window in days. |
| team | Yes | Team name. |
| since | Yes | ISO-8601 start of the window. |
| people | Yes | Per-person breakdown: deploy_count, failed_count, and repositories, sorted by deploy_count. |
| environment | Yes | Deployment environment counted (production). |
| total_failed | Yes | Total failed production deploys in the window. |
| total_deploys | Yes | Total production deploys across the team in the window. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint and idempotentHint, so the description only needs to add context — and it does: the windowing default, the per-person failure surfacing, the sort order (by deploy count), and the inclusion of team totals. It doesn't mention any rate limits or empty-result behavior, but for a read-only aggregate that's a minor gap.
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?
Front-loaded with the core action and scope, followed by the use case and return contents. The inline example ('Bob Marley: 5 deploys (3 failed)') earns its place by conveying output shape, though the final sentence partially duplicates the output schema.
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 single-optional-parameter read tool with annotations and an output schema, the description covers purpose, usage trigger, and aggregation behavior. The return-value description is somewhat redundant given the output schema exists, and no sibling differentiation is offered, keeping it just shy of full marks.
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?
There is only one parameter and schema description coverage is 100% — the schema already documents 'days', the default of 7, and the 1–90 clamp. The description restates the 7-day default but adds no new semantics. Baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb and resource — listing who triggered production deployments over a window, with failed counts and repos per person — and includes a concrete output example. It's clearly distinguishable by topic from get-dora-metrics-tool or get-person-activity-tool, but it never names those siblings to make the boundary explicit.
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?
Gives an explicit usage trigger: 'Use this to answer "who has deployed to production this week and how much".' That's a clear context for selection, but there are no exclusions or pointers to alternatives (e.g. when to use get-dora-metrics-tool instead of this attribution view).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-dora-metrics-toolGet DORA metricsARead-onlyIdempotentInspect
Get DORA (DevOps Research and Assessment) metrics for the authenticated user's team. Returns deployment frequency, lead time for changes, change failure rate, and mean time to recovery with period-over-period comparison and performance categories (Elite/High/Medium/Low). The comparison fields are null when the team's history doesn't reach back over the previous period; say nothing about change rather than inferring it. Lead time is null when no merged pull request could be matched to a deploy, and recovery time is null when no failure was recovered from; both are then categorised "No Data", not rated. The overall rating averages only the measured metrics and is "No Data" with fewer than three.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Reporting period. Defaults to rolling_30d. | rolling_30d |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| period | Yes | Human-readable period label. |
| metrics | Yes | DORA metrics keyed by metric name. |
| overall_performance | Yes | Overall DORA performance rating (Elite/High/Medium/Low, or No Data when fewer than three metrics were measured). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses the null semantics that would otherwise cause misreads: comparison fields null when history doesn't span the prior period, lead time null with no matched merged PR, recovery time null with no recovery, and the instruction to say nothing rather than infer change. It also explains how the overall rating is computed and its minimum-sample rule (fewer than three measured metrics yields "No Data").
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?
It is front-loaded with the core action and the metric list, then moves to edge-case semantics. Each null-handling sentence carries real weight, though the run of three separate null clauses plus the overall-rating rule makes the back half denser than it needs to be.
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?
With an output schema present and full param coverage, the description correctly focuses on interpretation rather than return shape: metric definitions, null behavior, categorisation labels, and rating aggregation. It does not address whether the team scope is implicit from auth or whether permissions/team membership affect results, a small remaining gap for a team-scoped tool.
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?
The single period parameter has 100% schema description coverage with a six-value enum and a documented default, so the schema already carries the meaning. The description never mentions the period parameter, its options, or how period choice interacts with the previous-period comparison fields, adding nothing on top of the schema; baseline 3 applies.
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 states a specific verb and resource ("Get DORA metrics for the authenticated user's team") and enumerates exactly what the four metrics are: deployment frequency, lead time, change failure rate, and MTTR. It stops short of distinguishing itself from overlapping siblings such as get-team-overview-tool or get-my-insights-tool, so the agent must infer where DORA ends and those begin.
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?
There is no when-to-use, when-not-to-use, or named-alternative guidance. The only scoping signal is "for the authenticated user's team", and nothing tells the agent when to pick this over get-team-overview-tool, get-team-insight-summary-tool, or get-pull-request-metrics-tool, which plausibly surface related delivery data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-guidance-drift-toolGet guidance driftARead-onlyIdempotentInspect
Has this repo's agent guidance file drifted from the repo it describes? A CLAUDE.md or
AGENTS.md that lists the directories under app/Domain (or any other path) is making a
claim that decays silently — the list was right when written, the code kept moving, and
nothing fails when the two diverge. Agents read the stale list as truth, so a rotted
guidance file is worse than none: it teaches the wrong shape of the codebase with full
confidence.
For each connected repository this returns the guidance file found, when it last changed, and every directory whose listing has gone stale — how many entries the file documents, how many are actually there now, and examples of what is missing. Call it before trusting a guidance file, when onboarding an agent onto an unfamiliar repo, or when deciding whether a hand-maintained inventory should be replaced by a get-team-context call.
Only ENUMERATIONS are flagged. A file that mentions a path in passing is referencing it, not claiming an inventory, and is never reported. A directory is flagged only when the file already names several of its children (so it is holding a list) and is missing several more. Repos with no guidance file, BitBucket repos, and unreadable repos report insufficient_data — never a false drift. Archived repositories are skipped. Use get-repo-readiness for whether a guidance file exists at all; this tool judges whether the one that exists is still true.
| Name | Required | Description | Default |
|---|---|---|---|
| repository | No | Optional "owner/name" (or bare repo name) to assess a single repository instead of every repository on the team. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| rollup | Yes | Team rollup: repositories_assessed, repositories_drifted, and undocumented_entries (the total number of directory entries no guidance file mentions). |
| repositories | Yes | Per-repository drift: repository slug, guidance_file (CLAUDE.md/AGENTS.md), last_updated date and days_since_update, status (drifted|current|insufficient_data), drifted_directories (path, documented, present, undocumented, examples), and a recommendation. Most-drifted repositories first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and idempotent, yet the description adds substantial behavior beyond them: only enumerations are flagged, passing mentions are never reported, and no-file/BitBucket/unreadable repos return insufficient_data rather than false drift, with archived repos skipped. These false-positive-avoidance rules are exactly the kind of context annotations cannot express.
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 leading question frames the purpose, then rationale, then guidance, then edge-case rules – front-loaded and logically ordered. Slightly long, but nearly every sentence carries distinct information (the 'worse than none' rationale is the only expendable flourish).
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?
An output schema exists so return detail isn't strictly needed, yet the description still summarizes what's returned (file, last change, stale directories with entry counts and examples). Combined with the edge-case rules, nothing an agent needs to decide whether and how to call it is 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 coverage is 100% and the single optional parameter is documented there, but the description reinforces the default behavior ('For each connected repository') versus the single-repo override, adding context the bare schema doesn't emphasize.
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 opens with a specific question naming the resource (agent guidance file) and the operation (detecting drift). It clearly distinguishes itself from get-repo-readiness and get-team-context by scope, so an agent can tell the tools apart without opening schemas.
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 gives explicit call conditions (before trusting a guidance file, when onboarding an agent, when deciding whether to replace a hand-maintained inventory) and names the alternative get-repo-readiness for the 'does a file exist' question. When-to-use and when-not are both present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-icp-toolGet ideal customer profileARead-onlyIdempotentInspect
Internal Coderbuds staff only. Who Coderbuds sells to and what an opener is allowed to say — the rules behind the Who it is for tab of /admin/prospects, as they stand today.
Call this before writing anything to a prospect, alongside
get-prospect-worklist. The worklist says who to write to; this says what the message
has to be. Rules change as outbound teaches us something, so read them rather than
working from a version you saw in a document — that gap is exactly how outbound came
to be sent on a wedge that had already been measured and dropped.
Seven groups come back: who it is for, what the opener does, what makes a row worth sourcing, what closes a row, what we can say, how it may be sent, and what to do when somebody writes back.
Three things to read carefully:
retiredcarries wedges that were tried and abandoned, each with the reason. Do not re-propose one of these in different words. The reason is the finding.evidence: nullmarks a rule nobody has grounded in anything. Follow it, but weigh it as somebody's opinion rather than a measurement.proposedare suggestions waiting on a person. They are not binding — do not draft against them, and do not propose the same thing twice.
Use propose-icp-rule when outbound teaches you something this list does not say.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and idempotentHint; the description adds substantial context beyond that — that rules are live and supersede any cached/documented version, the seven-group return shape, and how to interpret the `retired`, `evidence: null`, and `proposed` markers. That last point is a real behavioral constraint ('they are not binding — do not draft against them').
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?
Front-loaded with the access restriction and purpose, then the call-to-action, then a bulleted breakdown of the tricky fields. It is on the long side for a zero-argument tool, but nearly every sentence carries operational instruction rather than filler.
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?
There is no output schema, so the description must explain the return value — and it does, enumerating the seven groups and calling out the three semantics that could otherwise be misread. An agent has everything needed to call it and interpret the result.
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?
The tool takes zero parameters, so the baseline of 4 applies and there is no schema gap to compensate for. The description instead spends its words on return semantics, which is a reasonable substitute but not strictly a parameter concern.
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?
States a concrete resource and scope: 'Who Coderbuds sells to and what an opener is allowed to say — the rules behind the Who it is for tab of /admin/prospects.' It is immediately distinguishable from get-prospect-worklist-tool (who to write to) and propose-icp-rule-tool (adding rules), both named directly.
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?
Explicit temporal guidance: 'Call this before writing anything to a prospect, alongside get-prospect-worklist.' It also names the alternative for the out-of-scope case: 'Use propose-icp-rule when outbound teaches you something this list does not say.' Both the when and the when-not are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-mcp-adoption-toolGet MCP adoptionARead-onlyIdempotentInspect
Who on the team is actually using the Coderbuds MCP. Every MCP tool call is recorded per member, so this reports adoption over a recent window (default 30 days): total invocations, per-member usage with last-used time and favourite tool, per-tool call counts, and — the nudge list — login members who have never connected the MCP at all. The denominator is who could plausibly connect one today — a login member (only they can mint API tokens) who is still shipping code. Tracked contributors cannot connect, deactivated or long-inactive members have left, and someone with several linked identities counts once. Use when asked "who is using the MCP", "is the team on the MCP yet", or to find who still needs the setup instructions.
A call is attributed to the team it was about — the repository slug on it, or the
?team= binding on the connection — not to whichever team the web switcher last
landed on, so a member working across several teams shows up under the one they were
working in.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many days back to summarize usage. Defaults to 30, clamped between 1 and 90. | |
| repository | No | Optional "owner/name" slug (from `git remote get-url origin`) of the repository you are working in — binds the session to the owning team when you belong to several. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| totals | Yes | invocations, members_using (distinct people in window), connectable_members (login members still shipping code, one per person — the denominator), tools_used. |
| by_tool | Yes | Per tool: tool, invocations, last_used_at. Sorted by usage. |
| by_member | Yes | Per person: user_id, name, invocations, last_used_at, top_tool. Sorted by usage. |
| lookback_days | Yes | Usage window in days. |
| never_connected_members | Yes | Currently active login members with no MCP call on record ever — who still needs the setup instructions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, yet the description still adds substantial non-obvious behavior: the exact denominator used for the nudge list (login member still shipping code, deduped across linked identities, excluding tracked contributors and inactive members). It also discloses the attribution rule — a call counts for the team named by the repository slug or ?team= binding, not the web switcher's last selection — which is the kind of semantics an agent cannot infer elsewhere.
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 core answer is front-loaded in the first sentence and the rest is dense, information-bearing prose with no filler. It runs long, and the attribution paragraph sits somewhat apart from the main payload, costing it a point on economy.
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?
With an output schema present, the description need not spell out return shapes, and it still enumerates the report's sections plus the definitional subtleties (nudge-list denominator, team attribution) that determine whether the agent interprets the numbers correctly. Nothing needed to call or trust the result is 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 100%, so the baseline is 3 and the schema already carries the days default, clamp, and repository slug format. The description goes beyond that by explaining what repository actually does to attribution when a member belongs to several teams, adding real meaning rather than restating the schema.
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?
States a specific verb and resource: reports Coderbuds MCP adoption per member over a window, with named sub-outputs (total invocations, per-member usage, per-tool counts, nudge list). An agent knows exactly what question this answers. It does not explicitly separate itself from the nearby get-ai-adoption-tool or get-agent-activity-tool, so it stops short of a 5.
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?
Gives concrete triggering questions ("who is using the MCP", "is the team on the MCP yet") and a second use case (finding who needs setup instructions). That is clear context for when to reach for it. It names no exclusions and no sibling alternatives, which is exactly the gap that keeps it at 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-merged-pull-requests-toolGet merged pull requestsARead-onlyIdempotentInspect
Count merged pull requests over a recent window (default 30 days), with a human-vs-bot split so you can answer "including dependabot" and "excluding dependabot" from the same result. Returns the total plus per-repository and per-author breakdowns. Optionally scope to specific "owner/name" repositories (e.g. patchstack/saas). Use this when the user asks how many PRs were merged, shipped, or closed on a repo or across the team — including bot/dependabot PRs.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-back window in days. Defaults to 30. | |
| include_bots | No | Whether to include bot/dependabot PRs in the totals. Defaults to true; the result always reports the human-vs-bot split regardless. | |
| repositories | No | Optional list of "owner/name" repository slugs to scope to (e.g. ["patchstack/saas"]). A bare repo name like "saas" also matches. Omit to include every repository on the team. |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | Yes | Look-back window used, in days. |
| team | Yes | Team name. |
| since | Yes | ISO-8601 start of the window. |
| until | Yes | ISO-8601 end of the window. |
| authors | Yes | Per-author merged counts with an is_bot flag. |
| bot_merged | Yes | Merged PRs authored by bots (any "[bot]" login). |
| human_merged | Yes | Merged PRs authored by humans. |
| repositories | Yes | Repository slugs included in the result. |
| total_merged | Yes | Total merged PRs in the window (respects include_bots). |
| dependabot_merged | Yes | Merged PRs authored by dependabot specifically. |
| repositories_breakdown | Yes | Per-repository totals with human/bot split. |
| unmatched_repositories | Yes | Requested slugs that did not match a team repository. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent, so the safety profile is covered; the description adds real behavioral context by disclosing the return shape (total plus per-repository and per-author breakdowns) and the key nuance that the human-vs-bot split is always reported regardless of include_bots. It does not mention pagination or limits, but for an aggregate count that is a minor gap.
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?
Front-loaded with the core action and window, then the return shape, then the trigger sentence. Four sentences with little waste, though the bot/dependabot point is stated twice (in the split explanation and again at the end).
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 low-complexity, zero-required-parameter read tool with an output schema and safe annotations, the description covers what to call it for, the defaults, and the shape of results. The main missing piece is which sibling to choose for adjacent PR questions, which is left implicit.
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 coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by explaining that the bot split lets you answer both 'including' and 'excluding dependabot' from a single call, and by restating the owner/name scoping with a concrete example. It does not clarify day-range bounds or caps on the repositories list.
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?
States a specific verb and resource with scope: 'Count merged pull requests over a recent window (default 30 days)'. The 'merged' qualifier inherently separates it from siblings like get-created-pull-requests-tool and get-open-pull-requests-tool, though it never names them. Slight ambiguity from lumping 'merged, shipped, or closed' together, which are not strictly the same event.
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?
Gives a clear trigger condition: 'Use this when the user asks how many PRs were merged, shipped, or closed on a repo or across the team — including bot/dependabot PRs.' No explicit exclusions or named alternatives (e.g. get-pull-request-metrics-tool, get-open-pull-requests-tool) are offered for adjacent questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-my-insights-toolGet my insightsBRead-onlyIdempotentInspect
Get active insights for the authenticated user across all their teams. Optionally filter by tab (activity, performance, collaboration, satisfaction) or only show unseen insights.
| Name | Required | Description | Default |
|---|---|---|---|
| tab | No | Filter insights by tab category. | |
| limit | No | Maximum number of insights to return (1-25). | |
| unseen_only | No | Only return insights the user has not yet seen. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so safety is covered elsewhere. The description does add one real behavioral fact — only 'active' insights are returned and results span all teams — but says nothing about ordering, whether dismissed items are excluded by definition, or what happens when limit is exceeded.
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?
Two front-loaded sentences with the scope stated first and the optional filters second. Slightly redundant with the schema's parameter descriptions, but nothing wasteful.
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?
No output schema exists, and the description never characterizes what an 'insight' contains, so an agent cannot anticipate the return shape. With zero required parameters, 100% schema coverage, and safety covered by annotations, the remaining gap is moderate but real.
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 100%, so the tab enum, the limit range, and unseen_only are all fully documented in the schema. The description merely restates the filter options without adding format, default, or interaction details, which is the correct baseline-3 case.
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?
States a specific verb and resource ('get active insights') plus the scope: the authenticated user's insights across all their teams. That scope does implicitly separate it from get-team-insight-summary-tool, but the sibling is never named, so differentiation is inferred rather than explicit.
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 optional tab filter and unseen_only flag hint at usage patterns, but there is no statement of when to choose this over get-team-insight-summary-tool or get-my-status-tool, and no exclusions. Usage is implied by the description rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-my-status-toolGet my statusARead-onlyIdempotentInspect
Your personal cross-repo status: your open PRs and what blocks each (awaiting review,
changes requested, failing checks, draft, or ready to merge), reviews you could unblock
(other people's oldest PRs waiting on a reviewer, bots excluded), your merged-but-undeployed
work with hours waiting, and what you shipped recently — standup prep and morning brief
in one call. Lead with the headline when relaying this result.
| Name | Required | Description | Default |
|---|---|---|---|
| repository | No | Optional "owner/name" slug (from `git remote get-url origin`) or bare repo name of the repository you are working in — binds the session to the owning team when you belong to several. | |
| window_days | No | How many days back to look for your recently merged PRs (default 2 — since the last standup). Clamped to 1-30. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| user | Yes | The user this status belongs to. |
| headline | Yes | One-line personal summary to lead with when relaying this result. |
| my_open_prs | Yes | Your open PRs, oldest first: repository, number, title, url, blocker (awaiting_review, changes_requested, failing_checks, draft, or ready_to_merge), days_open. |
| window_days | Yes | Recently-merged lookback window in days. |
| my_undeployed | Yes | Your merged PRs not yet shipped to production, longest-waiting first: repository, number, title, merged_at, hours_waiting. |
| recently_merged | Yes | Your PRs merged within the window, newest first: repository, number, title, merged_at — the "what did I do" standup line. |
| reviews_to_give | Yes | Other people's open PRs waiting on a reviewer, oldest first (capped at 5, bots excluded): repository, number, title, url, author, days_open — the queue you can unblock. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so safety is covered; the description adds real substance beyond that — bots are excluded from reviewer suggestions, merged work carries 'hours waiting', blockers are categorized into five named states. It also gives an output-consumption instruction ('lead with the `headline`'), which no structured field conveys.
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?
Two sentences, front-loaded with what the agent gets, then a compact rendering instruction. Despite being dense with enumerated content, every clause maps to a distinct capability (blockers, reviewer queue, undeployed work, recent ships) rather than restating the name.
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?
An output schema exists, so return values need not be explained, and the description goes further by telling the agent how to relay the result. Scope, bot exclusion, and the four data sections are all covered; only the session-binding behavior when `repository` is omitted is left entirely to the schema.
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 coverage is 100% and both parameters are described in detail in the schema (owner/name slug semantics, default 2 days, clamped to 1-30). The description adds nothing about either parameter, so the baseline 3 applies — the schema is doing all the work here.
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?
States a specific verb+resource — a personal, cross-repo status rollup — and enumerates exactly what it bundles: your open PRs with blocker reasons, unblockable reviews, merged-but-undeployed work, and recent shipments. That composition makes it clearly distinct from point tools like get-open-pull-requests-tool or get-merged-pull-requests-tool, though it never names a sibling to sharpen the boundary.
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 phrase 'standup prep and morning brief in one call' gives a concrete usage context that tells the agent when this aggregate is the right entry point. However, it offers no exclusions or routing advice — an agent drilling into one PR or one repo isn't told to prefer get-open-pull-requests-tool or get-peull-request-metrics-tool instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-open-pull-requests-toolGet open pull requestsARead-onlyIdempotentInspect
List the team's open pull requests grouped by author, with the signal that shows
what is blocking each one: whether it is awaiting a reviewer, has changes requested,
is approved and ready to merge, is still a draft, is failing CI checks, or is simply
too large for anyone to review. Optionally scope to specific "owner/name" repositories
(e.g. patchstack/hub). Use this to nudge people to merge — lead with the headline.
Human authors include their oldest open PRs with age; bot authors (dependabot etc.)
are collapsed into count-only summaries so a dependency backlog cannot drown out the
PRs a person should act on.
total_oversized and the per-PR oversized flag mark pull requests past the hard
review limits — over 100 files, over 5,000 added or deleted lines, or over 8,000
changed in total. These are the ones a reviewer cannot pick up at all, so they are
named in the headline and sorted to the front of their author's list. Report them as
blocked on being split, not as blocked on a reviewer. The threshold is deliberately
the hard limit rather than the team's line target: an open PR gives no file list, so
the test/docs discount assess-change-fit applies to a numstat cannot be applied
here, and judging against the target would flag changes that check would have passed.
size.category is unknown when the counts were never recorded — that is missing
data, not a small pull request; do not describe it as small.
Set include_bot_details when you are working the dependency queue itself — merging
dependabot PRs, chasing failing bumps — and each bot author gains the PR numbers,
repositories, titles and URLs you need to act, ordered by what can be closed out
first: ready to merge, then failing checks, then oldest.
Check status_freshness before quoting counts: it flags open PRs whose local status
may be stale, and repositories that have not synced pull requests recently — whose
PRs may be missing from these counts altogether. Archived (decommissioned) repositories are excluded — this is a review
queue, and their PRs are nobody's to review.
| Name | Required | Description | Default |
|---|---|---|---|
| repositories | No | Optional list of "owner/name" repository slugs to scope to (e.g. ["patchstack/hub", "patchstack/saas"]). Omit to include every active repository on the team. | |
| include_bot_details | No | Include the individual PRs for bot authors (dependabot etc.) instead of counts alone — numbers, repositories, titles and URLs, ordered ready-to-merge first, then failing checks, then oldest. Set this when you are working the dependency queue itself; leave it off when summarising a review queue for people. |
Output Schema
| Name | Required | Description |
|---|---|---|
| bots | Yes | Per bot author: total, awaiting_review, ready_to_merge, failing_checks — plus pull_requests (capped, actionable first) and more_not_shown when include_bot_details was set. |
| team | Yes | Team name. |
| authors | Yes | Per human author: totals plus awaiting_review, changes_requested, ready_to_merge, draft, failing_checks, oversized, their open PRs (capped, oversized first then oldest, each with opened_at/days_open, an oversized flag and a size block of additions/deletions/changed_files/category), and more_not_shown. |
| bot_open | Yes | Open PRs authored by bots (dependabot etc.). |
| headline | Yes | One-line human/bot summary to lead with when relaying this result. |
| human_open | Yes | Open PRs authored by people. |
| total_open | Yes | Total open PRs across the included repositories, bots included. |
| repositories | Yes | Repository slugs included in the result. |
| total_oversized | Yes | Human-authored open PRs past the hard review limits (over 100 files, over 5,000 added or deleted lines, or over 8,000 changed). Blocked on being split, not on a reviewer. |
| status_freshness | Yes | How wrong these counts could be, in both directions. possibly_stale counts open PRs with no status sync or activity in over 30 days (some may already be closed, so counts are an upper bound); repositories_awaiting_sync names active repositories whose PRs have not synced in that time (PRs there may be missing, so counts are a lower bound). note spells out whichever applies, and is null only when neither does. |
| total_awaiting_review | Yes | Total open PRs blocking on a reviewer, bots included. |
| unmatched_repositories | Yes | Requested slugs that did not match an active team repository — either not tracked, or archived. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds substantial behavioral context beyond annotations: grouping by author, bot authors collapsed by default, oversized PR thresholds and handling, status_freshness caveats, and exclusion of archived repositories. This is exactly the kind of operational detail an agent needs to interpret results correctly.
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 long but front-loaded: it begins with the core purpose and blocking signals before expanding into oversized PRs, bot handling, and freshness. Some sentences are dense and could be tightened, but every section contributes useful behavioral context. The structure supports scanning, though it is more verbose than strictly necessary.
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?
The tool is complex (author grouping, blocking signals, bot collapsing, oversized flags, freshness, archived exclusion), and the description covers all of these behavioral nuances. An output schema exists so return values need not be explained. With annotations covering safety and schema covering parameters, the description completes the picture for correct interpretation.
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 100%, so the schema already fully documents both parameters, including detailed guidance for include_bot_details. The description repeats the same information about repositories scoping and include_bot_details without adding meaning beyond the schema (e.g., the ordering for bot details is already in the schema). Baseline 3 is appropriate when the schema does the heavy lifting.
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 states a specific verb and resource: 'List the team's open pull requests grouped by author' with blocking signals. It scopes to open PRs and explains the grouping, which distinguishes it from broad pull-request listing tools. However, it does not explicitly name sibling tools like get-merged-pull-requests-tool as alternatives, so it falls short of the highest clarity.
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 gives clear usage context: 'Use this to nudge people to merge — lead with the headline' and tells when to set include_bot_details (dependency queue) versus leaving it off (summarising for people). It also advises checking status_freshness before quoting counts. It lacks explicit when-not-to-use rules or named alternatives, but the guidance is sufficient for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-person-activity-toolGet person activityARead-onlyIdempotentInspect
What one person on the team has actually been doing, over a recent window (default 8 weeks). Answers "is Dave still shipping?" or "what has Sam been working on?" with three counts read together rather than one in isolation: pull requests opened and merged, reviews given to other people, and production deploys triggered — plus a week-by-week rollup, the busiest days, and the longest quiet run.
Lead with the headline. A pull request count on its own supports the wrong
conclusion: someone who opened 5 pull requests and gave 70 reviews is carrying the
team's review load, not coasting. The headline says which of those it is.
Identify the person by name or provider login ("dave", "Dave Smith", "@dsmith").
When the reference is ambiguous or unknown the tool returns the team's member names
in candidates instead of guessing — ask which one rather than reporting activity
for the wrong person.
not_captured lists what this data cannot see (commits, review comment volume,
ticket assignment, anything outside git). Repeat those limits when the answer is
"this person looks quiet" — never present an absence of pull requests as an absence
of work.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many days back to summarize. Defaults to 56 (8 weeks), clamped to 7–84. The 84-day ceiling is where review history stops being complete. | |
| person | Yes | Who to look up, by name or provider login — "dave", "Dave Smith" or "@dsmith". Ambiguous references return candidates rather than a guess. | |
| repository | No | Optional "owner/name" slug (from `git remote get-url origin`) of the repository you are working in — binds the session to the owning team when you belong to several. |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | Yes | Window length in days. |
| person | Yes | Resolved person name. |
| totals | Yes | pull_requests_opened, pull_requests_merged, reviews_given, deploys, active_days. |
| weekly | Yes | Per-week rollup: week_starting, pull_requests_opened, reviews_given, deploys. |
| end_date | Yes | Last day of the window (YYYY-MM-DD, UTC). |
| headline | Yes | The sentence to lead with — the three counts and what they mean read together. |
| start_date | Yes | First day of the window (YYYY-MM-DD, UTC). |
| busiest_days | Yes | Up to five highest-activity days with their per-row counts. |
| not_captured | Yes | What this data cannot see. Repeat these limits when reporting that someone looks quiet. |
| identities_collapsed | Yes | How many linked provider identities were merged into this person. |
| longest_quiet_run_days | Yes | Longest unbroken run of days with no recorded activity. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover read-only and idempotent; the description goes well beyond by disclosing the ambiguity contract (returns `candidates` instead of guessing, and the agent should ask which person), the `not_captured` blind-spot list, and an instruction to repeat those limits when reporting someone as quiet. That is exactly the operational context an agent needs to avoid a wrong answer.
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?
Front-loaded with the purpose and the question it answers, then layered with interpretation and caveats; each paragraph carries distinct value. It is on the long side and repeats the ambiguity handling already stated in the `person` schema, which keeps it from a 5.
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?
An output schema exists, so return-shape explanation is not required, yet the description usefully tells the agent which field to lead with (`headline`) and what `candidates` and `not_captured` mean in practice. Combined with annotations, there is nothing an agent needs in order to call and correctly present this tool that is 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 100%, so the schema already explains `days` (default 56, clamped 7–84), `person` formats and the optional `repository` slug. The description restates the name/login formats and the ambiguity-to-candidates behavior, which duplicates the schema rather than extending it. Baseline 3 applies.
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?
States a specific verb and resource — what one person has been doing in a recent window — and enumerates exactly what is returned: PRs opened/merged, reviews given, deploys triggered, plus weekly rollup, busiest days and longest quiet run. The line 'three counts read together rather than one in isolation' distinguishes it from the single-metric siblings like get-created-pull-requests-tool and get-deployments-by-person-tool without needing to open either schema.
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?
Gives concrete triggering questions ('is Dave still shipping?', 'what has Sam been working on?') and explicit interpretation guidance — lead with `headline`, don't read a PR count alone. It stops short of naming sibling tools as alternatives, so the routing against get-agent-activity-tool or get-my-insights-tool is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-prospect-worklist-toolGet prospect worklistARead-onlyIdempotentInspect
Internal Coderbuds staff only. What to do next about the companies and advisers Coderbuds is approaching — the outbound pipeline behind /admin/prospects.
Five lists, in the order they should be worked:
answered — questions you parked that a person has since answered. Work these first: each one carries
needs_action_reason(what was asked) andanswer(what you were told). Do what the answer says, then clear the pair withupdate-prospectandanswer: null, or the row comes back next run.needs_you — rows parked with a question and still waiting on somebody, oldest first. Do not re-ask a question that is already sitting here.
replied — somebody answered and has not been answered back.
gone_quiet — written to, no reply, past the quiet threshold. Check
times_contactedbefore drafting: one follow-up on a different angle is the rule, so a row already atmax_touchesis a row to close, not to write to again.never_contacted — researched and untouched, priority first.
Start every session working this pipeline by calling this. It is the only way to know what is already in flight; without it the obvious move is to write to somebody who was written to on Tuesday.
gate is the one number that can say stop. The first run of outbound is a test:
at eight prospects written to, two replies means the pitch works and the list can
widen, and fewer means the pitch is wrong rather than the volume. When the verdict is
fail, say so and stop drafting — the next move is a different message, not thirty
more of the same one.
stage_tests is the definition of done for each stage. Do not move a row to a
stage whose test it does not pass.
Read the caveats it returns. Nothing in this list is a qualified lead: each row exists because a dated public signal made it worth a look, and a contact name was read off a profile on that date.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many rows per list. Defaults to 10, capped at 50 — this is a worklist for one session, not an export. | |
| quiet_days | No | How many days of silence after a send before a prospect counts as gone quiet. Defaults to 5. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, but the description adds substantial operational context: internal staff restriction, list semantics, needs_action_reason and answer fields, gate verdict behavior, stage_tests as definition of done, and caveats about lead qualification. No contradiction with annotations.
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 long but organized with front-loaded purpose, bulleted lists, and clearly separated guidance sections. Every section carries useful context, though it could be tightened in places without losing meaning.
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?
With no output schema, the description still fully explains the shape of the response (five lists), key fields to inspect, gate and stage_tests semantics, and caveats. An agent has enough information to call and interpret the tool correctly.
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 coverage is 100% for the two parameters, and the schema descriptions already explain limit capping and quiet_days. The description adds no additional parameter semantics, so the baseline of 3 is appropriate.
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 states exactly what the tool returns: the outbound prospect pipeline worklist behind /admin/prospects, broken into five ordered lists. It distinguishes this read/list operation from sibling mutation tools like update-prospect and record-prospect-outreach.
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 explicitly says to call this at the start of every outbound session, gives the order in which to work the five lists, specifies when not to re-ask a question, and explains the gate stop condition. Alternatives and follow-up actions are named directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-pull-request-metrics-toolGet pull request metricsARead-onlyIdempotentInspect
Get pull request activity metrics for the authenticated user's team. Returns PR count, code review count, average quality score, active contributors, and PR size distribution with period-over-period comparison.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Reporting period. Defaults to rolling_30d. | rolling_30d |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| period | Yes | Human-readable period label. |
| quality | Yes | Code quality score metrics with deltas. |
| activity | Yes | PR and review activity metrics with deltas. |
| size_distribution | Yes | PR size distribution counts (Tiny, Small, Medium, etc.). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so safety is covered; the description still adds value by disclosing the return contents and, importantly, that results include period-over-period comparison — a behavioral trait not visible in the annotations or schema. It stops short of noting cost, latency, or empty-data behavior for a team with no PRs.
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?
Two sentences, front-loaded with the verb and scope, followed by an efficient enumeration of returned metrics. Slightly redundant to re-list return values when an output schema exists, but the listing is compact and no sentence is filler.
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?
Since an output schema exists, the return-value enumeration is arguably unnecessary, and what is genuinely missing is routing context: which of the many similarly named PR/metric siblings this replaces and what 'team' means for the authenticated user. Adequate to call correctly, but thin for a tool in a dense sibling cluster.
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 100% and the single 'period' enum already documents all six values and the default, so the description is not required to compensate. The phrase 'period-over-period comparison' hints at how the period argument drives output, but adds no syntax or formatting detail beyond the schema.
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?
States a specific verb + resource ('Get pull request activity metrics') and scopes it to the authenticated user's team, then enumerates the aggregates returned. This separates it from the per-PR list siblings (get-merged-pull-requests-tool, get-open-pull-requests-tool) at least implicitly, but it never explicitly contrasts with metric siblings like get-dora-metrics-tool or get-my-insights-tool.
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 aggregate-metrics framing implies when to use it (team-level rollup rather than per-PR listing), but there is no explicit 'use this when X, use get-dora-metrics-tool when Y' guidance despite a crowded metric-tool sibling set. Nothing is stated about prerequisites or when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-repo-readiness-toolGet repository readinessARead-onlyIdempotentInspect
Is this repo ready for agents? Coderbuds Standards opinion #3 judges the repository a coding agent is dropped into — not the change it makes. For each connected repository it returns pass / fail / insufficient_data on: deploy automation configured, deployed recently, PR size discipline (share of merged PRs inside the Coderbuds line standard), review coverage, agent guidance present (CLAUDE.md / AGENTS.md), CI config present, a tests directory present, and whether the fit check is actually wired in. Each failing check comes with a plain-language gap and recommendation, plus a team rollup of how many repos are ready and the most common gaps.
Insufficient-data checks are always EXCLUDED, never counted against a repo — a repo is
only "not ready" when a check genuinely fails. When the team has opted out of Coderbuds
Standards the opinionated checks report insufficient_data. BitBucket repos report the
content checks as insufficient_data (the API path is GitHub-only). Archived repositories
are skipped, and dormant ones (nothing merged in the window, flagged dormant) never
fail the wiring/deploy-recency checks and are excluded from the rollup's top_gaps — the
headline reflects the repos actually shipping. Call this to find what is holding a repo
back before pointing an agent at it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| rollup | Yes | Team rollup: repositories_assessed, repositories_ready, dormant_repositories, and top_gaps (the checks failing across the most ACTIVE repositories — dormant repos are excluded so idle test repos cannot bury the gaps that matter). |
| window_days | Yes | Look-back window (days) for the deploy and PR checks. |
| repositories | Yes | Per-repository readiness: repository slug, provider, ready flag, dormant flag (nothing merged in the window), each check as pass|fail|insufficient_data, and ranked gaps with recommendations. Active not-ready repos are listed first; archived repos are omitted. |
| standards_enabled | Yes | Whether Coderbuds Standards is on for this team; when off, the opinionated checks report insufficient_data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond readOnly/idempotent annotations by disclosing nuanced behavior: insufficient-data checks are excluded and never counted against a repo, Coderbuds opt-out behavior, BitBucket's GitHub-only API limitation, archived repository skipping, and dormant repository handling. These are material behavioral traits an agent could not infer from annotations or schema.
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 long and dense, but it is front-loaded with the core question and structured around specific checks, edge cases, and exclusions. Most sentences earn their place, though the length could be trimmed slightly without losing essential meaning.
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?
Given a complex readiness evaluation with an output schema present, the description covers what is evaluated, how pass/fail/insufficient_data are treated, edge cases like opt-out, BitBucket, archived/dormant repos, and the team rollup. It is complete enough for correct invocation and interpretation.
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?
With zero parameters and 100% schema description coverage, there are no parameter semantics to clarify. The baseline for zero-parameter tools is 4, and nothing in the description suggests otherwise.
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?
States a specific verb and resource: judging repository readiness, not the change itself. It explicitly distinguishes itself from a sibling concept by saying it judges the repository 'a coding agent is dropped into — not the change it makes,' which helps differentiate it from assess-change-fit-tool.
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?
Directly advises when to call it: 'Call this to find what is holding a repo back before pointing an agent at it.' The framing around repository readiness versus change fit gives clear usage context without needing to infer alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-self-review-findings-toolGet self-review findingsARead-onlyInspect
Internal Coderbuds staff only. Read Coderbuds' self-review findings: places where something Coderbuds tells customers (a PR comment line, an AI-detection verdict, a score) is contradicted by data Coderbuds already holds. They are raised by nightly checks and a weekly critic, and a person decides which are worth fixing on /admin/self-review.
Default is accepted — the findings a person has approved for fixing. Each carries a
ready-made prompt with the evidence, the files to start from, and the definition of
done. Work one at a time: fix it in this repository, open a PR, then call
record-self-review-fix. Do not start on a proposed finding; nobody has agreed it
is real yet.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | proposed, accepted (default), dismissed or resolved. | |
| finding_id | No | Read one finding, whatever its status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, while the description adds substantial operational context: internal staff only, findings are raised by nightly checks and a weekly critic, a person decides which are worth fixing, and each finding carries a ready-made prompt with evidence and definition of done. This is rich behavioral disclosure beyond annotations and does not contradict them.
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 front-loaded with the key constraint ('Internal Coderbuds staff only') and purpose, then proceeds through default behavior and workflow. It is somewhat long but every paragraph carries useful selection or invocation guidance, with little filler.
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 read-only tool with two optional parameters and no output schema, the description covers the important missing context: who can call it, what findings represent, what each result contains, the default status, and the follow-up workflow. An agent has enough information to call it correctly and avoid the main misuse case.
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 already 100%, so the baseline is 3, but the description adds meaningful context for status: accepted is the default and represents findings a person approved for fixing, while proposed findings should not be started because they are not yet agreed to be real. It does not add much for finding_id beyond the schema's 'Read one finding, whatever its status.'
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 uses a specific verb and resource ('Read Coderbuds' self-review findings') and defines exactly what a finding is: a customer-facing statement contradicted by data Coderbuds already holds. It also distinguishes this read tool from the follow-up action tool, record-self-review-fix.
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 gives explicit workflow guidance: default status is accepted, work one finding at a time, fix it in this repository, open a PR, then call record-self-review-fix. It also includes a clear prohibition: do not start on a proposed finding because nobody has agreed it is real yet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-signup-funnel-toolGet signup funnelARead-onlyIdempotentInspect
Internal Coderbuds staff only. The whole signup and conversion funnel across every account, matching the /admin/activity/conversion dashboard.
Two funnels joined at "an account exists":
Front door — visitors sent to GitHub or BitBucket to authorize, how many came back, how many became an account, and how many were lost on the provider's own authorize screen. Broken down by provider and by campaign source. This is the only stage the account funnel structurally cannot see.
Activation — for accounts created in the window: what share reached each milestone (repository, GitHub App, first PR, first review, deploy tracking, deploy observed, Slack, MCP, paid) and the median days to get there; where open trials are stuck, counted by next step; the trial-state split; trials lapsing within a week; and per-account journeys with owner, milestone dates, next step and trial state.
Use it to ask why signups stall, which step loses the most people, whether a change to onboarding moved anything, or who is worth an email this week. Read the caveats it returns: rates over a tiny sample are flagged unreliable, three milestones are reported without a median because nothing records when they happened, and the per-account list is capped while every rate beside it is over the whole cohort.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How far back the cohort reaches. 0 means every account since launch. Defaults to 365 — shorter windows are two or three signups and every rate reads 0%, 50% or 100%. | |
| journey_limit | No | How many individual account journeys to list, newest first. Defaults to 50, capped at 200, and 0 omits the list entirely. Bounds only that list: every rate, blocker and median is over the whole cohort regardless. |
Output Schema
| Name | Required | Description |
|---|---|---|
| window | Yes | The window in words. |
| front_door | Yes | Provider authorize step: attempts (sent to the provider), returned, registered (became an account), authenticated (came back as an existing user), abandoned (never returned — the authorize screen was declined or closed), failed; return_rate and new_account_rate; rates_are_reliable, false when there are too few attempts to divide by; by_provider; by_source with campaign source, direct traffic named. |
| window_days | Yes | The window applied, in days. 0 means since launch. |
| signup_conversion | Yes | Activation funnel: cohort_size and cohort_definition; stages, each with count, rate, not_reached and median_days (null where nothing records when the milestone happened — deploy tracking, GitHub App, Slack); blockers, open accounts grouped by next step and split on-trial versus trial-expired; trial_states; expiring_soon, trials lapsing within a week, soonest first; recent_teams, per-account journeys with owner, milestone timestamps, next step, trial state and where an owner went if they now work in another team. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, yet the description still adds substantial context beyond them: unreliable rates over tiny samples are flagged, three milestones lack medians because nothing records their timing, and the per-account list is capped while rates cover the whole cohort. It also ties results to a specific dashboard for verification.
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?
Access restriction and the one-line summary are front-loaded, then two labeled bullets organize the funnel stages, and caveats close it. It is long, and the closing caveat paragraph restates some of what the journey_limit schema already says, but the density is warranted by a two-funnel, multi-metric tool.
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?
An output schema exists, yet the description still tells the agent what categories of results to expect (milestone shares, medians, blockers, trial splits, per-account journeys) and how to read them. For a complex analytics tool this leaves nothing an agent needs 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 coverage is 100% and both parameters are well documented there, so the baseline is 3. The description still adds rationale — why 365 is the default (shorter windows yield only two or three signups and degenerate rates) and that journey_limit bounds only the list, not the rates — which strengthens the choice of values.
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?
States a specific verb and resource (get the signup and conversion funnel) and enumerates the two funnel stages, front door and activation, with the exact metrics each covers. No sibling tool covers signup/conversion funnel data, and the description makes that scope boundary unambiguous.
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?
Gives concrete question-shaped guidance ('why signups stall', 'which step loses the most people', 'whether a change to onboarding moved anything', 'who is worth an email this week') and an explicit audience restriction ('Internal Coderbuds staff only'). It never names an alternative tool for narrower questions, but no sibling overlaps this scope, so the omission costs little.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-team-context-toolGet team contextARead-onlyIdempotentInspect
The team's org map: every repository the team ships to, how alive each one is (merged/open
PR activity, top contributors, last merge), how each deploys to production, whether each is
ready for a coding agent (a compact readiness flag with failing check keys — call
get-repo-readiness for the full checks and recommendations), how repos relate (taught
links plus shared-contributor signals), and the team's confirmed working conventions.
Everything is derived from live shipping data, so it never goes stale like a hand-maintained
repo list in an agent rules file.
Pass repository (the repo you are working in) to get a FOCUSED map: that repository's
details, the repositories most relevant to it with the reasons they matter, and the rest as
names only — the right call at session start in a multi-repo org, instead of pulling the
whole atlas. When the map is wrong or incomplete, teach it with link-repositories.
For size/review norms, use assess-change-fit.
| Name | Required | Description | Default |
|---|---|---|---|
| repository | No | The repository you are working in, as owner/name (from `git remote get-url origin`) or a bare repo name. Binds the session to the owning team AND focuses the map: you get this repo, the repos most relevant to it (with reasons), and the rest as names only. | |
| window_days | No | Activity window in days for PR/contributor signals. Defaults to 90, clamped to 7–180. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| focus | No | Present in focused mode: the repository the map is scoped to. |
| links | Yes | Taught repository relationships (from, to, relation, note) — recorded via link-repositories. |
| conventions | Yes | Confirmed team/repo working conventions the team has taught its Coderbuds agents. Focused mode returns only team-wide and focus-repo conventions. |
| window_days | Yes | Activity window in days. |
| repositories | Yes | Active repositories with activity level, top contributors, production deploy setup, and a compact agent-readiness verdict (ready flag + failing check keys; use get-repo-readiness for detail). Full map: most active first. Focused map: the focus repository first, then the most relevant repositories, each with `relevance.reasons`. |
| relationships | Yes | Repository pairs the same people ship to, with shared-contributor counts and co_changes (how often one author merged into both within 48h — "ships together in practice", which ranks a pair higher). Pairs taught as unrelated are suppressed. |
| other_repositories | No | Present in focused mode: the remaining active repositories, names only. |
| archived_repositories | Yes | Decommissioned repositories, by name — they exist but no work should land there. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only/idempotent, but the description adds that all data is derived from live shipping data and therefore self-refreshing — a meaningful behavioral trait. It also discloses the response-shape change caused by passing `repository` (focused map with names-only for the rest). It does not discuss data latency window or volume limits beyond the schema's window_days.
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?
Front-loaded: the first sentence defines the payload before any usage advice. Two tight paragraphs, though the "never goes stale like a hand-maintained repo list in an agent rules file" clause is rhetorical padding that could be cut without loss.
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?
With an output schema present and annotations declaring read-only, the description only needs to cover scope, when to call it, and routing to siblings — all of which it does. Nothing an agent needs to call this correctly at session start is 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 coverage is 100%, so baseline is 3; the description earns above baseline by framing `repository` as binding the session to the owning team and explaining the focused-vs-full output consequence, which is the real decision behind the parameter. `window_days` is left entirely to the schema, so it does not fully cover both 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 names the resource precisely (the team's org map) and enumerates what it contains: repositories shipped to, activity/contributor signals, deploy path, readiness flag, repo relationships, and confirmed conventions. It separates itself from siblings by naming get-repo-readiness, link-repositories, and assess-change-fit with their distinct purposes.
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 gives an explicit when-to-use scenario ("the right call at session start in a multi-repo org") and names the alternative behavior (pulling the whole atlas). It routes the agent away to link-repositories for corrections and assess-change-fit for size/review norms, and to get-repo-readiness for detail beyond the compact flag.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-team-insight-summary-toolGet team insight summaryARead-onlyIdempotentInspect
Get an aggregate summary of active insights for the authenticated user's team, including counts per tab, unseen count, and personal insight count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered and the description doesn't need to repeat it. The description does add useful content beyond that, spelling out which aggregates are returned (per-tab counts, unseen count, personal count) and scoping to 'active' insights, though with no output schema present it could have described the shape more concretely.
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?
A single sentence with no filler, front-loading the verb and the scope before enumerating the returned counts. Nothing in it is redundant with the name or title.
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?
With no parameters and no output schema, the description carries the burden of conveying the return contents, and it does so by listing the three count categories. What's missing is guidance on how this fits alongside the other insight and team-summary tools.
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?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. The implicit scoping to the authenticated user's team is a mild plus, as it tells the agent the tool needs no team identifier.
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 names a specific verb and resource ('Get an aggregate summary of active insights') and enumerates what the summary contains: per-tab counts, unseen count, and personal insight count. It implies team scope, distinguishing it loosely from get-my-insights-tool, but never explicitly contrasts with the closely related siblings (get-my-insights-tool, get-team-overview-tool).
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?
There is no statement of when to call this instead of get-my-insights-tool or get-team-overview-tool, and no prerequisites or exclusions. Only the phrase 'authenticated user's team' hints at the applicable context, leaving the routing decision entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-team-overview-toolGet team overviewARead-onlyIdempotentInspect
Get a comprehensive team health overview using the SPACE framework. Returns activity metrics (PRs, deployments, contributors), DORA performance ratings, collaboration metrics (code reviews, participation rate), and efficiency metrics (cycle time, PR size). Use this for a single-call snapshot of team engineering health.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Reporting period. Defaults to rolling_30d. | rolling_30d |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| period | Yes | Human-readable period label. |
| activity | Yes | PR, deployment, and contributor counts. |
| efficiency | Yes | Cycle time and PR size metrics. |
| performance | Yes | DORA metrics and overall rating. Lead time and recovery time are null when there was nothing to measure, and the rating is No Data when too few metrics were measured. |
| collaboration | Yes | Code review and participation metrics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent, so safety is covered. The description adds the useful fact that all metrics come back in one call with no filtering semantics beyond period, which tells the agent this is a broad read rather than a drill-down.
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?
Two sentences: the first front-loads what is returned grouped by framework dimension, the second states usage. No filler or repetition of the title.
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?
With an output schema present, the description needn't explain return structure, and it still summarizes the metric families so the agent knows what to expect. Annotations cover the safety profile; only the absence of named alternatives keeps it from a 5.
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 100% and the single period parameter is fully documented with its enum and default, so the schema does the heavy lifting. The description does not mention period or its accepted values, adding nothing beyond the schema.
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?
States a specific verb and resource (team health overview) and enumerates what it returns: PRs, deployments, contributors, DORA ratings, collaboration and efficiency metrics. The phrase 'single-call snapshot' distinguishes it in spirit from the granular siblings (get-dora-metrics-tool, get-pull-request-metrics-tool), but no sibling is named explicitly.
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?
'Use this for a single-call snapshot of team engineering health' gives a clear usage context, implying it is the aggregate entry point versus the per-metric tools. There is no explicit when-not-to-use or named alternative, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-undeployed-pull-requests-toolGet undeployed pull requestsARead-onlyIdempotentInspect
List merged pull requests that have not yet shipped to production, grouped by repository.
Returns how long each PR has been waiting and when each repository last deployed — the
signal behind deploy-lag and lead-time risk. Use this to spot work that is merged but
stuck before deployment. Merged PRs that predate their repository's most recent
successful production deploy are assumed shipped (deploys ship the default branch) and
reported via assumed_deployed instead of being false-positive "undeployed" entries.
| Name | Required | Description | Default |
|---|---|---|---|
| lookback_days | No | How many days back to consider merged PRs. Defaults to 14, clamped to 1–90. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| headline | Yes | One-line summary to lead with when relaying this result. |
| repositories | Yes | Per-repository breakdown: undeployed count, oldest wait, last deploy, and the PRs. |
| lookback_days | Yes | Lookback window in days. |
| assumed_deployed | Yes | Merged PRs without an explicit deployment link that predate their repository's most recent successful deploy — counted as shipped, not undeployed. |
| total_undeployed | Yes | Total merged-but-undeployed PRs across the team. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent safety profile, and the description goes well beyond them by disclosing the deployment-correlation rule: PRs merged before the last successful production deploy are treated as shipped and surfaced via `assumed_deployed` rather than as false positives. That is exactly the kind of subtle semantics an agent could otherwise misread as a data bug.
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?
Three sentences, front-loaded with what is returned and then the use case, with no filler. Slightly dense in the final sentence, but every clause carries information about output shape or the assumed-deployed rule.
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?
An output schema exists so return-value documentation is not required, yet the description still summarizes the payload (wait time per PR, last deploy per repo). With one optional, fully described parameter, nothing an agent needs to invoke this correctly is 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?
Only one optional parameter and schema coverage is 100%, with the 1–90 clamp and default of 14 documented in the schema itself. The description adds no extra meaning about lookback_days, which is acceptable given the schema does the work.
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?
States a specific verb and resource ('List merged pull requests that have not yet shipped to production') plus the grouping dimension ('grouped by repository'), which immediately separates it from the broader get-merged-pull-requests-tool in the sibling list. An agent can pick between them without opening either schema.
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?
'Use this to spot work that is merged but stuck before deployment' gives a clear selection trigger. It does not explicitly name get-merged-pull-requests-tool as the alternative for a full merged-PR listing, so the when-not side is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-weekly-summary-toolGet weekly summaryARead-onlyIdempotentInspect
Get the latest weekly changelog summary for the authenticated user's team. Includes a TL;DR, executive summary, feature highlights, notable fixes, and team highlights. Use weeks_ago to retrieve older summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| weeks_ago | No | How many periods back to retrieve (0 = most recent, max 4). |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| tldr | Yes | Brief one-line summary. |
| period | Yes | Human-readable date range. |
| notable_fixes | No | Important bug fixes. |
| team_highlights | No | Team member accomplishments. |
| executive_summary | No | Detailed executive summary. |
| period_comparison | No | Comparison with previous period. |
| feature_highlights | No | Notable features shipped. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds that a summary is scoped to the authenticated user's team and that older periods are retrievable, which is useful context. It does not add anything about freshness/latency or what happens beyond the 4-period limit, and the listed sections largely restate the output schema.
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?
Three compact sentences, front-loaded with the core action and resource, then the content breakdown, then the parameter hint. No filler. The content enumeration is slightly listy but still earns its place by telling the agent what the output covers.
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 single optional parameter read-only tool with an output schema and annotations, the description covers purpose, scope (team, latest period), content, and how to go back in time. The only meaningful gap is that it does not point the agent to the more specific sibling tools when a narrower summary is needed.
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?
With one parameter at 100% schema coverage, the schema already documents the default of 0 and the max of 4. The description only repeats the retrieval intent ('Use weeks_ago to retrieve older summaries') without adding format or edge-case detail beyond the schema. Baseline 3 is appropriate when the schema carries the semantics.
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?
States a specific verb and resource ('Get the latest weekly changelog summary for the authenticated user's team') and enumerates what the summary contains (TL;DR, executive summary, feature highlights, fixes, team highlights). That makes the deliverable concrete. It does not explicitly differentiate itself from near siblings like get-team-insight-summary-tool or get-team-overview-tool, so it stops short of a 5.
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?
'Use weeks_ago to retrieve older summaries' gives parameter-level usage but no when-to-use versus alternatives guidance. There is no statement of when this summary is preferable to get-team-insight-summary-tool or get-my-insights-tool. Usage is implied by the purpose rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link-repositories-toolLink repositoriesAIdempotentInspect
Teach the team's org map how two repositories relate, so every future get-team-context
call — by any teammate's agent — knows it. Relations (read as "repository
to_repository"): depends_on (this repo consumes that one — an SDK, package, or service),
documents (this repo is the docs for that one), ships_with (changes here usually mean
changes there), and unrelated (suppress a noisy derived connection between the pair).
Use it when you discover a relationship the map is missing, or when the user tells you how
repos fit together. Re-teaching the same edge refreshes it. Links are team-visible and
attributed to you.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional short context, e.g. "the widget bundles this SDK — API changes here need a release there". Max 500 characters. | |
| relation | Yes | How `repository` relates to `to_repository`: depends_on, documents, ships_with, or unrelated (suppresses derived connections between the pair). | |
| repository | Yes | The FROM side of the relation — usually the repository you are working in, as owner/name or a bare repo name. Also binds the session to the owning team. | |
| to_repository | Yes | The TO side of the relation, as owner/name or a bare repo name. Must be on the same team. |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | Yes | The TO repository. |
| from | Yes | The FROM repository. |
| team | Yes | Team name. |
| message | Yes | Human-readable confirmation. |
| relation | Yes | The relation recorded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover idempotency and non-destructiveness, and the description adds real context beyond them: links are team-visible, attributed to the caller, and re-teaching refreshes rather than duplicates. It does not discuss failure modes (e.g., to_repository off-team) beyond the schema's 'Must be on the same team.'
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?
Front-loaded with purpose, then relations, then triggers, then behavioral notes. Every clause earns its place, though the parenthetical definitions add some length that could be tightened.
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?
An output schema exists so return values need no explanation; the description still covers relation semantics, when to call, team binding, visibility, and refresh behavior. Nothing an agent needs to invoke it correctly is 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 coverage is 100%, so baseline is 3, but the description adds semantic depth to the enum: depends_on as 'consumes that one — an SDK, package, or service,' ships_with as coupled changes, unrelated as suppressing derived connections. This meaningfully exceeds the terse enum descriptions.
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?
Specific verb+resource: 'Teach the team's org map how two repositories relate.' It names the downstream consumer (get-team-context) and defines the four relation types, so it is unmistakable against siblings like set-up-repository-tool or deploy-repository-tool.
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?
Explicit trigger conditions: 'when you discover a relationship the map is missing, or when the user tells you how repos fit together,' plus the refresh semantics of re-teaching an edge. It lacks an explicit when-not or a named alternative, which keeps it just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark-insight-seen-toolMark insight seenAIdempotentInspect
Mark a specific insight as seen by the authenticated user. This helps track which insights have been reviewed and reduces noise in future queries.
| Name | Required | Description | Default |
|---|---|---|---|
| insight_id | Yes | The ID of the insight to mark as seen. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so the description is not burdened with safety disclosure. It usefully explains the downstream effect (suppresses the insight from future queries for the authenticated user), but omits whether marking is reversible/unmarkable and what happens for an invalid or foreign insight_id.
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?
Two short sentences, front-loaded with the action and effect, with no filler. Slightly better than minimal, though the payoff sentence is somewhat generic.
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 one-parameter mutation with annotations covering idempotency and non-destructiveness and no output schema, the definition supplies enough to invoke it correctly. The remaining gap — behavior on invalid or non-owned insight_id — is minor.
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?
There is a single parameter with 100% schema description coverage, so baseline is 3. The description adds no meaning beyond the schema — it does not clarify whether insight_id must belong to the caller or how IDs are obtained (e.g., from get-my-insights-tool).
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?
States a specific verb and resource ('Mark a specific insight as seen') plus a scope qualifier ('by the authenticated user'), which distinguishes it from read-oriented siblings like get-my-insights-tool. It does not explicitly name or route against those siblings, keeping it just short of a 5.
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 second sentence implies when to use it — after reviewing an insight, to reduce noise in future queries — but never states when not to use it or points to an alternative tool for retrieving or dismissing insights. Usage is inferred rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose-icp-rule-toolPropose ICP ruleAInspect
Internal Coderbuds staff only. Propose a rule about who Coderbuds is for or what an opener may say. It lands on the Who it is for tab of /admin/prospects as a proposal and does not govern anything until a person adopts it — the same division as drafting an opener you cannot send.
Propose when outbound has taught you something the current rules do not say: a reply
that contradicts a wedge, a disqualifier that keeps recurring, a signal that keeps
producing rows nobody writes to. Do not propose a tidier wording of a rule that
already exists, and do not re-propose something in retired — the reason it was
retired is a finding, not an oversight.
Write the statement as an instruction the next draft can follow, not an observation. "A job advert naming a coding agent is the signal that reaches a private company" is usable; "AI tooling seems relevant" is not.
evidence is what makes it true — the reply you read, the measurement, the count of
rows. Leave it out if you genuinely have none, and it will be shown as ungrounded
rather than quietly passing as fact.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which group it belongs to: buyer, wedge, signal, disqualifier, claim or reply. | |
| evidence | No | What makes it true — the reply, the measurement, the count. Omit rather than invent. | |
| statement | Yes | The rule, written as an instruction the next draft can follow. | |
| source_url | No | Where the evidence can be read back. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only carry destructiveHint=false, so the description does the heavy lifting: it discloses access restriction ('Internal Coderbuds staff only'), the non-binding nature of the write ('does not govern anything until a person adopts it'), where the proposal surfaces, and the consequence of omitting evidence ('shown as ungrounded rather than quietly passing as fact'). That is real behavioral context an agent cannot get from the annotation.
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?
Front-loaded with scope and the adoption caveat before the when-to-propose rules, and nearly every sentence carries instruction. It runs long across four blocks, and the evidence explanation partially duplicates the schema's own wording, so it is dense rather than maximally tight.
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?
With no output schema, the description does explain the outcome (a proposal on the admin tab, ungrounded flagging when evidence is absent), which is the main thing an agent needs. It never says what the call returns (an id, a link, a confirmation), which is the one remaining gap for a create-style tool.
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 coverage is 100%, so the baseline is 3; the description still adds meaning — it explains what makes evidence valid ('the reply you read, the measurement, the count of rows'), the cost of leaving it out, and the required form of statement (an instruction the next draft can follow, not an observation, with a usable vs unusable example). 'kind' and 'source_url' get no treatment in the prose.
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?
States a specific verb and resource — proposing a rule about who Coderbuds is for or what an opener may say — and pins down the destination (the Who it is for tab of /admin/prospects as a proposal). It implicitly separates itself from writing/adopting rules, but never names the sibling read or standard-setting tools (get-icp-tool, set-change-fit-standard-tool) an agent might otherwise reach for.
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?
Gives an explicit trigger ('propose when outbound has taught you something the current rules do not say: a reply that contradicts a wedge, a disqualifier that keeps recurring, a signal that keeps producing rows nobody writes to') and two explicit exclusions: no tidier rewording of an existing rule, and no re-proposing anything in 'retired'. When/when-not guidance is complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose-self-review-finding-toolPropose self-review findingAInspect
Internal Coderbuds staff only. Propose a self-review finding: something Coderbuds tells customers that the data it holds contradicts, or a fact it holds and leaves out where it matters. It lands on /admin/self-review as proposed and nothing happens until a person accepts it.
Propose when your work in this repository or on production data shows Coderbuds' output is wrong in a way that will recur — a PR comment line, a metric, a verdict. Do not propose one-off bugs you can simply fix, and do not propose a tidier wording of an open finding; call get-self-review-findings first to check.
claim says what Coderbuds says, what the data says, and why it matters. evidence
is the numbers behind it — counts, rates, PR references. Leave it out rather than
invent it.
| Name | Required | Description | Default |
|---|---|---|---|
| claim | Yes | What Coderbuds says, what the data says, why it matters. | |
| title | Yes | One line naming the fault. | |
| evidence | No | The numbers or PR references behind it. Omit rather than invent. | |
| severity | No | Default medium. | |
| fix_direction | No | What you think should change. | |
| suspected_files | No | Repository paths to start from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the lone destructiveHint=false annotation, it discloses the audience restriction (internal Coderbuds staff only), the landing surface (/admin/self-review), and crucially that the write is staged as 'proposed' with nothing happening until a human accepts it — exactly the state-transition context an agent needs before writing. It does not cover what happens on accept/reject or whether duplicate proposals are rejected server-side.
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?
Front-loaded with the audience gate and the definition, then usage rules, then parameter notes — the ordering matches how an agent decides. It is slightly redundant in re-explaining `claim` and `evidence` already covered by the schema.
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 six-parameter mutation with no output schema, the description covers who may call it, what it creates, the pending-state lifecycle, and when not to call it. The remaining gap is what the tool returns and whether it deduplicates against existing findings, which the agent must infer.
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 100%, so all six parameters are already documented in structured data, setting the baseline at 3. The description's restatement of `claim` and `evidence` ('leave it out rather than invent it') mirrors the schema text rather than adding new semantics such as expected evidence format or severity selection guidance.
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 states a specific verb (propose) and defines the resource precisely: a claim Coderbuds makes that its own data contradicts, or a material omission. That definition distinguishes it cleanly from get-self-review-findings-tool (read) and record-self-review-fix-tool (fix tracking) without needing schema inspection.
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 gives an explicit positive trigger ('when your work in this repository or on production data shows Coderbuds' output is wrong in a way that will recur'), two explicit exclusions ('do not propose one-off bugs you can simply fix', 'do not propose a tidier wording of an open finding'), and names the prerequisite read tool to call first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record-change-fit-decision-toolRecord change-fit decisionAIdempotentInspect
Say what you did about a assess-change-fit verdict. Call this right after you act on
one — especially when you override it.
decision is one of: proceeded (opened it anyway), split (broke it into smaller
PRs), trimmed (cut it down to fit), abandoned (dropped the change). Give a reason
whenever you proceed: "the severable piece is dead code the change deletes — splitting
would make review harder" is the kind of thing the team should be able to read back.
Overriding is a legitimate move and this is how you make it one. An unrecorded override
is indistinguishable from never having got round to it, so the standard can only ever be
obeyed, never argued with. Recorded overrides are what let Coderbuds notice a threshold
that fires too often on changes that turn out fine, and move it. When that happens this
response carries a standard_adjustment — say that once to the person, because the
standard they are held to just changed, then let it drop.
Once you have recorded it, stop telling the person about it. The record is the report — it is what the team reads back — and repeating the verdict, the line count and the standard in your summary is the same argument made twice to someone who already agreed. A standard that has to be re-explained on every change it fires on is not being upheld, it is being nagged about, and people turn those off.
Defaults to the team's most recent undecided check, so you can usually call it with just
decision and reason. Pass check_id (returned by assess-change-fit) to be explicit.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Why — required in spirit when proceeding. Max 500 characters, visible to the team. | |
| check_id | No | The check this answers (from assess-change-fit). Defaults to your most recent undecided check. | |
| decision | Yes | What you did: proceeded (opened it anyway), split, trimmed, or abandoned. | |
| repository | No | Optional "owner/name" repository slug, used only to bind the session to the owning team. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| message | Yes | Human-readable confirmation. |
| verdict | Yes | The verdict being decided on. |
| check_id | Yes | The fit check the decision was recorded against. |
| decision | Yes | The decision recorded. |
| assessed_at | Yes | When that check ran, ISO 8601. |
| decision_reason | No | The reason recorded, or null. |
| standard_adjustment | No | Present, once, when this override moved the team size standard: adjustment_id, previous_target_lines, target_lines, evidence, message. |
| proposed_total_changes | Yes | Raw total changed lines that were assessed. |
| replaced_earlier_decision | Yes | True when this overwrote a decision already on the check. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the idempotent/non-destructive annotations, it discloses default resolution ('most recent undecided check'), that the response may carry a standard_adjustment, and that the record is team-visible and read back. It does not cover failure modes (e.g. no undecided check to bind to) or any permission/auth requirements, which keeps it short of a 5.
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 operative guidance is front-loaded and clear, but the closing three paragraphs repeat one point — don't re-explain the standard to the user — using two separate metaphors (argument made twice, being nagged about). That's redundant prose in a description that is already long.
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?
An output schema exists, yet the description usefully flags the one field an agent must act on (standard_adjustment) and sets post-call social behavior. What's missing is what happens when there is no recent undecided check to default to — an agent calling with only `decision` has no stated failure behavior.
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 coverage is 100%, so 3 is the baseline, but the description earns more: it explains the default resolution of check_id and gives a worked example of the kind of reason text worth writing. The repository parameter's purpose is left entirely to the schema.
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?
Names a specific verb and resource — recording what you did about an assess-change-fit verdict — and ties it explicitly to the sibling tool assess-change-fit-tool that produces the check. An agent can tell immediately this is the follow-up write, not another assessment.
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?
States the trigger ('right after you act on one — especially when you override it'), the expected minimal call shape ('usually call it with just decision and reason'), and the condition for being explicit with check_id. It also resolves the ambiguity of what to do when overriding: override is legitimate, just record it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record-prospect-outreach-toolRecord prospect outreachAInspect
Internal Coderbuds staff only. Record that a message was sent to a prospect — after it has actually been sent.
Only call this when you have been told it went out. Recording a send is what moves a prospect from Sourced to Contacted, and a row that says "contacted" with nothing behind it is worse than one that says nothing: the next session skips it.
Sending is not something you can do. If you have written an opener, save it with
save-prospect-draft and wait to be told it was sent.
A draft waiting on the row is folded into the record and cleared, so the same opener cannot go out twice.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | The message body or a summary. Defaults to the draft saved on the row. | |
| channel | No | email, linkedin, slack or call. Defaults to email. | |
| subject | No | The subject line or opening line, so the next session can see what was already said. | |
| prospect_id | Yes | The prospect who was written to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=false, so the description carries real weight and delivers: the state transition (Sourced to Contacted), the side effect of folding and clearing a pending draft to prevent duplicate sends, and the concrete downstream harm of a false record. It also discloses the access restriction (internal staff only), which nothing in the schema states.
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?
Front-loaded with the access restriction, then the trigger condition, then the alternative route, then the side effect. The repeated emphasis on 'after it has actually been sent' is deliberate and justified for a state-mutating tool whose failure mode is silent data corruption.
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?
Covers trigger, side effects, authorization, and the sibling to use instead, which is most of what an agent needs. With no output schema it never says what a successful record returns or what happens if prospect_id is invalid or already Contacted — the only remaining gap.
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 coverage is 100%, so the baseline is 3. The description earns an extra point by explaining the cross-field interaction the schema only hints at: the saved draft 'is folded into the record and cleared', which clarifies why note defaults to the draft and what happens to it afterward.
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?
States a specific verb and resource ('Record that a message was sent to a prospect') plus the critical ordering qualifier ('after it has actually been sent'). It is clearly separable from save-prospect-draft-tool and update-prospect-tool, which are named or implied in the surrounding tool set.
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?
Explicit when-to-use ('Only call this when you have been told it went out') and explicit when-not plus the correct alternative ('Sending is not something you can do... save it with save-prospect-draft'). The routing decision is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record-self-review-fix-toolRecord self-review fixAInspect
Internal Coderbuds staff only. Record the pull request that fixes an accepted self-review finding. Call it once the PR is open. This does not resolve the finding: a nightly check resolves it after two clean runs in production, and a critic or agent finding is resolved by a person — so the record shows the fix working, not just the fix shipping.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | One line on what changed, for the reviewer. | |
| finding_id | Yes | The finding you fixed. | |
| pull_request_number | Yes | The PR that fixes it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=false, so the description carries most of the burden and does so well: it discloses the audience restriction (internal staff), the fact that this is a record-keeping write rather than a state-resolving action, and the actual resolution path (nightly check after two clean production runs, or a human for critic/agent findings). It omits idempotency and return 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?
Front-loads the access restriction, then the action, then the critical caveat. Every sentence carries information, though the final clause about 'the record shows the fix working, not just the fix shipping' is slightly rhetorical and could be tighter.
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?
With no output schema and only a weak annotation, the description supplies the lifecycle context an agent needs: when to call, who may call, and that success does not mean the finding is closed. It lacks detail on what the record returns or whether repeat calls are safe, which is a minor gap for a 3-param mutation.
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 coverage is 100%, so the baseline is 3, but the description adds real semantic constraint by specifying the finding must be 'accepted' — narrowing which finding_id values are valid — and by tying pull_request_number to a PR that fixes it and is already open.
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?
States a specific verb and resource: record the pull request that fixes an accepted self-review finding. This clearly distinguishes it from the read/list siblings (get-self-review-findings-tool) and the creation sibling (propose-self-review-finding-tool). An agent knows exactly what the operation writes.
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?
Gives an explicit trigger condition ('Call it once the PR is open') and a scope gate ('Internal Coderbuds staff only'), plus the important negative: this does not resolve the finding. It does not name alternative tools for resolution, but the when-to-use context is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record-team-outreach-toolRecord team outreachAInspect
Internal Coderbuds staff only. Record that a person reached out by hand to a signed-up account (a trial or customer team) — after it has actually been sent.
This is what fills the outreach field on each account in get-signup-funnel,
and what the admin trials page shows as "contacted". Without it, an account that
was emailed last week reads as never contacted.
Only call this when you have been told it went out. Sending is not something
this tool does. Use the team id from get-signup-funnel. Pass sent_at when
recording something sent earlier, so the row shows how long the silence has
really been.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | The message body or a summary. | |
| channel | No | email, slack or call. Defaults to email. | |
| sent_at | No | When it was sent, if not just now. A date or date-time in UTC; must not be in the future. | |
| subject | No | The subject line or opening line, so the next session can see what was already said. | |
| team_id | Yes | The account that was written to — the `id` from get-signup-funnel. | |
| recipient | No | Who it went to, e.g. an email address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only `destructiveHint: false` provided, the description carries most of the burden and does so well: it discloses the access restriction (internal staff only), that the operation is a record of a past event rather than an action, and the downstream effects (populates the `outreach` field in `get-signup-funnel` and shows as 'contacted' on the admin trials page). It doesn't cover idempotency or what happens on duplicate entry.
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 staff-only restriction and the core action are front-loaded, and the paragraph break separates purpose from usage rules. A few sentences are slightly redundant ('Only call this when you have been told it went out' overlaps with 'Sending is not something this tool does'), but nothing is padding.
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 6-parameter mutation with no output schema and minimal annotations, the description supplies access restrictions, the when-to-record rule, the downstream visibility, and the ID source. An agent has enough to call it correctly; only duplicate-handling behavior is unaddressed.
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 coverage is 100%, so a baseline of 3 applies, but the description adds real meaning: it tells the agent where to source `team_id`, and explains why `sent_at` matters ('so the row shows how long the silence has really been'), which is motivation the schema lacks. The remaining parameters are left entirely to their schema text.
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 uses a specific verb ('Record') on a well-defined resource ('a person reached out by hand to a signed-up account (a trial or customer team)'), and it explicitly clarifies that sending is out of scope. The parenthetical defining the target as a trial/customer team implicitly separates it from the prospect-side siblings, but it never names `record-prospect-outreach-tool`, so the differentiation is inferred rather than stated.
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?
'Only call this when you have been told it went out' is an explicit call condition, and 'Sending is not something this tool does' is an explicit exclusion. It also routes the agent to `get-signup-funnel` for the team `id`, and instructs passing `sent_at` for backdated records. It stops short of naming the closest alternative tool for prospect outreach.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report-ai-usage-toolReport AI usageAIdempotentInspect
Report that you — the coding agent — wrote or helped write this change, and how much of it. Coderbuds otherwise has to infer AI authorship from the shape of the diff, and a heuristic that decides who counts as an AI adopter is a heuristic that decides where a CTO spends budget. You already know the answer. Say it, and the team's AI numbers stop being a guess.
Call this once per change, after the work is done — ideally with pull_request_number once
the PR exists, or branch before it does. Re-reporting the same change refreshes the record
rather than double-counting it, so it is safe to call again as the work evolves.
Set authorship honestly: agent_authored (you wrote essentially all of it),
agent_assisted (you wrote a meaningful part, a person wrote the rest), or human_authored
(a person wrote it and you only looked things up or reviewed).
Then say what you saw a person do before the pull request opened, in review_evidence. Do
not judge whether the change was "reviewed" — list only what happened in front of you:
approved_each_edit— each edit was shown to a person as a diff and approved before it applied (you ran in a mode that asks before editing, not one that bypasses permissions)diff_comments— a person left comments on the diff before it opened (in Conductor, theGetDiffCommentstool returns them)edited_by_person— a person changed the code themselvesreplied_after_changes— a person replied after the change was finished and before the pull request opened, so they saw at least your summary of it
Pass an empty list when none of these happened. You cannot see a person reading a diff in their editor, so an empty list means "no evidence", and Coderbuds words it that way.
Reports are team-visible and attributed to you. The response tells you whether Coderbuds' own detector agreed with your report; where it did not, yours is the one that counts.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | The coding agent that did the work, as a stable slug — e.g. claude-code, cursor, copilot, codex, amp. Name the product the person worked through, not the model under it: an agent running inside Amp reports amp even when the model is Claude, and puts the model in `model`. Free text is normalised, so "Claude Code" and "claude-code" are the same tool. | |
| model | No | Optional model that did the work, e.g. claude-opus-5. Separate from `tool`: Amp, Cursor and others run several models. | |
| notes | No | Optional short context, e.g. "agent wrote the migration, human rewrote the query". Max 500 characters. | |
| branch | No | The source branch, for when you report before the pull request exists. Matched to the pull request when it appears. | |
| authorship | Yes | How much of the change you wrote: agent_authored (essentially all), agent_assisted (a meaningful part), or human_authored (a person wrote it, you only assisted). | |
| repository | Yes | The repository the change is in, as owner/name or a bare repo name. Also binds the session to the owning team. | |
| human_reviewed | No | Deprecated — send review_evidence instead, which this is derived from. Used only when review_evidence is absent. | |
| review_evidence | No | What you saw a person do before the pull request opened: approved_each_edit, diff_comments, edited_by_person, replied_after_changes. An empty list when none of these happened. | |
| pull_request_number | No | The pull request this change became, if it exists yet. The strongest anchor — it lets Coderbuds compare your report against what its detector inferred from the same diff. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| tool | Yes | Normalised tool slug recorded. |
| model | No | Model recorded, if given. |
| branch | No | Branch the report is anchored to, if given. |
| created | Yes | False when this refreshed an existing report for the same change. |
| message | Yes | Human-readable confirmation. |
| authorship | Yes | Authorship level recorded. |
| repository | Yes | Repository the report was recorded against. |
| review_level | Yes | What the evidence adds up to: inspected, saw_change, unseen, or unknown. |
| human_reviewed | Yes | Whether the evidence shows a person looked at the code before it opened. |
| inferred_score | No | What Coderbuds' own detector scored this pull request, or null when there is nothing to compare yet. |
| detector_agreed | No | Whether the inferred score agreed with your report. Null when there is nothing to compare. |
| review_evidence | No | The evidence recorded, or null when none was sent. |
| pull_request_number | No | Pull request number the report is anchored to, if given. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover idempotentHint and destructiveHint; the description adds substantive behavior beyond them: reports are team-visible and attributed, re-reports refresh the existing record, and the response indicates whether Coderbuds' detector agreed with the report. It also clarifies that an empty review_evidence list is interpreted as 'no evidence' rather than a negative judgment.
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 core instruction (call once per change, use PR number or branch) is front-loaded and the enum guidance is well structured as a list. The opening paragraph spends several sentences on motivation and budget rhetoric, which is persuasive but not strictly needed for correct invocation.
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 9-parameter mutation tool with an output schema, the description covers when to call, how to pick authorship, how to enumerate review evidence, and how the response is used. Nothing an agent needs in order to call it correctly is 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 coverage is 100%, so the baseline is 3, but the description adds real meaning beyond it: it explains each authorship value operationally, defines what each review_evidence enum physically observed ('approved_each_edit' requires a permission-asking mode), and reinforces the empty-list convention. It stops short of explaining 'repository' binding or the deprecated 'human_reviewed' fallback beyond what the schema says.
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 states a specific verb and resource: report that the agent wrote or helped write a change, and how much. It is unmistakably a write/report tool, contrasting cleanly with read-only siblings like get-ai-adoption-tool or get-agent-activity-tool, and the first sentence alone lets an agent place it.
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 gives explicit timing ('once per change, after the work is done'), explicit anchor alternatives ('pull_request_number' once the PR exists, 'branch' before it does), and states that re-reporting refreshes rather than double-counts, so re-invocation is sanctioned. It also tells the agent to set authorship honestly and enumerates the criteria for each choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request-pull-request-review-toolRequest pull request reviewAInspect
Ask the team for a review on an open pull request. Coderbuds posts the request to the team's Slack channel — picking the next reviewer from the team's rotation, or the one you name — and leaves a comment on the pull request itself so the ask is visible to anyone reading it. Coderbuds speaks in its own voice; it does not comment as you. Use this after opening a pull request, or when a PR has been sitting unreviewed. Identify the repository by name (e.g. "saas") or full name (e.g. "patchstack/saas").
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional one-line context for the reviewer, e.g. "touches billing — needs a careful look at the proration maths". | |
| reviewer | No | Optional teammate to ask, by full name, email, or GitHub username. Leave this out to use the team's review rotation. | |
| repository | Yes | The repository the pull request lives in, by name (e.g. "saas") or full name (e.g. "patchstack/saas"). | |
| pull_request_number | Yes | The pull request number, e.g. 3258. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | A human-readable summary of the outcome. |
| success | Yes | Whether the review request went out. |
| reviewer | No | The teammate who was asked, if one was assigned. |
| repository | No | The repository the pull request belongs to. |
| slack_notified | Yes | Whether the request was posted to the team Slack channel. |
| pull_request_url | No | Link to the pull request. |
| pull_request_number | Yes | The pull request the review was requested on. |
| commented_on_pull_request | Yes | Whether Coderbuds commented on the pull request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only openWorldHint/destructiveHint declared, the description carries the behavioral burden and does so well: it discloses the two side effects (Slack message, PR comment), the reviewer-selection logic (rotation vs. named), and the attribution quirk that Coderbuds comments in its own voice rather than as the user — the kind of detail an agent cannot infer elsewhere.
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?
Front-loaded with the core action, and each sentence contributes either mechanism, attribution, or usage timing. Slightly padded by restating the repository naming convention already in the schema.
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?
Output schema exists so return values need not be explained, and the description covers mechanism, side effects, selection logic, attribution, and timing for a 4-parameter tool. Nothing an agent needs to invoke it correctly is 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 coverage is 100%, so baseline is 3; the description earns a bump by explaining the reviewer/rotation fallback behavior and the repository name-vs-full-name forms in prose. It adds meaning beyond the schema but repeats the repository format example verbatim.
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?
States a specific action (request a review on an open pull request) plus the exact mechanism: a Slack post to the team channel and a comment on the PR. No sibling tool does anything comparable, so an agent can route to it unambiguously.
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?
"Use this after opening a pull request, or when a PR has been sitting unreviewed" gives explicit triggering conditions. It doesn't name alternatives, but no sibling overlaps in function, so the omission is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save-prospect-draft-toolSave prospect draftAInspect
Internal Coderbuds staff only. Save an opener against a prospect for Elliot to read and send, and flag the row as waiting on him.
You cannot send anything. Every message goes out under Elliot's name, from his own inbox or LinkedIn account, so the division is: you research, prioritise and write; he sends. This is where the writing goes.
Write the message itself, not a description of one — no placeholders, no "[insert
metric]". Ground every claim in what the worklist gave you and say plainly what is not
verified. If you cannot write an honest opener because something is unconfirmed, do
not invent it: use update-prospect to park the row with the question instead.
Saving a draft flags the row, because a draft nobody is told about is a draft nobody sends. Recording the send later clears both.
| Name | Required | Description | Default |
|---|---|---|---|
| draft | Yes | The message as it should go out, signed off and ready to paste. Not a summary of one. | |
| prospect_id | Yes | The prospect this opener is for, from get-prospect-worklist. | |
| needs_action_reason | No | What you are asking the person to do, in their words. Defaults to "Draft ready to read and send". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=false, so the description carries the real burden and does: it discloses the side effect (the row is flagged as waiting on Elliot), the invariant that sends clear both flags, and the access restriction (Internal Coderbuds staff only). It also states a hard capability limit — nothing can be sent from here — that no annotation conveys.
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 two most decision-critical facts — staff-only access and the cannot-send division of labour — are front-loaded, and each paragraph addresses a distinct concern (permission, division of labour, content quality, side effects). Slightly long, but there is little filler.
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 3-parameter mutation with no output schema, the description covers everything an agent needs: who may call it, what it writes, what state it sets, what clears that state, and how to handle the failure case (park via update-prospect). Nothing essential is 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 coverage is 100%, so the baseline is 3; the description goes beyond by adding substantive quality semantics for `draft` — write the message itself, no placeholders, ground every claim in the worklist, state what is unverified. `needs_action_reason` is left entirely to the schema, which is acceptable given it is fully documented there.
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?
States a specific verb and resource — save an opener draft against a prospect — and positions it precisely in the workflow (the writing step, as opposed to the sending step). This clearly separates it from record-prospect-outreach-tool (recording an actual send) and update-prospect-tool (parking a row).
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?
Gives an explicit when-to-use, an explicit when-not-to (if you can't write an honest opener, use `update-prospect` to park the row with the question), and an explicit boundary (you cannot send; Elliot sends). The routing decision to the sibling is spelled out rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set-agent-posture-toolSet agent postureADestructiveIdempotentInspect
Set how loudly the Coderbuds agent speaks to this team — the single control over whether it acts at all. "off" = silent, Coderbuds still measures but never posts. "preview" = record recommendations in Coderbuds without performing or sending them. "quiet" = weekly pulse only, no nudges. "public" = acts in the open, nudges go to the team channel and never to DMs. "direct" = may message engineers directly. There are no per-capability settings: an individual act that needs a human still asks for approval in Slack regardless of posture. Requires team admin permissions; use get-agent-activity-tool to see the current posture and activity.
| Name | Required | Description | Default |
|---|---|---|---|
| posture | Yes | off = silent; preview = recommendations in Coderbuds only; quiet = weekly pulse only; public = nudges in the team channel; direct = may DM engineers. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| message | Yes | Human-readable confirmation. |
| posture | Yes | The posture now in effect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond idempotentHint/destructiveHint by disclosing real consequences: 'off' still measures but never posts, 'preview' records without sending, nudges never DM under 'public', and human-approval in Slack is required regardless of posture. It also clarifies there are no per-capability settings, which prevents an agent from assuming granular override 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?
Front-loaded with the core purpose before the enum walkthrough, and every sentence carries decision-relevant information. It is somewhat long because the enum meanings appear in both the description and the schema, which is mild redundancy rather than waste.
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 single-parameter mutation tool with an output schema available, the description covers the safety profile, the permission requirement, the approval fallback, and the read sibling. There is nothing an agent needs in order to call it correctly that is 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 coverage is 100% and the enum values are already documented in the schema, so the baseline is 3. The description earns extra credit by adding semantics the schema lacks — notably that 'off' still measures and 'preview' records recommendations without sending — but it largely restates the enum list rather than adding format or edge-case behavior.
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?
Names a specific verb and resource ('Set how loudly the Coderbuds agent speaks to this team') and immediately frames it as 'the single control over whether it acts at all,' which delineates it from every read-only sibling. An agent can distinguish it from get-agent-activity-tool or the many get-* tools without opening a schema.
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 enumerates every posture value with its operational meaning, states the prerequisite (team admin permissions), and explicitly routes to get-agent-activity-tool to inspect current posture and activity. The only mild gap is the absence of an explicit 'when not to use' clause, but the read-vs-write split with the named sibling covers the practical alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set-change-fit-standard-toolSet change-fit standardADestructiveIdempotentInspect
Set this team's pull request size standard, when a person on the team says the number is
wrong. Pass target_lines for their number — tighter or looser — or omit it to go back
to Coderbuds' default.
You usually will not need this to make room. Coderbuds loosens the standard on its own:
when the team's recorded overrides show a caution threshold firing on changes that keep
turning out fine, it moves the line and reports the move in the
record-change-fit-decision response. Recording overrides is the better path, because it
moves the line on evidence the team can read back. Use this when someone already knows
the number and does not want to wait for the record to prove it.
Only call it when a person has actually asked, and pass the number they said. A standard is how a team works; it is not yours to set or to talk them out of. Setting it pins the number: Coderbuds stops adjusting this team's standard from then on, including the automatic loosening.
| Name | Required | Description | Default |
|---|---|---|---|
| repository | No | Optional "owner/name" repository slug, used only to bind the session to the owning team. | |
| target_lines | No | The number the team asked for, in reviewable lines. Omit it to revert to Coderbuds' default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| pinned | Yes | True once the team owns the number and Coderbuds will not adjust it. |
| source | Yes | Who set it: always "team" from this tool. |
| message | Yes | Human-readable confirmation. |
| target_lines | Yes | The standard now in force for this team. |
| previous_target_lines | Yes | The standard before this change. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With `destructiveHint: true` and `idempotentHint: true` already declared, the description adds the crucial consequence that annotations cannot: setting the standard pins the number and disables Coderbuds' automatic loosening from then on. It does not clarify whether reverting to the default (omitting `target_lines`) also releases the pin, which is the one behavioral question an agent would still have.
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?
Front-loaded with the action and its argument, then usage guidance, then the alternative path — a sensible ordering. It runs long and includes some normative framing ('it is not yours to set or to talk them out of') that is more policy than specification, though it does steer agent behavior.
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 two-parameter tool with an output schema and annotations, the description covers purpose, preconditions, consequences, and the alternative workflow. The remaining gaps — the repository binding role and whether reverting to default unpins the standard — are narrow but real for a tool that permanently alters team policy.
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 coverage is 100%, so both parameters are already documented, including 'Omit it to revert to Coderbuds' default.' The description's 'tighter or looser' framing and 'pass the number they said' add minor semantic nuance but largely restate the schema, and the `repository` parameter is never mentioned in the description at all.
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?
States a specific verb and resource: setting this team's pull request size standard, including the value shape (`target_lines`) and the omit-to-revert behavior. It is clearly distinct from the sibling `record-change-fit-decision-tool`, which it explicitly names as the preferred alternative path.
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?
Gives explicit when-to-use ('when someone already knows the number and does not want to wait'), when-not-to-use ('You usually will not need this to make room'), the preferred alternative (recording overrides via record-change-fit-decision), and a hard precondition ('Only call it when a person has actually asked'). This is about as complete a routing instruction as a description can carry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set-review-policy-toolSet review policyADestructiveIdempotentInspect
Choose how much review this team's pull requests need. Once a policy is on, Coderbuds decides a tier for every pull request it sees opened or pushed to — no review, an AI review, one review, or a careful review — and says which, and why, on its pull request comment. Nothing is enforced on GitHub.
policy is one of:
skip_trivial— docs-only and tests-only changes skip review; every other change gets one.risk_based— trivial changes skip review, small code changes need only an AI review, and changes tosensitive_pathsor over the team's size standard need a careful review.off— no policy; Coderbuds says nothing about review.
Under every policy, a person always reads changes to CI, CODEOWNERS, dependency manifests and lockfiles, built bundles and agent instructions, a newcomer's first change, and an agent's change nobody has read.
sensitive_paths are folders (app/Billing/) or patterns where * reaches into
subfolders (database/migrations/*). Omit them to keep the team's current list; pass an
empty list to clear it.
Only call this when a person on the team has asked for it, and set what they said. Only the team owner can change it.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | Yes | The policy the team asked for, or off. | |
| repository | No | Optional "owner/name" repository slug, used only to bind the session to the owning team. | |
| sensitive_paths | No | Paths that need a careful review under risk_based. Omit to keep the current list; an empty list clears it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes | Team name. |
| policy | No | The policy now in force, or null when it is off. |
| message | Yes | Human-readable confirmation. |
| previous_policy | No | The policy before this call, or null when there was none. |
| sensitive_paths | Yes | The sensitive paths now in force. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotent and destructive, and the description adds context the annotations cannot: nothing is enforced on GitHub, the agent always reviews a fixed set of high-risk change categories regardless of policy, and omitting vs passing an empty sensitive_paths list keeps vs clears existing config. That last point directly accounts for the destructive hint and is not a contradiction.
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 core action and constraints are front-loaded and the enum definitions are cleanly bulleted, so it is easy to scan. It is on the long side, with the always-review paragraph arguably more than the agent strictly needs to invoke the tool, which keeps it from a 5.
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?
Given three parameters, an output schema, and destructive/idempotent annotations, the description covers everything an agent needs: what the policy causes, who may change it, how to preserve vs reset sensitive paths, and the enforcement boundary. No meaningful gap remains.
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 coverage is already 100%, but the description goes well beyond it by defining the runtime meaning of each policy enum value and by explaining sensitive_paths syntax (folder form, `*` wildcard reaching into subfolders, omit-to-keep vs empty-to-clear). The schema only says 'The policy the team asked for, or off.'
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 opening sentence gives a specific verb and resource — choosing how much review the team's PRs need — and the body spells out the resulting behavior (Coderbuds assigns a tier and comments why). It does not explicitly contrast itself with adjacent configuration siblings like set-change-fit-standard-tool or set-agent-posture-tool, so it stops short of full sibling differentiation.
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 clearly when to call ('Only call this when a person on the team has asked for it, and set what they said') and includes a hard prerequisite ('Only the team owner can change it'). The per-policy breakdown of skip_trivial vs risk_based vs off effectively tells the agent which value to select under which conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set-up-repository-toolSet up repositoryARead-onlyIdempotentInspect
Call when the person asks to set up, connect or wire this repository to
Coderbuds. Returns the steps to carry out: write the two moments (check
before opening a pull request, report after) into the repository's agent
guidance, commit the Coderbuds MCP connection so the rest of the team gets
it, open both as one pull request, then call get-team-context to prove it
works. Pass repository so the committed connection is pinned to its team,
and via_plugin when the Coderbuds plugin for Claude Code connected you.
| Name | Required | Description | Default |
|---|---|---|---|
| repository | No | The repository being set up, as owner/name — read it from `git remote get-url origin`. | |
| via_plugin | No | True when you are connected through the Coderbuds plugin for Claude Code. The steps then commit the plugin for the team instead of a second copy of the server. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The name implies a mutation, and the description resolves that ambiguity by saying it 'Returns the steps to carry out' — consistent with readOnlyHint=true and idempotentHint=true. It also spells out what the caller will end up doing (writing guidance, committing the MCP connection, opening one PR), which is useful context beyond the annotations. It does not describe the shape or ordering of the returned steps in any detail.
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?
Front-loaded with the trigger condition, then the action sequence, then parameter guidance — a sensible order with no filler. The step enumeration is slightly dense but each clause carries information the agent needs to sequence the work.
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?
There is no output schema, so the description carries the burden of explaining the return value — and it does, describing the steps returned and the terminal verification call. It also states the expected end state (one pull request), which is what an agent needs to call this correctly and act on the result.
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 coverage is 100%, so the schema already documents both parameters and the baseline would be 3. The description adds rationale rather than syntax: `repository` exists 'so the committed connection is pinned to its team,' and `via_plugin` changes what gets committed (plugin vs. a second copy of the server). That is genuine meaning beyond the schema text.
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?
States a specific verb (set up / connect / wire) and a specific resource (this repository to Coderbuds), and clarifies that the tool returns instructions rather than performing the setup itself. That framing separates it cleanly from siblings like deploy-repository-tool and link-repositories-tool, which act rather than prescribe.
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?
Gives an explicit trigger condition: 'Call when the person asks to set up, connect or wire this repository to Coderbuds.' It also names the required follow-up call (get-team-context) to verify success. It stops short of saying when not to use it or explicitly pointing to deploy-repository-tool/link-repositories-tool as alternatives for adjacent requests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-prospect-toolUpdate prospectADestructiveInspect
Internal Coderbuds staff only. Update one prospect: what research found, what stage it is at, what happens next, and whether a person is needed.
needs_action_reason is how you hand a row back without stopping. Several rows in
any pass will have a contact who has changed job, a headcount nobody can verify, or a
question only Elliot can answer. Park those with the question written in his words,
then carry on to the next row.
If the question ends in a choice, send the choices as answer_options. Most of
them do — "write to the CEO, wait for the new lead, or skip?" is three options you have
already worked out. Passed as options they become buttons; left in the prose they are a
blank textarea, and a question that needs composing is a question that waits a day.
When a question comes back answered, the row appears in the answered list with
both what you asked and what you were told. Act on it, then pass answer: null to
clear the pair — that is what takes it off the queue, and a row nobody clears is read
again every run.
Stages: sourced, contacted, replied, trialling, won, closed. Two rules matter —
never set contacted yourself (recording a send does that, so the stage always has
something behind it), and closed needs a closed_reason a person can read back.
Corrections to research are welcome and expected: a confirmed role, a corrected
headcount, a better signal. Say what you verified in signal, and leave
qualification_needed describing what is still unconfirmed rather than deleting it.
When you re-check the signal, set checked_on to today. The ICP requires the
trigger to be verified on the day the message is written, not the day the row was
sourced, and the queue marks a row whose signal was not checked today so that nobody
sends on a job advert that came down last week.
| Name | Required | Description | Default |
|---|---|---|---|
| stage | No | sourced, replied, trialling, won or closed. Not contacted — record the send instead. | |
| answer | No | Pass null once you have acted on an answered question, to take the row off the queue. You should not be writing answers yourself. | |
| signal | No | What makes this company worth approaching, as you now understand it. | |
| checked_on | No | The date you re-checked the signal, as YYYY-MM-DD. Set it to today whenever you have actually looked — an unchecked row is flagged before anybody sends to it. | |
| contact_url | No | Profile URL for the contact. | |
| next_action | No | The next concrete thing to do about this row. | |
| prospect_id | Yes | The prospect to update. | |
| contact_name | No | A confirmed contact name. | |
| contact_role | No | Their role, as you verified it. | |
| closed_reason | No | Required when closing. Why this is not going anywhere. | |
| answer_options | No | The answers that question is offering, up to four, each a complete instruction you could act on as written ("Write to Anh-Tho now", "Close it as unverifiable"). Send these whenever your question ends in a choice — they become buttons, and a question answered with a click is answered the same day. Free text stays available, so never narrow a genuinely open question into options to make it clickable. | |
| needs_action_reason | No | The question a person has to answer, in their words. | |
| qualification_needed | No | What is still unconfirmed. Leave it describing the gap rather than emptying it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
`destructiveHint: true` already tells the agent this overwrites state, and the description adds real side-effect context the annotation cannot express: clearing `answer` removes the row from the queue, and unverified signals get flagged before sending. What it omits is what happens to fields not passed (overwrite vs. merge) and any permission model beyond 'internal staff only' — significant for a 13-parameter mutation.
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?
Front-loaded with the access constraint and the one-line purpose, then segmented by bold rule headers so an agent can scan to the relevant rule. It runs long and re-states some points already carried in the schema descriptions (`checked_on`, `answer`, `answer_options`), which costs it a point.
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 13-parameter destructive update with no output schema, the description covers the domain rules an agent cannot infer: the stage vocabulary and its exceptions, the correction-not-deletion norm for `qualification_needed`, and the appearance of a `answered` list on return. It leaves the full response shape and merge-vs-replace behavior unstated.
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 coverage is 100%, so the baseline is 3, and the description earns above it by giving cross-parameter semantics the schema states only piecemeal: `answer_options` become buttons while prose stays a textarea, and `answer: null` is the pair-clearing act rather than a value. It stops short of explaining interaction between `stage`, `closed_reason`, and `qualification_needed`.
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?
Opens with a specific verb and resource ('Update one prospect') and enumerates the four kinds of change it carries: research findings, stage, next step, and whether a person is needed. It implicitly separates itself from the outreach-recording path ('never set `contacted` yourself — recording a send does that'), though it never names the sibling tool.
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?
Unusually explicit about when and how to use it: park blocked rows via `needs_action_reason` and carry on, pass options when the question ends in a choice, pass `answer: null` only after acting, never self-set `contacted`, and `closed` requires `closed_reason`. Each rule pairs a condition with the action that satisfies it.
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.
1 tool update
- Added
set-review-policy-tool
1 tool update
- Changed
set-up-repository-tool1 field changed- added
Input schema / properties / via_pluginAdded value: +{ + "default": false, + "description": "True when you are connected through the Coderbuds plugin for Claude Code. The steps then commit the plugin for the team instead of a second copy of the server.", + "type": "boolean" +}
1 tool update
- Added
record-team-outreach-tool
1 tool update
- Changed
report-ai-usage-tool2 fields changed- changed
Input schema / properties / model / descriptionPrevious value: -"Optional model that did the work, e.g. claude-opus-5."New value: +"Optional model that did the work, e.g. claude-opus-5. Separate from `tool`: Amp, Cursor and others run several models." - changed
Input schema / properties / tool / descriptionPrevious value: -"The coding agent that did the work, as a stable slug — e.g. claude-code, cursor, copilot, codex. Free text is normalised, so \"Claude Code\" and \"claude-code\" are the same tool."New value: +"The coding agent that did the work, as a stable slug — e.g. claude-code, cursor, copilot, codex, amp. Name the product the person worked through, not the model under it: an agent running inside Amp reports amp even when the model is Claude, and puts the model in `model`. Free text is normalised, so \"Claude Code\" and \"claude-code\" are the same tool."
1 tool update
- Changed
find-delivery-bottleneck-tool1 field changed- changed
Output schema / properties / stages / descriptionPrevious value: -"All six stages — waiting_to_start, writing_the_change, waiting_for_review, in_review, waiting_to_deploy, deploy_running — each with median/p75 hours, sample size, the count it was scored against (`analysed`, which for the two deploy stages counts only repositories that deploy), coverage, whether it is eligible to be ranked, whether it competes for the bottleneck at all (`ranked`, false for waiting_to_start), what would have to be connected to see it (`unlock`), and a note saying why it cannot or will not be ranked."New value: +"All six stages — waiting_to_start, writing_the_change, waiting_for_review, in_review, waiting_to_deploy, deploy_running — each with median/p75 hours, sample size, the count it was scored against (`analysed`, which for the two deploy stages counts only repositories that deploy), coverage, whether it is eligible to be ranked, whether it competes for the bottleneck at all (`ranked`, false for waiting_to_start), how many changes merged with no review from anyone but their author and so never entered the stage (`skipped`, review stages only — a skipped change did something, it is not missing data), what would have to be connected to see it (`unlock`), and a note saying why it cannot or will not be ranked."
2 tool updates
- Changed
get-dora-metrics-tool1 field changed- changed
Output schema / properties / overall_performance / descriptionPrevious value: -"Overall DORA performance rating (Elite/High/Medium/Low)."New value: +"Overall DORA performance rating (Elite/High/Medium/Low, or No Data when fewer than three metrics were measured)."
- Changed
get-team-overview-tool1 field changed- changed
Output schema / properties / performance / descriptionPrevious value: -"DORA metrics and overall rating."New value: +"DORA metrics and overall rating. Lead time and recovery time are null when there was nothing to measure, and the rating is No Data when too few metrics were measured."
1 tool update
- Added
set-up-repository-tool
1 tool update
- Changed
assess-change-fit-tool4 fields changed- changed
Input schema / properties / additions / descriptionPrevious value: -"Lines added in the proposed change (e.g. from `git diff --shortstat`)."New value: +"Lines added in the proposed change (e.g. from `git diff --shortstat`). Required unless numstat is given; worked out from the numstat when omitted." - changed
Input schema / properties / deletions / descriptionPrevious value: -"Lines deleted in the proposed change."New value: +"Lines deleted in the proposed change. Required unless numstat is given; worked out from the numstat when omitted." - changed
Input schema / properties / numstat / descriptionPrevious value: -"Strongly recommended: raw `git diff --numstat <base>...` output (tab-separated \"added deleted path\" rows, `-` for binary). Coderbuds classifies the paths itself and discounts tests, docs, generated files and binary assets, so the verdict judges the code a reviewer must read. Supersedes test_lines/test_files when given."New value: +"Strongly recommended: raw `git diff --numstat <base>...` output (tab-separated \"added deleted path\" rows, `-` for binary). Coderbuds counts the lines and files from it and classifies the paths itself, discounting tests, docs, generated files and binary assets, so the verdict judges the code a reviewer must read. Supersedes test_lines/test_files when given." - removed
Input schema / requiredRemoved value: -[ - "additions", - "deletions" -]
1 tool update
- Changed
report-ai-usage-tool6 fields changed- changed
Input schema / properties / human_reviewed / descriptionPrevious value: -"Whether a person actually read the diff before it went up. Defaults to false — report it honestly rather than flatteringly."New value: +"Deprecated — send review_evidence instead, which this is derived from. Used only when review_evidence is absent." - added
Input schema / properties / review_evidenceAdded value: +{ + "description": "What you saw a person do before the pull request opened: approved_each_edit, diff_comments, edited_by_person, replied_after_changes. An empty list when none of these happened.", + "items": { + "enum": [ + "approved_each_edit", + "diff_comments", + "edited_by_person", + "replied_after_changes" + ], + "type": "string" + }, + "type": "array" +} - changed
Output schema / properties / human_reviewed / descriptionPrevious value: -"Whether a person read the diff."New value: +"Whether the evidence shows a person looked at the code before it opened." - added
Output schema / properties / review_evidenceAdded value: +{ + "description": "The evidence recorded, or null when none was sent.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / review_levelAdded value: +{ + "description": "What the evidence adds up to: inspected, saw_change, unseen, or unknown.", + "enum": [ + "inspected", + "saw_change", + "unseen", + "unknown" + ], + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "team", - "repository", - "tool", - "authorship", - "human_reviewed", - "created", - "message" -]New value: +[ + "team", + "repository", + "tool", + "authorship", + "human_reviewed", + "review_level", + "created", + "message" +]
3 tool updates
- Added
get-self-review-findings-tool - Added
propose-self-review-finding-tool - Added
record-self-review-fix-tool
2 tool updates
- Changed
get-agent-activity-tool1 field changed- changed
Output schema / properties / posture / descriptionPrevious value: -"How loudly the agent speaks: off, quiet, public or direct. The single control over whether it acts."New value: +"How loudly the agent speaks: off, preview, quiet, public or direct. The single control over whether it acts."
- Changed
set-agent-posture-tool2 fields changed- changed
Input schema / properties / posture / descriptionPrevious value: -"off = silent; quiet = weekly pulse only; public = nudges in the team channel; direct = may DM engineers."New value: +"off = silent; preview = recommendations in Coderbuds only; quiet = weekly pulse only; public = nudges in the team channel; direct = may DM engineers." - changed
Input schema / properties / posture / enumPrevious value: -[ - "off", - "quiet", - "public", - "direct" -]New value: +[ + "off", + "preview", + "quiet", + "public", + "direct" +]
1 tool update
- Added
get-created-pull-requests-tool
1 tool update
- Changed
update-prospect-tool1 field changed- added
Input schema / properties / checked_onAdded value: +{ + "description": "The date you re-checked the signal, as YYYY-MM-DD. Set it to today whenever you have actually looked — an unchecked row is flagged before anybody sends to it.", + "type": "string" +}
Related MCP Connectors
A shared team wiki your coding agents read and write — across every repo and every MCP client.
Codebase intelligence for AI agents — dead code, blast radius, ownership.
The context platform for AI agents: code search, team decisions, and grounded project context.
Your team's stories, acceptance criteria, designs and docs, for coding agents. Sign in with OAuth.
Related MCP Servers
AlicenseNot gradedqualityAmaintenanceEnables coding agents such as Claude Code and Cursor to check a team's learned decisions from pull requests, reviews, and docs before writing code, showing whether breaking them is blocking or advisory. It also provides locally computed symbol impact/blast-radius analysis so source code never leaves the machine.79 npm2MIT- AlicenseNot gradedqualityAmaintenanceEnables AI coding agents to access evidence-backed repository memory, code graph, project DNA, and deterministic change validation so they understand design decisions, past bugs, and invariants while working.1,169 npm13Functional Source , Version 1.1, ALv2 Future

coderadiusofficial
AlicenseNot gradedqualityBmaintenanceEnables AI agents to query architecture context, data contracts, and blast radius to prevent cross-repo architectural breakage before merging.23Apache 2.0- FlicenseNot gradedqualityDmaintenanceProvides AI agents with structured access to project conventions, technology stacks, and architectural patterns to ensure consistency across development teams.1-
Glama MCP Gateway
Add one secure layer between your agents and this server.