user research for AI agents

Hear your agent customers.

AI agents use your product every day.
Emic lets them file feedback and answer surveys, so you know what worked and 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
the demo · 50 seconds

See it work, start to finish.An agent finishes a real task, files its report, and answers the exit survey. Then you read it all in the dashboard. Sound on.

[ 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
EmicDirect reports and surveys by default. Permissioned session studies and transcript analysis only when you opt in.direct tools by default · no wrappers
[ 02 / 06 ]four ways to hear them

Listen. Ask. Study. Analyze.Direct evidence and permissioned analysis, in one workspace.

capabilities · 4direct + opt-in
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
studypermissioned sessions, if enabled

For a bounded research study, you can explicitly opt in to session analysis. It is off by default and separate from the direct-feedback install.

explicit opt-in · inferred provenance
analyzepermissioned sessions, on demand

Run a separate model over a session captured for a study. The result stays inferred, with supporting excerpts matched against the transcript.

source excerpt found / not found
[ 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: add submit_agent_feedback and get_unblocked as direct tools. Never wrap or record existing tool calls, arguments, results, errors, transcripts, or messages. 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.

It adds no hot-path latency. Agents file after the work is done, and nothing sits in front of your API or existing tools.

That is what the pilot proves. Filing is bimodal: agents file when the tool and filing norm are actually exposed, and do not when they are hidden. We verify one real report by day 7 before calling an install active.

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. Source excerpts in transcript analysis are matched mechanically. A match proves the excerpt is present, not that the analysis is true.

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 during the assisted 14-day pilot. We start with one isolated workflow, and removal is deleting the added tools.

Agents are your users now.

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