Quickstart
There are two install paths. Both produce the same configuration. Pick the one that matches how you work.
Agent-driven (recommended)
The fastest path. Your coding agent reads our Agent Skill, runs OAuth, creates a project, drops in the snippet, and submits a test recording. Wall-clock: under 5 minutes.
Claude Code
claude plugin marketplace add earshot/earshot
Then, in your repo:
> use earshot to add user feedback to this app
The agent will:
- Run OAuth Dynamic Client Registration against
https://earshot.dev/oauth/.well-known/oauth-authorization-server. - Open a consent page where you pick the team + tool scope.
- Call
create_teamandcreate_projectover MCP, store the returnedpk_*API key in.env.local. - Detect your framework (Next, Remix, SvelteKit, Vue, etc.) and drop the snippet into the right place.
- Wire
identify({ userId, email, name })into your auth callback. - Offer to connect PostHog and Linear (
set up earshot integrations). - Submit a test recording and confirm it landed.
Cursor
Wire Cursor to the Earshot MCP with a bearer token, drop the rules file, and let Cursor's agent install the widget — full walkthrough at Cursor.
Codex / other agents
Add the MCP server entry to your agent's config:
{
"mcpServers": {
"earshot": {
"type": "http",
"url": "https://mcp.earshotbot.com/mcp",
"headers": { "Authorization": "Bearer pk_your_project_key" }
}
}
}
Then copy skills/earshot*/SKILL.md into your agent's skills directory and prompt: "Use the earshot skill to add user feedback." OAuth DCR (no static key) is in progress and will replace the bearer header for clients that support it.
Manual
If you'd rather click through:
- Sign up at dashboard.earshot.dev — magic link, no password.
- Name your team and your first project.
- Copy the
pk_*API key (shown once). - Drop into your
<head>:
<script>
(function () {
var s = document.createElement('script');
s.src = 'https://cdn.earshotbot.com/v1/earshot.iife.js';
s.async = true;
s.onload = function () {
window.Earshot.init({
projectId: 'prj_yourproject',
apiKey: 'pk_live_xxxxxxxxxxxxxxxx',
});
};
document.head.appendChild(s);
})();
</script>
The bundle exposes window.Earshot once it finishes loading; calling init from inside onload guarantees the global is ready regardless of framework (Next.js / SvelteKit / Nuxt all process inline <script> tags differently — this self-contained loader sidesteps the ordering).
- When the user signs in, identify them:
Earshot.identify({
userId: user.id,
email: user.email,
name: user.name,
});
- On logout, reset:
Earshot.reset();
That's it. Click the launcher in the bottom-right, speak for 20 seconds, see the entry land in your inbox.
Next steps
- Wire integrations — connect PostHog for replay links + flags, and Linear/Jira for ticket sync.
- Push project context — give the enrichment LLM your routes, glossary, and known issues so the generated title + summary read in your product's own terminology.
- Browse MCP tools — every dashboard action is also a tool call.