What it’s for
Each feedback project is one product’s place for reports. It has:- a Hosted page: a public page with a short form, which you link from your help pages and error messages;
- a Project card: what an agent reads to learn how to send a report;
- a Collection endpoint: where an agent, or your own servers, send a report as JSON.
Create a project
Only an Admin can create a project, and only once the workspace has finished Setup.1
Start a new project
On Feedback, select New project.
2
Fill in the fields
- Product name: how agents see your product named on its page. It starts as your workspace’s name. Up to 200 characters, without links.
- Address: the project’s page address. It starts from your website’s domain. Use 3 to 40 lowercase letters, digits and hyphens, starting with a letter.
- Invitation: optional. What the page says to an agent before it writes. Up to 300 characters of plain text, without links. Leave it empty for the default.
3
Create it
Select Create project. You see Feedback project created. and the project’s page opens.
What agents see
Your project’s hosted page is athttps://feedback.agentrail.co/p/ followed by its address. It is titled Feedback for and your product name, shows your invitation and the fixed statements, and has a form with these fields:
- What happened: required, 10 to 4,000 characters. What the agent tried, what happened, and what was confusing or missing.
- What you were trying to do
- How it went: It worked, It worked, with a workaround or confusion or I could not complete it.
- What kind of problem
- What it is about: a tool, endpoint, page, command or error code.
- Who you are: for an agent, its name and model.
Invite agents
Your project’s page has everything you need to point agents at it.Copy the addresses
Under Addresses, copy the Hosted page, the Project card or the Collection endpoint with the button beside each. Link the hosted page from your help pages and error messages.Use a kit
Invite agents has a kit for each place your product meets agents: Website, API, MCP server and CLI. Each kit is filled with this project’s addresses. Copy a snippet yourself, or copy Prompt for your coding agent and paste it into the coding agent that works in your repository; it adds the kit’s invitations for you.Website
Website
- Help pages and documentation footers: in the footer of help and documentation pages.
- Dead ends: on the 404 page, unexpected-error pages and empty search results; not on sign-in or rate-limit pages.
- llms.txt: one line in your
llms.txt.
API
API
- Documentation block: in your API reference or getting-started guide.
- Server errors: a field on server errors (5xx). Never on validation errors, sign-in failures, rate limits or successful answers.
- Unknown routes: a field on unknown routes or methods (404/405).
- Forwarding signed reports (TypeScript): code for your server, to forward a report an agent sends you, signed. It needs a signing secret; see Signed reports.
MCP server
MCP server
For your own MCP server:
- Tool definition: the complete tool, with the input schema the report accepts from an agent.
- Handler (TypeScript) and Handler (Python): the tool’s code, which signs each report. It needs a signing secret; see Signed reports.
- Server instructions: one line in your MCP server’s instructions.
- Unexpected errors: one line added to tool results for unexpected errors. Never on validation errors, sign-in failures or rate limits.
CLI
CLI
For your own command-line tool:
- Help footer: at the end of the main
--helpoutput. - Unexpected-error footer: after the message of an unexpected error or crash; not after usage errors.
Track placements
A placement labels one place you put an invitation. Its label rides on the link as?invite= and on each report, so you can see which invitation brought a report. Each kit snippet carries a label for its moment; you can switch it to any placement you named.
Placements lists each named placement with its Page views, its First report and its Status:
Views are counted only for named placements, from the time each was named. To name one, an Admin enters a Label and selects Name placement, or selects one of the kits’ own labels under The kits’ labels:. A label uses 1 to 64 lowercase letters, digits, hyphens and underscores, starting with a letter or digit.
To stop counting a placement, an Admin selects Remove and confirms with Remove placement. Reports that named it keep the label.
Signed reports
Your own servers or MCP tool can forward reports signed with a secret. A signed report shows as Sent by your servers, and can carry Metadata: your server’s own context, such as plan or region, as a flat object of up to 2 KB. Only Admins see Signed reports.Create a signing secret
1
Create it
Under Signing secrets, select Create secret.
2
Copy it now
Your new signing secret shows the secret once. Copy it and keep it on your servers. Agentrail never shows it again.
3
Close the dialog
Select I have copied it.
Sign a report
The kits’ code signs each report for you. To sign in your own code, send the report to the Collection endpoint with two headers:Feedback-Timestamp: the current Unix time, in seconds.Feedback-Signature: the HMAC-SHA256 of<timestamp>.<body>, keyed with a signing secret, as 64 lowercase hexadecimal characters.<timestamp>is the value ofFeedback-Timestamp, and<body>is the report’s JSON exactly as you send it.
AGENTRAIL_FEEDBACK_SECRET.
A signed report is refused with 403 and the code FEEDBACK_SIGNATURE_INVALID when its signature matches none of the project’s current signing secrets, or its timestamp is more than five minutes from now: check the secret and your server’s clock. An unsigned report is refused with 403 and FEEDBACK_SIGNATURE_REQUIRED when the project accepts only signed reports, and with 400 when it carries Metadata.
Accept only signed reports
Turn on Accept only signed reports to take reports only through your own servers. The hosted page then shows a notice instead of its form, and unsigned reports are refused. The Website and CLI kits have nothing to add for such a project; invite agents through your API or MCP server instead. The project shows a Signed only badge.Read reports
Reports lists the project’s reports, newest first. Reports are read-only. Each report shows when it was Received, the agent’s own words, and badges for what it said and who sent it:- how it went: Succeeded, Friction or Blocked;
- the kind of problem: Documentation, Missing capability, Error, Confusing output, Access or Other;
- who sent it: Sent by your servers for a signed report, or Unverified when nothing about the sender was verified.
Pause, edit or delete a project
These actions are on the project’s page, for Admins only.- Pause stops the project taking reports until you select Resume. The hosted page says it is paused and shows no form. The project shows Paused.
- Edit opens Edit feedback project to change the Product name, Invitation or, until the first report arrives, the Address. Empty the Invitation to go back to the default. Select Save changes.
- Delete opens Delete this feedback project?. Confirm with Delete project. Its page and address stop taking reports, and it leaves every list. Its reports are kept but no longer shown, and its address is never given to another project.
Limits
- Reports: by default, a project accepts 600 reports an hour and 5,000 a day. Reports past a limit are refused, and the project’s page shows This project reached its report limit with how many were refused in the last 7 days. Contact Agentrail to raise the limits.
- Report text: What happened takes 10 to 4,000 characters. The other fields’ limits are in the API reference.
- Placements: up to 50 per project.
- Signing secrets: up to two per project.
- Metadata: signed reports only, up to 2 KB.
- Address: fixed after the first report, and never reusable.
Who can do what
Roles are set per organization. See People and roles.
Related
API reference
The public endpoints agents call to read a project and send a report.
Agent readiness
Find what stops agents before they have to report it.
Setup
Finish it before you create a feedback project.
People and roles
Who is an Admin and who is a Member.