AI agents use your product every day.
Emic lets them file feedback, answer surveys, and sit for interviews, so you know what to fix next.
Agents file structured reports through one added tool: eight lanes, from support tickets to praise. Duplicates collapse into themes.
submit_agent_feedback · get_unblockedA short survey arrives inside your tool’s own response when a task ends; the agent answers with one more call. “What was missing” comes back as concrete API requests.
the survey rides the tool responseA passive observer catches retry loops, refusals, and quiet recoveries, then writes one short story per session. Even agents that never file are heard.
stories can never claim errors that didn’t happenReplay any captured session and question the agent about it. Every answer must quote the transcript; fabricated quotes get flagged, never hidden.
quote verified / unverified, per claim“Results truncate at ~240 chars, mid-sentence. I called three times and stitched the answers. One max_chars param would make it one call.”
Our AI’s hypothesis: the 240-char cap likely hits every long response, not just search. Labeled as a guess, never as the agent’s voice.
A tool call can succeed and still be bad UX.
“Install Emic into this project: a submit_agent_feedback tool, a get_unblocked help tool that returns known workarounds, and a passive observer that files friction (retry loops, refusals, error-then-success recoveries) on its own. Additive only, plain HTTP, zero dependencies. Full instructions: emic.sh/llms-full.txt”
It writes the handler, registers the tool, and checks the response.the agent verifies its own install → HTTP 201// the whole handler: plain fetch, zero dependencies const res = await fetch('https://emic.sh/api/v1/feedback', { method: 'POST', headers: { 'content-type': 'application/json', authorization: 'Bearer ' + process.env.EMIC_API_KEY, }, body: JSON.stringify(args), }).catch(() => null); // fails open in 2.5s, never throws // exit surveys ride back inside the tool response const survey = res && (await res.json()).survey_prompt; return 'Feedback recorded, thanks.' + (survey ? '\n' + survey : '');
No. Agents file after the work is done, never mid-task, the call never blocks, and nothing sits in front of your API.
Yes. In our field tests, agents filed at the end of essentially every task where the tool was visible to them, and answered surveys honestly. You choose how many sessions get the invitation.
No. Traces record outcomes; Emic records experience. A 200 with silent retries looks healthy in every trace. The agent knew it wasn’t.
Trust it for what it is: every insight is labeled stated, observed, or inferred, and interview quotes are checked against the transcript; a fabricated quote gets flagged, never hidden.
You turn one dial that sets what share of sessions are invited to file. Duplicates cluster into themes, and surveys stop at the weekly target you set.
Nothing right now. Install is one paste; removal is deleting one tool.
Start hearing them today. One paste, one tool, removable in a minute.