Skip to main content
skill CX Codex

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.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add bobmatnyc/claude-mpm-skills --skill better-auth-core -a claude-code
Open on GitHub

What 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.getSession and request headers
  • How do I infer types from auth and authClient in TypeScript?

How to install better-auth-core

1Skills CLI (Vercel)

npx skills add bobmatnyc/claude-mpm-skills --skill better-auth-core -a claude-code

2Manually: put the files in place

~/.claude/skills/better-auth-core/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/better-auth-core/

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

Similar skills

All skills for Backend and APIs →

From the same set66

nextjs-v16 A skill that walks a project through the Next.js 16 migration: async request APIs, opt-in caching with "use cache", Turbopack. Useful when upgrading an existing app. CX Codex +1 371installs testing-anti-patterns A skill for spotting tests that verify mock behavior, add test-only production methods, or use incomplete mocks. CX Codex +1 368installs vercel-deployments-builds Walks through the Vercel deployment lifecycle: builds, previews, release phases and rollback. Useful when you configure build output or control releases. CX Codex +1 368installs stacked-prs A skill that walks the agent through building stacks of dependent pull requests, where each branch grows from the previous one instead of main. Useful when a large feature is split into phases. CX Codex +1 362installs reporting-pipelines A skill that fixes one pattern for report exports: collect data, normalize it, write CSV/JSON/Markdown with timestamped names into reports/. CX Codex +1 354installs fastapi-local-dev A runbook skill for FastAPI: Uvicorn with reload during development, Gunicorn with UvicornWorker in production. CX Codex +1 347installs headlessui A skill covering Headless UI: unstyled React and Vue components with keyboard navigation and ARIA built in. Useful when you want your own design without losing accessibility. CX Codex +1 345installs vercel-networking-domains A skill that walks the agent through Vercel domains, redirects, rewrites, headers and edge cache. Useful when you change traffic behavior rather than app code. CX Codex +1 344installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor