Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
266 commits
Select commit Hold shift + click to select a range
7f063fc
feat: initial Prisma migration (org-scoped projects schema)
LittleHalf Jun 19, 2026
6a83a5f
feat: add idempotent stripe checkout webhook
LittleHalf Jun 19, 2026
68cb6f8
feat: replace Clerk pricing table with credits purchase UI
LittleHalf Jun 19, 2026
385a4f8
feat: show USD balance and free generations in usage widget
LittleHalf Jun 19, 2026
9945a54
fix: address final review (atomic usage ledger, remove stale Pro UI, …
LittleHalf Jun 19, 2026
7bd4afa
fix(e2b): build sandbox template on CLI v2
LittleHalf Jun 19, 2026
0594241
Merge pull request #2 from Skarmy-AI/worktree-stripe-credits
LittleHalf Jun 19, 2026
5a5ede8
fix: unblock production build + clear critical Next.js vuln
LittleHalf Jun 19, 2026
191834b
Merge remote-tracking branch 'origin/main' into feat/org-tenancy-cicd
LittleHalf Jun 19, 2026
67daa5f
fix: integrate stripe-credits with org-tenancy
LittleHalf Jun 19, 2026
496b830
Merge pull request #1 from Skarmy-AI/feat/org-tenancy-cicd
LittleHalf Jun 19, 2026
057e282
docs: refresh CLAUDE.md + gotchas for the integrated, deployed app
LittleHalf Jun 19, 2026
ebaeb14
fix: restore generation — agent-kit 0.13 for inngest 3.54 step compat
LittleHalf Jun 19, 2026
271109b
Merge pull request #5 from Skarmy-AI/fix/agent-kit-inngest-step-compat
LittleHalf Jun 20, 2026
da9cdda
fix(e2b): create cn() utility in template so generated apps build
LittleHalf Jun 20, 2026
8ee3be7
fix(e2b): COPY real utils.ts instead of printf (newlines were mangled)
LittleHalf Jun 20, 2026
943c767
docs: capture 2026-06-19 incident gotchas (agent-kit/inngest/zod + E2…
LittleHalf Jun 20, 2026
8424cc2
Merge pull request #6 from Skarmy-AI/fix/e2b-template-cn-utils
LittleHalf Jun 20, 2026
8d89845
Merge pull request #4 from Skarmy-AI/docs/post-launch-context
LittleHalf Jun 20, 2026
a8f8d19
fix(home): skip projects query for signed-out users
LittleHalf Jun 20, 2026
ac8fab7
feat(agent): move generation to gpt-5.5, widen context, raise iter cap
LittleHalf Jun 20, 2026
ddc71e6
fix(agent): prevent OOM-killed preview server (blank/refused previews)
LittleHalf Jun 20, 2026
8846667
docs: live-agent architecture design (harness-in-E2B, streaming, pers…
LittleHalf Jun 20, 2026
72bbe1c
docs: harden live-agent design — close 9 review blockers + harness co…
LittleHalf Jun 20, 2026
5c667ee
docs: implementation plans — live-agent roadmap, Phase 0 spikes, Phas…
LittleHalf Jun 20, 2026
45350ad
feat(edge): M1 Session/Event/UsageEvent schema + enums
LittleHalf Jun 20, 2026
2637600
feat(edge): M2 Project git/session pointer fields
LittleHalf Jun 20, 2026
ebfc78f
feat(edge): M3 QueuedMessage/PartialSnapshot/ProcessedCommand
LittleHalf Jun 20, 2026
91fdba1
feat(edge): M4 Fragment.commitSha read-model field
LittleHalf Jun 20, 2026
ae10fc3
feat(edge): normalized streaming protocol + EventKind types
LittleHalf Jun 20, 2026
d483728
fix(edge/protocol): wrap JSON.stringify in try/catch in payloadByteSize
LittleHalf Jun 20, 2026
d699fb5
feat(edge): storage port interfaces + in-memory fakes
LittleHalf Jun 20, 2026
ea8ac41
feat(edge): fence-gated seq allocator with Redis-loss reseed
LittleHalf Jun 20, 2026
65e924c
feat(edge): broker core (cmd idempotency + validated event append)
LittleHalf Jun 20, 2026
ac5c252
feat(edge): 3-tier replay with gap-detection full-reload + scenario f…
LittleHalf Jun 20, 2026
877e12e
fix(edge/broker): derive KNOWN_KINDS from exhaustive Record<EventKind…
LittleHalf Jun 20, 2026
9e23930
feat(edge): budget store port + fakes (fail-closed primitive)
LittleHalf Jun 20, 2026
b9608d2
feat(edge): gateway authorizer (org-isolation + caps + fail-closed)
LittleHalf Jun 20, 2026
cb2249a
fix(gateway): validate token.projectId, fail-closed balance lookup, d…
LittleHalf Jun 20, 2026
91081c0
feat(edge): gateway meter (idempotent UsageEvent + fail-closed budget…
LittleHalf Jun 20, 2026
dd65fa8
fix(billing): prevent addSpend double-count on replay; fail-closed on…
LittleHalf Jun 20, 2026
d739b6c
feat(engine): getEngine flag + session.start legacy|live branch
LittleHalf Jun 20, 2026
c2c8a8b
feat(edge): reusable org-isolation guard (JOIN-through invariant)
LittleHalf Jun 20, 2026
f77495f
feat(edge): attach handler with org-isolation + cross-org reject test
LittleHalf Jun 20, 2026
44eb695
test(edge): extend access-control suite with attach+gateway org-isola…
LittleHalf Jun 20, 2026
b7b3935
refactor(edge): DRY gateway org-isolation via shared assertOrgIsolati…
LittleHalf Jun 20, 2026
6979fa1
Merge pull request #7 from Skarmy-AI/feat/live-agent-phase2a
LittleHalf Jun 20, 2026
700c24d
docs: add harness-team handoff (passitoff.md); ignore SDD scratch dir
LittleHalf Jun 20, 2026
2f8d42a
docs(plan): live-agent integration-milestone plan (phase 1/2 slice)
LittleHalf Jun 20, 2026
2cb0465
feat(edge): in-sandbox adapter — socket client + native→EventKind nor…
LittleHalf Jun 20, 2026
dc7d652
feat(edge): prisma store, read-model mirror, driver lease, dispatch, …
LittleHalf Jun 20, 2026
1a146fb
feat(live): session.start seam — startSession service + sessions tRPC…
LittleHalf Jun 20, 2026
1f3f414
test(edge): Initial Integration Milestone proof (§20.14) + lint green
LittleHalf Jun 20, 2026
ab48cbb
docs: passitoff status — P0 + adapter delivered, milestone proven in-…
LittleHalf Jun 20, 2026
28411bd
Merge pull request #8 from Skarmy-AI/feat/live-agent-phase2a
LittleHalf Jun 20, 2026
afb6e31
spike(phase0): scaffolding — config, e2b helper, result-writer, spike…
LittleHalf Jun 20, 2026
dfc5ece
spike(0.1): RSS/image script + threshold test (run pending template b…
LittleHalf Jun 20, 2026
5e8c012
spike(0.1): PASS — peak RSS 537MB vs 8GiB ceiling; fix template build…
LittleHalf Jun 20, 2026
f5df1b1
spike(0.2): PASS — pause/resume fs-integrity 6/6 (E2B #884 absent); R…
LittleHalf Jun 20, 2026
da05a6a
spike(0.3): PASS — adapter streams 5 deltas + RUN_ENDED over unix soc…
LittleHalf Jun 20, 2026
5d148bd
spike(0.4): PASS — browser<->sandbox WSS handshake + echo round-trip …
LittleHalf Jun 20, 2026
9f06c27
spike(0.5): gateway shim + runner (code) — pending ANTHROPIC_API_KEY …
LittleHalf Jun 20, 2026
5dd983f
spike(0.6): PASS — preview proxy dual-gate auth + streaming + securit…
LittleHalf Jun 20, 2026
146fa65
spike(phase0): roll-up — cold-start 19.4s (<40) + interim SUMMARY (5/…
LittleHalf Jun 20, 2026
6c74cd0
spike(0.5)+rollup: PASS — gateway p99 3ms, cache 0.948, usage 0%; Pha…
LittleHalf Jun 20, 2026
d24b40d
plan(live): real integration milestone (§20.14) — real harness in E2B…
LittleHalf Jun 20, 2026
9f41d42
integ(A): PASS — vibe-live-integ template (node24 + claude CLI + real…
LittleHalf Jun 20, 2026
ea30ea2
integ(B): PASS — claude in sandbox reaches model via gateway tunnel, …
LittleHalf Jun 20, 2026
ac08036
integ(C): PASS — real claude->harness->adapter e2e: stream + tool cal…
LittleHalf Jun 20, 2026
8947e03
integ(E+F): PASS — checkpoint->restart->resume + workspace continuity…
LittleHalf Jun 20, 2026
7f8ed25
docs: handoff — real integration milestone DONE (§20.14 hard gate pas…
LittleHalf Jun 20, 2026
421c273
docs: add Skarmy agent harness spec
ChunkyMonkey11 Jun 21, 2026
b074582
Merge pull request #9 from Skarmy-AI/feat/live-agent-phase0-spikes
LittleHalf Jun 21, 2026
c58ffee
fix(security): gateway shim SSRF (CWE-918) — fixed upstream host, all…
LittleHalf Jun 21, 2026
9e67769
Merge pull request #10 from Skarmy-AI/feat/live-agent-real-integration
LittleHalf Jun 21, 2026
ddc95bb
chore: gitignore Neon CLI link file (.neon)
LittleHalf Jun 21, 2026
190b41d
docs(CLAUDE): add live-agent redesign section — pointers, status, run…
LittleHalf Jun 21, 2026
a6f4d9d
feat(skarmy-agent): licensed Agent SDK engine behind the native socke…
LittleHalf Jun 21, 2026
d08c6e7
test(skarmy-agent): socket transport test (NDJSON framing, seq, ack/n…
LittleHalf Jun 21, 2026
f68f988
feat(integration): swap E2B template + scripts to the licensed @skarm…
LittleHalf Jun 21, 2026
2472bb3
fix(skarmy-agent): erasable-only TS so the harness boots under Node n…
LittleHalf Jun 21, 2026
3ffa620
fix(integration): tolerate transient E2B envd timeouts in socket-read…
LittleHalf Jun 21, 2026
b984152
docs(evidence): §20.14 integration milestone ALL PASS on the licensed…
LittleHalf Jun 21, 2026
ed7d0ab
feat(provision): makeProvision — boot E2B sandbox with harness + adap…
LittleHalf Jun 21, 2026
2ef7d2a
feat(provision): wire sessions.start → makeProvision (flag-gated, fir…
LittleHalf Jun 21, 2026
2e5c190
feat(adapter): long-lived in-sandbox adapter WS server (task #7)
LittleHalf Jun 21, 2026
cf29faf
test(integration): Milestone D — prod adapter WS seam on real E2B
LittleHalf Jun 21, 2026
5b397a4
feat(gateway): PrismaUsageSink — idempotent UsageEvent + atomic walle…
LittleHalf Jun 21, 2026
e8362d6
feat(edge): SandboxLink — edge→sandbox dialer pairing the in-sandbox …
LittleHalf Jun 21, 2026
61e9fe7
feat(edge): EdgeSession — per-session run pipeline wiring broker ⇄ Sa…
LittleHalf Jun 21, 2026
63e2b32
feat(edge): EdgeServer — browser-WSS edge service tying auth+broker+S…
LittleHalf Jun 21, 2026
cc4b567
feat(edge): Fly deploy — edge entrypoint + Dockerfile + fly.toml (tas…
LittleHalf Jun 21, 2026
cb0203f
fix(edge): copy prisma schema before npm ci so postinstall `prisma ge…
LittleHalf Jun 21, 2026
70afa82
feat(gateway): signed gateway token + in-memory budget store (task #8…
LittleHalf Jun 21, 2026
a98496a
feat(gateway): inference gateway reverse-proxy service + Fly deploy (…
LittleHalf Jun 21, 2026
9ce0600
feat(provision): real signed gateway token + thread userId through pr…
LittleHalf Jun 21, 2026
2675386
feat(ui): live-session reducer + WS-client hook (task #9 core)
LittleHalf Jun 21, 2026
91b64c0
feat(ui): live-session view + engine switch in ProjectView (task #9)
LittleHalf Jun 21, 2026
755b54c
feat: live-agent engine on the licensed Claude Agent SDK (additive, f…
LittleHalf Jun 21, 2026
a5c0a16
chore(ci): defer edge-package CI job (push token lacks 'workflow' sco…
LittleHalf Jun 21, 2026
3f8ba85
fix(live): await sandbox provisioning in sessions.start (serverless-s…
LittleHalf Jun 21, 2026
0863680
chore(cleanup): remove dead live-engine modules, phase0/integration s…
LittleHalf Jun 21, 2026
56e2adf
docs: correct stale claims (live engine deployed-but-broken, not "not…
LittleHalf Jun 21, 2026
b3e8ecf
refactor(sdk-driver): drop no-op ternary in PostToolUse workspace_cha…
LittleHalf Jun 21, 2026
04da51c
docs(handoff): record cleanup results + unpushed-commits note
LittleHalf Jun 21, 2026
abada6b
fix(live): bake harness+adapter into a prod E2B template; correct boo…
LittleHalf Jun 21, 2026
e808aeb
feat(engine)!: gut the legacy Inngest generator; live engine is the d…
LittleHalf Jun 21, 2026
e8f9a04
docs: rewrite for the post-legacy reality (live engine is the only en…
LittleHalf Jun 21, 2026
a50b156
fix(ui): brand page title + handle nameless users in the Vibes heading
LittleHalf Jun 21, 2026
e88b829
chore(dev): dockerized App+DB dev env + test-account + debug scripts
LittleHalf Jun 21, 2026
96a328d
feat: add CLI scripts for sandbox management and debugging
LittleHalf Jun 21, 2026
c99aadf
chore: drop accidentally-committed debug artifacts (console dump, scr…
LittleHalf Jun 21, 2026
6e36f8d
harden(live): admission ignores stale orphans + throws on cap; start_…
LittleHalf Jun 21, 2026
13283e4
chore(dev): run the app via host 'npm run dev' (instant hot-reload), …
LittleHalf Jun 21, 2026
d95895f
chore(brand): update public logo assets
LittleHalf Jun 22, 2026
ed57769
durable workspace snapshots for Cloudflare R2 object storage, Snapsho…
chanu1406 Jun 22, 2026
04af4ae
dedupe concurrent live sessions per project
chanu1406 Jun 22, 2026
7bb0cc1
docs: design spec for Spectra design adoption
LittleHalf Jun 22, 2026
8d94e02
remove: delete package-lock.json, main.db, and several documentation …
LittleHalf Jun 22, 2026
21f5e0a
refactor: streamline local development setup and update documentation
LittleHalf Jun 22, 2026
ce5f842
docs: implementation plan for Spectra design adoption
LittleHalf Jun 22, 2026
5691ad0
feat(theme): swap to Spectra color/type/space tokens
LittleHalf Jun 22, 2026
15b53b3
feat(theme): expose Spectra tokens, swap warm keyframes for Spectra m…
LittleHalf Jun 22, 2026
c54e8a1
feat(brand): add Spectra glow + Skarmy logo/og/favicon assets
LittleHalf Jun 22, 2026
5526b33
feat(theme): Inter font, dark default, violet Clerk, Skarmy metadata
LittleHalf Jun 22, 2026
c74713b
feat(ds): add design-system stylesheet
LittleHalf Jun 22, 2026
c729d12
feat(ds): port core primitives to typed tsx
LittleHalf Jun 22, 2026
6e5b4b1
feat(ds): port surfaces + inputs to typed tsx
LittleHalf Jun 22, 2026
6493dee
feat(ds): barrel export the design-system kit
LittleHalf Jun 22, 2026
3aab387
feat(home): Skarmy eclipse logo in navbar
LittleHalf Jun 22, 2026
920f0d9
Remove integration scripts and related tests for the adapter runner a…
LittleHalf Jun 22, 2026
1513348
feat(home): Spectra hero + PromptComposer + glow
LittleHalf Jun 22, 2026
92534eb
feat(home): Spectra recent-projects grid
LittleHalf Jun 22, 2026
6c40917
feat(project): Spectra header + preview toolbar
LittleHalf Jun 22, 2026
15c0db2
feat(project): Spectra conversation stream
LittleHalf Jun 22, 2026
9a6cddc
fix(project): keep message composer controlled so text survives faile…
LittleHalf Jun 22, 2026
cdbe9f3
feat(brand): finish Vibe→Skarmy user-facing copy sweep
LittleHalf Jun 22, 2026
7ed38c5
fix(home): de-duplicate hero (single logo/heading/subhead behind glow)
LittleHalf Jun 22, 2026
b53cdcb
fix: add metadataBase for OG; drop vestigial Form wrapper in message-…
LittleHalf Jun 22, 2026
d160471
Merge pull request #11 from Skarmy-AI/feat/spectra-design
LittleHalf Jun 22, 2026
d5c80b6
fix(theme): bump storageKey so dark default applies to returning visi…
LittleHalf Jun 22, 2026
aeba37d
Merge pull request #12 from Skarmy-AI/fix/default-dark-theme
LittleHalf Jun 22, 2026
5ce9731
Add local Docker sandbox path and tighten dev session tooling.
LittleHalf Jun 22, 2026
badcf85
Fix empty-string src on preview iframe (React refetch warning)
LittleHalf Jun 22, 2026
5b05702
Merge simplify-core into origin/main: local Docker engine + Spectra U…
LittleHalf Jun 22, 2026
04d06a0
ci: run tests via 'bun run test' (vitest), not 'bun test' (Bun native…
LittleHalf Jun 22, 2026
95057e0
Merge pull request #13 from Skarmy-AI/integrate/local-engine
LittleHalf Jun 22, 2026
37d230f
fix(deploy): run edge/gateway with bun natively, not 'bunx tsx'
LittleHalf Jun 22, 2026
339b259
fix(deploy): add Fly health checks to gate bad edge/gateway rollouts
LittleHalf Jun 23, 2026
958c44f
retire dead-sandbox sessions on reopen so the snapshot restores
chanu1406 Jun 23, 2026
d18983d
Add resume recap and stop re-running the agent on reload
ChunkyMonkey11 Jun 23, 2026
cc0dba3
Engine-agnostic provisioning + additive harness template build (migra…
ChunkyMonkey11 Jun 23, 2026
eedf43f
Reconcile Vibe protocol mirror + normalizer with harness taxonomy (mi…
ChunkyMonkey11 Jun 23, 2026
48b4ff2
Wire the live preview URL + harness preview signals to the UI (migrat…
ChunkyMonkey11 Jun 23, 2026
125a11c
Guard project creation behind client auth state
ChunkyMonkey11 Jun 23, 2026
6021b62
Add harness migration Mac handoff doc
ChunkyMonkey11 Jun 23, 2026
8350265
Add multi-model gateway routing
chanu1406 Jun 23, 2026
6586b03
feat: route models from project UI
ChunkyMonkey11 Jun 23, 2026
a4614c1
fix: require edge URL for live sessions
ChunkyMonkey11 Jun 23, 2026
ed3c65b
revert: restore main to 8350265 state
ChunkyMonkey11 Jun 23, 2026
ac89779
Fetch real file content for the Code tab in live sessions
chanu1406 Jun 23, 2026
a4015f6
Merge feat/model-routing-on-harness-engine into main
chanu1406 Jun 23, 2026
89b3a82
it works
chanu1406 Jun 23, 2026
6d7901b
feat: show building overlay in preview pane while app server starts
ChunkyMonkey11 Jun 23, 2026
2be22d4
feat: wire up model-config router and commit model routing files
ChunkyMonkey11 Jun 23, 2026
290630b
feat: add model config settings UI at /settings
ChunkyMonkey11 Jun 23, 2026
3a7a8b9
fix: add ModelProviderCredential and modelAlias to Prisma schema
ChunkyMonkey11 Jun 23, 2026
f454519
feat: add project deletion with confirm dialog
ChunkyMonkey11 Jun 23, 2026
9415253
fix(sessions): resume live sessions on revisit instead of rebuilding
chanu1406 Jun 23, 2026
14fb8e1
fix(preview): building overlay while server starts, and file-tree nav…
chanu1406 Jun 23, 2026
a6cb147
doc for local start
chanu1406 Jun 24, 2026
706b6af
feat(live): replace WS edge server with in-process SSE + tRPC
ChunkyMonkey11 Jun 24, 2026
fcea7db
fix(live): carry SSE session token in Authorization header, not query…
ChunkyMonkey11 Jun 24, 2026
18ef7da
feat(preview): smart proxy with auto-start fallback and clearer agent…
ChunkyMonkey11 Jun 24, 2026
52080bf
feat(auth): custom glass sign-in page with Doré painting background
ChunkyMonkey11 Jun 24, 2026
b368c64
feat(discovery): conversational pre-build intake before the build agent
chanu1406 Jun 24, 2026
62a4df4
feat(auth): custom glass sign-up page + SSO callback route
ChunkyMonkey11 Jun 24, 2026
5cb3f28
Merge remote-tracking branch 'origin/main' into Ui/ux
ChunkyMonkey11 Jun 24, 2026
e859082
feat(startup): multi-agent Startup Command Center + comforting discov…
chanu1406 Jun 24, 2026
4faa64c
Merge multi-agent Startup Command Center + discovery popup into main
chanu1406 Jun 24, 2026
04d39a9
feat(discovery): focused one-question modal + founder knowledge persi…
ChunkyMonkey11 Jun 25, 2026
7dd1f79
feat(playbooks): agent playbook knowledge library loader + scaffold
chanu1406 Jun 25, 2026
72fd2d3
Merge branch 'feat/playbook-library'
chanu1406 Jun 25, 2026
9671f4c
update README
chanu1406 Jun 25, 2026
2731bfc
feat(playbooks): fill playbook content + wire product and launch agents
ChunkyMonkey11 Jun 25, 2026
d25f86d
ci(playbooks): validate frontmatter + registry drift in CI
chanu1406 Jun 25, 2026
7230867
fix(provision): add founderKnowledge to snapshot test mocks
chanu1406 Jun 25, 2026
246bb56
feat(playbooks): wire all startup agents via shared withPlaybooks helper
chanu1406 Jun 25, 2026
d352901
fix(auth): resolve hooks/lint/typecheck errors in auth pages
chanu1406 Jun 25, 2026
3baed45
fix(provision): fail closed on unknown model or missing gateway config
chanu1406 Jun 25, 2026
095939b
feat(ui): two-panel shell, artifact editing, voice cut, 500 fix
ChunkyMonkey11 Jun 25, 2026
baa1b8e
feat(provision): wire MCP config into sandbox boot environment
ChunkyMonkey11 Jun 25, 2026
86b960e
fix(startup): use Zod 4 two-arg z.record for updateArtifact input
chanu1406 Jun 25, 2026
529a7bf
feat(startup): add Company Context blackboard + dependency-wave sched…
chanu1406 Jun 25, 2026
c674380
feat(startup): thread Company Context through the 5 agents (generate-…
chanu1406 Jun 25, 2026
1a074ce
feat(startup): add Claude dispatcher (pure router) + coordinated run …
chanu1406 Jun 25, 2026
43679e3
feat(build-loop): generate strategy+design at approval, inject into s…
chanu1406 Jun 25, 2026
629a839
feat(startup): add dispatch tRPC router + contextVersion in artifacts…
chanu1406 Jun 25, 2026
64a8418
feat(startup): conversational dispatcher UI + stale-aware artifact panel
chanu1406 Jun 25, 2026
a75291d
fix(ui): give the command center full room in project-view + dedupe i…
chanu1406 Jun 25, 2026
28da483
fix(startup): restore live build view + robust JSON; split build/disp…
chanu1406 Jun 25, 2026
a8d6293
fix(deps): bump playwright 1.51.1 → 1.55.1 (CVE-2025-59288)
chanu1406 Jun 25, 2026
484da82
Fix discovery kickoff transport
chanu1406 Jun 26, 2026
ea38e02
feat(analytics): set up PostHog client and server
LittleHalf Jun 26, 2026
09f3275
feat(analytics): track key product events and errors
LittleHalf Jun 26, 2026
a110919
Fix stale live session recovery
chanu1406 Jun 26, 2026
04cc1e0
feat: new project form UI, infer-first discovery prompt, SearXNG MCP
ChunkyMonkey11 Jun 26, 2026
cc1ba03
Guard discovery against code output
chanu1406 Jun 26, 2026
d50af1b
Sanitize persisted discovery replies
chanu1406 Jun 26, 2026
a8cbe84
feat(project-view): Activity / Code / Preview tabs in the build pane
chanu1406 Jun 26, 2026
df1ac04
feat(logo): animated gradient-ball logo + activity-driven favicon
LittleHalf Jun 26, 2026
46096bd
Merge pull request #17 from Skarmy-AI/feat/logo-ball-animation
LittleHalf Jun 26, 2026
f41037d
fix: install @modelcontextprotocol/sdk instead of claude-agent-sdk in…
ChunkyMonkey11 Jun 26, 2026
47e7c2c
fix(home): make template chips populate the prompt input
chanu1406 Jun 26, 2026
0d73b31
fix: add Clerk proxy route to bypass DNS requirement
ChunkyMonkey11 Jun 26, 2026
68fb382
fix(clerk): route npm/* paths to js.clerk.com instead of frontend-api
ChunkyMonkey11 Jun 26, 2026
3ec6a25
fix(clerk+posthog): correct proxy routing for Clerk JS bundle and Pos…
ChunkyMonkey11 Jun 26, 2026
b00a852
fix(clerk): load JS bundle directly from instance host, proxy only AP…
ChunkyMonkey11 Jun 26, 2026
8bc13bc
fix(sidebar): replace custom user popover with Clerk UserButton in he…
ChunkyMonkey11 Jun 26, 2026
0f271a2
docs: rebuild context layer to match code
LittleHalf Jun 26, 2026
cc61df8
fix(sandbox): restore Agent SDK in vibe-live template; remove dead ed…
LittleHalf Jun 26, 2026
7b28a82
docs(handoff): mark vibe-live republished + validated
LittleHalf Jun 26, 2026
72c7bb9
refactor(brand): rename internal 'Vibe' references to 'Skarmy'
LittleHalf Jun 26, 2026
979a46d
feat(dashboard): add glass sidebar as unwired placeholder
LittleHalf Jun 26, 2026
dea71da
docs(readme): drop removed legacy edge from deploy/ layout
LittleHalf Jun 26, 2026
d0c73eb
feat(dashboard): add Agents screen with add/remove role grid
LittleHalf Jun 26, 2026
ddddc53
feat(billing): rebuild org-scoped billing + subscriptions + Skarmy API
LittleHalf Jun 26, 2026
9cab5d8
style(sidebar): unify added-agents sub-list under All agents
LittleHalf Jun 26, 2026
f32c916
feat(discovery): SearXNG web search via in-process MCP + /searxng-dia…
Jun 26, 2026
6555fa4
Merge remote-tracking branch 'origin/main' into corey-revant
ChunkyMonkey11 Jun 26, 2026
3610bba
feat(billing): make Skarmy-API markup explicit (API_MARGIN_MULTIPLIER…
LittleHalf Jun 27, 2026
d6bcd75
feat(api): two branded Skarmy-API models — "log 2.1" (Opus) + "hog 2.…
LittleHalf Jun 27, 2026
c6cf5ca
feat(billing): subscription prices $20/$80/$200; pin hog 2.6 to glm-5.2
LittleHalf Jun 27, 2026
df8a1a4
chore(repo): commit db:migrate scripts + dotenv-cli dep; refresh bill…
LittleHalf Jun 27, 2026
67bfa84
docs(handoff): record prod billing cutover + gateway-on-Anthropic cor…
LittleHalf Jun 27, 2026
4892150
feat(api-console): sidebar </> see models link + models/pricing on /a…
LittleHalf Jun 27, 2026
b167036
feat(litellm): Fly deploy artifacts for the Skarmy API proxy (Neon-ba…
LittleHalf Jun 27, 2026
491b9b4
fix(litellm): bump Fly VM to 2GB (1GB OOM-kills LiteLLM on boot)
LittleHalf Jun 27, 2026
c4d28fc
Implement Better Auth migration foundation
ChunkyMonkey11 Jun 27, 2026
7d9245f
Merge origin/main into Better-Auth-Migration
ChunkyMonkey11 Jun 27, 2026
83b546d
Remove invalid Next middleware stub
ChunkyMonkey11 Jun 27, 2026
ff90340
Show sign-in form inline on home page for signed-out users
ChunkyMonkey11 Jun 27, 2026
fac174f
Add Better Auth tables migration (additive)
ChunkyMonkey11 Jun 27, 2026
cc92734
Route signed-in users without a workspace to /create-organization
ChunkyMonkey11 Jun 27, 2026
79ca0b7
Add Better Auth handoff doc
ChunkyMonkey11 Jun 27, 2026
3aa340c
Add RevantsAgent handoff issue body
ChunkyMonkey11 Jun 27, 2026
18eb592
chore(vercel): run reconcile-api-spend cron every minute
LittleHalf Jun 27, 2026
8111740
feat(billing): redesign Billing page to match Agents tab + add sidebar
LittleHalf Jun 27, 2026
6b07fe8
docs(auth): note Vercel preview INVALID_ORIGIN; add Better Auth skills
ChunkyMonkey11 Jun 27, 2026
0a6e211
Migrate auth to Better Auth in-card flow; align choose-workspace screen
ChunkyMonkey11 Jun 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
175 changes: 175 additions & 0 deletions .agents/skills/better-auth-best-practices/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
---
name: better-auth-best-practices
description: Configure Better Auth server and client, set up database adapters, manage sessions, add plugins, and handle environment variables. Use when users mention Better Auth, betterauth, auth.ts, or need to set up TypeScript authentication with email/password, OAuth, or plugin configuration.
---

# Better Auth Integration Guide

**Always consult [better-auth.com/docs](https://better-auth.com/docs) for code examples and latest API.**

---

## Setup Workflow

1. Install: `npm install better-auth`
2. Set env vars: `BETTER_AUTH_SECRET` and `BETTER_AUTH_URL`
3. Create `auth.ts` with database + config
4. Create route handler for your framework
5. Run `npx @better-auth/cli@latest migrate`
6. Verify: call `GET /api/auth/ok` — should return `{ status: "ok" }`

---

## Quick Reference

### Environment Variables
- `BETTER_AUTH_SECRET` - Encryption secret (min 32 chars). Generate: `openssl rand -base64 32`
- `BETTER_AUTH_URL` - Base URL (e.g., `https://example.com`)

Only define `baseURL`/`secret` in config if env vars are NOT set.

### File Location
CLI looks for `auth.ts` in: `./`, `./lib`, `./utils`, or under `./src`. Use `--config` for custom path.

### CLI Commands
- `npx @better-auth/cli@latest migrate` - Apply schema (built-in adapter)
- `npx @better-auth/cli@latest generate` - Generate schema for Prisma/Drizzle
- `npx @better-auth/cli mcp --cursor` - Add MCP to AI tools

**Re-run after adding/changing plugins.**

---

## Core Config Options

| Option | Notes |
|--------|-------|
| `appName` | Optional display name |
| `baseURL` | Only if `BETTER_AUTH_URL` not set |
| `basePath` | Default `/api/auth`. Set `/` for root. |
| `secret` | Only if `BETTER_AUTH_SECRET` not set |
| `database` | Required for most features. See adapters docs. |
| `secondaryStorage` | Redis/KV for sessions & rate limits |
| `emailAndPassword` | `{ enabled: true }` to activate |
| `socialProviders` | `{ google: { clientId, clientSecret }, ... }` |
| `plugins` | Array of plugins |
| `trustedOrigins` | CSRF whitelist |

---

## Database

**Direct connections:** Pass `pg.Pool`, `mysql2` pool, `better-sqlite3`, or `bun:sqlite` instance.

**ORM adapters:** Import from `better-auth/adapters/drizzle`, `better-auth/adapters/prisma`, `better-auth/adapters/mongodb`.

**Critical:** Better Auth uses adapter model names, NOT underlying table names. If Prisma model is `User` mapping to table `users`, use `modelName: "user"` (Prisma reference), not `"users"`.

---

## Session Management

**Storage priority:**
1. If `secondaryStorage` defined → sessions go there (not DB)
2. Set `session.storeSessionInDatabase: true` to also persist to DB
3. No database + `cookieCache` → fully stateless mode

**Cookie cache strategies:**
- `compact` (default) - Base64url + HMAC. Smallest.
- `jwt` - Standard JWT. Readable but signed.
- `jwe` - Encrypted. Maximum security.

**Key options:** `session.expiresIn` (default 7 days), `session.updateAge` (refresh interval), `session.cookieCache.maxAge`, `session.cookieCache.version` (change to invalidate all sessions).

---

## User & Account Config

**User:** `user.modelName`, `user.fields` (column mapping), `user.additionalFields`, `user.changeEmail.enabled` (disabled by default), `user.deleteUser.enabled` (disabled by default).

**Account:** `account.modelName`, `account.accountLinking.enabled`, `account.storeAccountCookie` (for stateless OAuth).

**Required for registration:** `email` and `name` fields.

---

## Email Flows

- `emailVerification.sendVerificationEmail` - Must be defined for verification to work
- `emailVerification.sendOnSignUp` / `sendOnSignIn` - Auto-send triggers
- `emailAndPassword.sendResetPassword` - Password reset email handler

---

## Security

**In `advanced`:**
- `useSecureCookies` - Force HTTPS cookies
- `disableCSRFCheck` - ⚠️ Security risk
- `disableOriginCheck` - ⚠️ Security risk
- `crossSubDomainCookies.enabled` - Share cookies across subdomains
- `ipAddress.ipAddressHeaders` - Custom IP headers for proxies
- `database.generateId` - Custom ID generation or `"serial"`/`"uuid"`/`false`

**Rate limiting:** `rateLimit.enabled`, `rateLimit.window`, `rateLimit.max`, `rateLimit.storage` ("memory" | "database" | "secondary-storage").

---

## Hooks

**Endpoint hooks:** `hooks.before` / `hooks.after` - Array of `{ matcher, handler }`. Use `createAuthMiddleware`. Access `ctx.path`, `ctx.context.returned` (after), `ctx.context.session`.

**Database hooks:** `databaseHooks.user.create.before/after`, same for `session`, `account`. Useful for adding default values or post-creation actions.

**Hook context (`ctx.context`):** `session`, `secret`, `authCookies`, `password.hash()`/`verify()`, `adapter`, `internalAdapter`, `generateId()`, `tables`, `baseURL`.

---

## Plugins

**Import from dedicated paths for tree-shaking:**
```
import { twoFactor } from "better-auth/plugins/two-factor"
```
NOT `from "better-auth/plugins"`.

**Popular plugins:** `twoFactor`, `organization`, `passkey`, `magicLink`, `emailOtp`, `username`, `phoneNumber`, `admin`, `apiKey`, `bearer`, `jwt`, `multiSession`, `sso`, `oauthProvider`, `oidcProvider`, `openAPI`, `genericOAuth`.

Client plugins go in `createAuthClient({ plugins: [...] })`.

---

## Client

Import from: `better-auth/client` (vanilla), `better-auth/react`, `better-auth/vue`, `better-auth/svelte`, `better-auth/solid`.

Key methods: `signUp.email()`, `signIn.email()`, `signIn.social()`, `signOut()`, `useSession()`, `getSession()`, `revokeSession()`, `revokeSessions()`.

---

## Type Safety

Infer types: `typeof auth.$Infer.Session`, `typeof auth.$Infer.Session.user`.

For separate client/server projects: `createAuthClient<typeof auth>()`.

---

## Common Gotchas

1. **Model vs table name** - Config uses ORM model name, not DB table name
2. **Plugin schema** - Re-run CLI after adding plugins
3. **Secondary storage** - Sessions go there by default, not DB
4. **Cookie cache** - Custom session fields NOT cached, always re-fetched
5. **Stateless mode** - No DB = session in cookie only, logout on cache expiry
6. **Change email flow** - Sends to current email first, then new email

---

## Resources

- [Docs](https://better-auth.com/docs)
- [Options Reference](https://better-auth.com/docs/reference/options)
- [LLMs.txt](https://better-auth.com/llms.txt)
- [GitHub](https://github.com/better-auth/better-auth)
- [Init Options Source](https://github.com/better-auth/better-auth/blob/main/packages/core/src/types/init-options.ts)
Loading