better-auth-core — Claude Code skill: Better Auth setup
A skill for wiring Better Auth into TypeScript apps: the instance, server handlers, client, and sessions. Useful when you need auth running without digging through docs.
npx skills add bobmatnyc/claude-mpm-skills --skill better-auth-core -a claude-codeWhat better-auth-core does
The skill walks through the core Better Auth setup: creating an instance with betterAuth, passing a database driver or adapter, mounting a handler, and building a client with createAuthClient. It ships a six-step checklist plus TypeScript code samples.
Server-side calls get their own section. You call auth.api.* with { body, headers, query }, add asResponse: true when you need a Response object, and returnHeaders: true to read Set-Cookie. Sessions are covered from both ends: authClient.useSession() or authClient.getSession() in the browser, auth.api.getSession({ headers }) on the server.
Two environment variables are required up front: BETTER_AUTH_SECRET at 32 characters or more, and BETTER_AUTH_URL. Change the /api/auth base path and you must hand the full base URL to the client too, or requests land in the wrong place. Plugins that need tables want migrations run first. The skill also tells you to export the instance as auth, since helpers look for that name.
What it helps with
- stand up a Better Auth instance with a database and env vars
- mount the server handler in a framework
- read the session on both client and server
- call a server method like email sign-in and grab the response headers
- infer types from the instance and client with
$Infer
Example prompts for the agent
- Set up Better Auth in this project: create
auth.ts, wire the database and email/password - Show me how to get the session on the server with
auth.api.getSessionand request headers - How do I infer types from
authandauthClientin TypeScript?
How to install better-auth-core
1Skills CLI (Vercel)
npx skills add bobmatnyc/claude-mpm-skills --skill better-auth-core -a claude-code2Manually: put the files in place
~/.claude/skills/better-auth-core/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/better-auth-core/
1Skills CLI (Vercel)
npx skills add bobmatnyc/claude-mpm-skills --skill better-auth-core -a codex2Manually: put the files in place
.agents/skills/better-auth-core/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add bobmatnyc/claude-mpm-skills --skill better-auth-core -a cursor2Manually: put the files in place
.cursor/skills/better-auth-core/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install bobmatnyc/claude-mpm-skills better-auth-core2Manually: put the files in place
.github/skills/better-auth-core/SKILL.md1Skills CLI (Vercel)
npx skills add bobmatnyc/claude-mpm-skills --skill better-auth-core -a gemini-cli2Platform CLI
gemini skills install https://github.com/bobmatnyc/claude-mpm-skills --path toolchains/platforms/auth/better-auth/better-auth-coreManually: put the files in place
.devin/skills/better-auth-core/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add bobmatnyc/claude-mpm-skills --skill better-auth-core -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about better-auth-core
How do I install better-auth-core in Claude?
Run npx skills add bobmatnyc/claude-mpm-skills --skill better-auth-core -a claude-code. The skill file then lands at ~/.claude/skills/better-auth-core/SKILL.md.
What does better-auth-core do?
It guides Better Auth setup in a TypeScript app: creating the instance, connecting a database, mounting the handler and client, and working with sessions and server-side API methods.
What do I need before using the skill?
BETTER_AUTH_SECRET of at least 32 characters and BETTER_AUTH_URL. If you enable plugins that need tables, run migrations first.
Source text
SKILL.md · MIT
---
name: better-auth-core
description: Better Auth core setup for TypeScript apps. Use when configuring the Better Auth instance, wiring server handlers and client instances, working with sessions, or calling server-side auth APIs.
user-invocable: false
disable-model-invocation: true
progressive_disclosure:
entry_point:
summary: "Better Auth core setup for TypeScript apps. Use when configuring the Better Auth instance, wiring server handlers and client instances, working with sessions, or calling server-side auth APIs."
when_to_use: "When implementing authentication, authorization, or security."
quick_start: "1. Review the core concepts below. 2. Apply patterns to your use case. 3. Follow best practices for implementation."
references:
- client-server.md
- setup-database.md
- typescript.md
---
# Better Auth Core (TypeScript)
## Goals
- Set up a Better Auth instance with environment variables and data layer wiring.
- Wire server handlers and a client instance.
- Use sessions and server-side API methods safely.
- Keep data-layer choices pluggable (drivers or adapters).
## Quick start
1. Install `better-auth`.
2. Set `BETTER_AUTH_SECRET` (32+ chars) and `BETTER_AUTH_URL`.
3. Create `auth.ts` and export `auth`.
4. Provide `database` (driver or adapter) or omit for stateless sessions.
5. Mount a handler (`auth.handler` or a framework helper).
6. Create a client with `createAuthClient`.
```ts
import { betterAuth } from "better-auth";
export const auth = betterAuth({
database: myDatabaseOrAdapter, // driver or adapter; omit for stateless mode
emailAndPassword: { enabled: true },
socialProviders: {
github: {
clientId: process.env.GITHUB_CLIENT_ID as string,
clientSecret: process.env.GITHUB_CLIENT_SECRET as string,
},
},
});
```
## Core setup checklist
- Export the instance as `auth` (or default export) so helpers find it.
- Keep `BETTER_AUTH_URL` in sync with the public base URL.
- Pass the full base URL to the client if you change the `/api/auth` base path.
- Add database migrations before enabling plugins that require tables.
## Server API usage
- Call server endpoints via `auth.api.*` with `{ body, headers, query }`.
- Use `asResponse: true` if you need a `Response` object.
- Use `returnHeaders: true` to access `Set-Cookie` headers.
```ts
import { auth } from "./auth";
const session = await auth.api.getSession({
headers: request.headers,
});
const response = await auth.api.signInEmail({
body: { email, password },
asResponse: true,
});
```
## Session access
- Client: `authClient.useSession()` or `authClient.getSession()`.
- Server: `auth.api.getSession({ headers })`.
## TypeScript tips
- Infer types with `auth.$Infer` and `authClient.$Infer`.
- Use `inferAdditionalFields` on the client when you extend the user schema.
## References
- `toolchains/platforms/auth/better-auth/better-auth-core/references/setup-database.md`
- `toolchains/platforms/auth/better-auth/better-auth-core/references/client-server.md`
- `toolchains/platforms/auth/better-auth/better-auth-core/references/typescript.md`
© bobmatnyc · MIT · bobmatnyc/claude-mpm-skills