Borrowing it
Nothing to install: this file belongs to ctxpipe-ai/ctxpipe. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/ctxpipe-ai/ctxpipe/main/.agents/skills/better-auth-security-best-practices/SKILL.mdgit clone --depth 1 https://github.com/ctxpipe-ai/ctxpipeWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/ctxpipe-ai/ctxpipe/better-auth-security-best-practices)<a href="https://agentmods.dev/skills/ctxpipe-ai/ctxpipe/better-auth-security-best-practices"><img src="https://agentmods.dev/badge/skills/ctxpipe-ai/ctxpipe/better-auth-security-best-practices/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/ctxpipe-ai/ctxpipe/better-auth-security-best-practices"><img src="https://agentmods.dev/badge/skills/ctxpipe-ai/ctxpipe/better-auth-security-best-practices.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00059 | $0.03909 |
| Opus 5.5 | $0.00024 | $0.01564 |
| Sonnet 5.5 | $0.00012 | $0.00782 |
| Haiku 4.5 | $0.00006 | $0.00391 |
Grade A, and why
better-auth-security-best-practices scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 645 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Secret Management
The auth secret is the foundation of Better Auth's security. It's used for signing session tokens, encrypting sensitive data, and generating secure cookies.
Configuring the Secret
import { betterAuth } from "better-auth";
export const auth = betterAuth({
secret: process.env.BETTER_AUTH_SECRET, // or via `BETTER_AUTH_SECRET` env
});
Better Auth looks for secrets in this order:
options.secretin your configBETTER_AUTH_SECRETenvironment variableAUTH_SECRETenvironment variable
Secret Requirements
Better Auth validates your secret and will:
- Reject default/placeholder secrets in production
- Warn if the secret is shorter than 32 characters
- Warn if entropy is below 120 bits
Generate a secure secret:
openssl rand -base64 32
Important: Never commit secrets to version control. Use environment variables or a secrets manager.
Rate Limiting
Rate limiting protects your authentication endpoints from brute-force attacks and abuse.
By default, rate limiting is enabled in production but disabled in development. To explicitly enable it, set rateLimit.enabled to true in your auth config.
Better Auth applies rate limiting to all endpoints by default.
Each plugin can optionally have it's own configuration to adjust rate-limit rules for a given endpoint.
Default Configuration
import { betterAuth } from "better-auth";
export const auth = betterAuth({
rateLimit: {
enabled: true, // Default: true in production
window: 10, // Time window in seconds (default: 10)
max: 100, // Max requests per window (default: 100)
},
});
Storage Options
Configure where rate limit counters are stored:
rateLimit: {
storage: "database", // Options: "memory", "database", "secondary-storage"
}
memory: Fast, but resets on server restart (default when no secondary storage)database: Persistent, but adds database loadsecondary-storage: Uses configured secondary storage like Redis (default when available)
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 645 lines · 59 tokens per session scan A 5124e42ccce3
better-auth-security-best-practices is a skill published in the GitHub repository ctxpipe-ai/ctxpipe (27 stars, last pushed today), licensed MIT. It adds 59 tokens to every session and 3,909 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
setup-open-index
Install and configure Open Index as the read/write context layer for a domain-specialized agent. Use when setting up a legal, marketing, customer support, sales, infrastructure, or other domain agent with Open Index over MCP.
edit-brain
How to add or edit knowledge in this brain — define doctypes, add or update entities, and correlate them with relationships. Use whenever the user asks to add/update knowledge, define a concept, record a learning, or link two things in the brain.
bcc-plan-spar
BCC align+lock+review PLAN.md for one slice (no product code). Slash: /bcc-plan-spar · chat: bcc:plan-spar · "lock PLAN" · spar the plan. Args: rounds=N (auto-review cap), review=self|subagent|cli|auto|off. Grill until clear enough (no default Q&A quota). Hand off to bcc-clean-cut after human APPROVE.
bcc-throughline
BCC global progress cockpit (plans.md/progress.md/findings.md). Slash: /bcc-throughline · chat: bcc:throughline · "where are we" · reprioritize · resume after /clear. Not for coding or full PLAN grill.
bcc-breaking-coding-chaos
BCC main skill: dual-loop coding workflow (throughline → plan-spar → clean-cut) or quick status+next. Slash: /bcc-breaking-coding-chaos · chat: bcc:breaking-coding-chaos · "run BCC" · "BCC status" · "what next BCC". Needs a real idea (1:1 implement). Args: goal text, or status. May pass plan-spar review budget as…
bcc-clean-cut
BCC minimal implement from locked PLAN.md (ponytail ladder + verify). Slash: /bcc-clean-cut · chat: bcc:clean-cut · "implement PLAN" after human APPROVE. Not for plan grill (use bcc-plan-spar).