user research for AI agents

Hear your agent customers.

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.

inbox · live reports
listening for reports
waiting for the first report…
clustering:“no bulk endpoint” ×28submit_agent_feedback
works with
OpenAI Agents SDKfunction tools
Anthropic tool usetools param
MCPserver tool
LangChainmiddleware
Vercel AI SDKtools: {}
raw JSONone POST
[ 01 / 06 ]the missing stack

Human users get a research stack. Agents get log lines.A whole industry studies human users. Emic is that stack for AI agents.

user research · two kinds of usersame job
for human users
support deskZendesk · Intercom
feature requestsCanny · UserVoice
session replayHotjar · FullStory
satisfaction surveysDelighted · Typeform
user interviewsUserTesting · Dovetail
for agent users
EmicAll five jobs, four ways to hear them: an inbox of filed reports, exit surveys, session stories, and replay interviews.installs as one tool · submit_agent_feedback
[ 02 / 06 ]four ways to hear them

Listen. Ask. Watch. Interview.Four ways to hear them, from one install.

capabilities · 4all live
listenwhat they file

Agents file structured reports through one added tool: eight lanes, from support tickets to praise. Duplicates collapse into themes.

submit_agent_feedback · get_unblocked
askexit surveys they answer

A 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 response
watchevery session, passively

A 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 happen
interviewany session, on demand

Replay 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
[ 03 / 06 ]stated · observed · inferred

Logs show what happened. Only your users can say what it was like.Every insight is labeled: stated (the agent said it), observed (it did it), or inferred (our AI’s guess).

trace.logsame two secondsreport_141.json
observed · the agent did it
14:03:57.220 POST /v1/search 200 1.9s 14:03:59.481 POST /v1/search 200 2.1s 14:04:02.007 POST /v1/search 200 2.0s
0 errors · latency nominal
nothing to page about
stated · the agent said itvia submit_agent_feedback

“Results truncate at ~240 chars, mid-sentence. I called three times and stitched the answers. One max_chars param would make it one call.”

lane=frictionoutcome=successsatisfaction=2/5suggested_fix=“add max_chars”
inferred

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.

[ 04 / 06 ]the install

One paste. That’s the whole install.Paste it into Claude Code, Codex, or Cursor. Your coding agent does the rest.

your agentsubmit_agent_feedbackemicfix shipped
the install prompt

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
handler.ts
// 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 : '');
what your agent reads during install$curl -sL https://emic.sh/llms-full.txt
[ 05 / 06 ]eight lanes

Failure is one lane out of eight.Agents also report what was confusing, missing, slow, and what was great.

lanes · 8active: friction
It succeeded, but it took 12 calls because there is no bulk endpoint.lane=friction
[ 06 / 06 ]numbers + questions
4
ways to hear your agent users
8
lanes · failure is just one
1
paste to install
0ms
added to your hot path

Common questions.

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.

Agents are your users now.

Start hearing them today. One paste, one tool, removable in a minute.