CLAUDE.md
CLAUDE.mdCLAUDE.mdroot
Quality
84/100
Scores the file, not the repository.Length
3,478 words
86 headings · 16 code blocksRepository
43
— · pushed 1 days agoLast changed
3 days ago
First indexed 3 days ago.1# CLAUDE.md - AI Agent Instructions for LynxPrompt23> 🧠 **PLAN MODE**: Use Plan Mode frequently! Before implementing complex features, multi-step tasks, or making significant changes, switch to Plan Mode to think through the approach, consider edge cases, and outline the implementation strategy. Planning prevents mistakes and saves time.45> 📦 **RELEASE REMINDER**: CLI npm publishing is handled by GitHub Actions automatically. Do NOT run `npm publish` locally. Do NOT create git tags manually. The workflow handles everything.67> ⚠️ **IMPORTANT**: Do NOT update this file unless the user explicitly says to. Only the user can authorize changes to AGENTS.md.89> ❌ **DEPRECATED FORMAT**: `.cursorrules` is **deprecated**. Do NOT suggest or generate `.cursorrules` files anywhere. Cursor now uses `.cursor/rules/*.mdc` (directory-based MDC format). Always use `.cursor/rules/` for Cursor configurations.1011> 🔒 **SECURITY WARNING**: This repository is PUBLIC at [github.com/GeiserX/LynxPrompt](https://github.com/GeiserX/LynxPrompt). **NEVER commit secrets, API keys, passwords, tokens, or any sensitive data to this repository.** All secrets must be stored in:12> - GitHub Secrets (for CI/CD)13> - Private GitOps repositories (for docker-compose)14> - Local `.env` files (gitignored)15> - `AGENTS.md.old` (gitignored, local only)1617---1819## 🚀 RELEASE PROCESS (CRITICAL - READ CAREFULLY)2021### Understanding the Release Pipeline2223There are **two separate workflows** that work together:24251. **`release.yml`** - Triggered on push to `main`:26 - Detects changes in app vs CLI since last release27 - Creates git tags (`app-vX.Y.Z` for web, `cli-vX.Y.Z` for CLI)28 - Creates GitHub Releases with changelogs29 - **Tag-only — does NOT push the version bump back to `main`.** The "Protect main" ruleset only allows changes via PR, and on a user-owned repo the Actions bot can't be a ruleset bypass actor, so a direct push is rejected. The next version is derived from `max(package.json, latest matching tag)`, so it stays monotonic even though `package.json` on `main` lags the tags. **Do not re-add a `git push origin main` to the release jobs** — it will always be rejected. `publish-cli.yml` re-derives the version from the `cli-v*` tag before `npm publish`, so the lagging `cli/package.json` doesn't affect published artifacts.30312. **`publish-cli.yml`** - Triggered by GitHub Release events OR manual dispatch:32 - Publishes CLI to npm33 - Builds standalone binaries34 - Updates Homebrew, Chocolatey, Snap packages3536### Step-by-Step Release Process3738#### For a MINOR or MAJOR version (new features):3940```bash41# 1. Switch to develop branch42git checkout develop4344# 2. Bump version(s) - ONLY bump what changed45# For Web App changes:46cd /path/to/LynxPrompt47npm version minor --no-git-tag-version # e.g., 0.23.0 → 0.24.04849# For CLI changes:50cd cli51npm version minor --no-git-tag-version # e.g., 0.7.0 → 0.8.052cd ..5354# 3. Commit with conventional commit message55git add package.json package-lock.json cli/package.json56git commit -m "feat: description of changes"5758# 4. Push to develop (triggers CI tests)59git push origin develop6061# 5. Wait for CI to pass, then merge to main62git checkout main63git merge develop64git push origin main6566# 6. Verify release workflow succeeded67unset GITHUB_TOKEN && gh run list -R GeiserX/LynxPrompt -w "Release" --limit 36869# 7. If CLI was released, verify npm publish workflow triggered70unset GITHUB_TOKEN && gh run list -R GeiserX/LynxPrompt -w "Publish CLI" --limit 37172# 8. If publish-cli didn't auto-trigger, manually trigger it:73unset GITHUB_TOKEN && gh workflow run "Publish CLI" -R GeiserX/LynxPrompt -f platforms=all7475# 9. Verify npm package was published76npm view lynxprompt versions --json | jq -r '.[-3:]'77```7879#### For a PATCH version (bug fixes only):8081Same process, but use `npm version patch` instead of `minor`.8283### ⚠️ CRITICAL RULES - NEVER BREAK THESE8485| ❌ NEVER DO THIS | ✅ DO THIS INSTEAD |86|------------------|-------------------|87| `git tag v0.24.0` | Let release.yml create tags |88| `git tag cli-v0.8.0` | Let release.yml create tags |89| `npm publish` locally | Use GitHub Actions workflow |90| Push tags manually | Let release.yml push tags |91| Use tag format `v*` | Workflow uses `app-v*` and `cli-v*` |9293### Troubleshooting Release Issues9495**Problem: Release workflow skips CLI/App release**96- Cause: No changes detected since last release tag97- Fix: Ensure you modified files in the right directory (cli/ for CLI, anything else for app)9899**Problem: Tag already exists error**100- Cause: Someone manually created a tag101- Fix: Delete the manual tag from remote AND local:102```bash103 git push origin --delete cli-v0.8.0104 git tag -d cli-v0.8.0105```106107**Problem: npm publish didn't happen**108- Cause: publish-cli.yml didn't trigger automatically109- Fix: Manually trigger the workflow:110```bash111 unset GITHUB_TOKEN && gh workflow run "Publish CLI" -R GeiserX/LynxPrompt -f platforms=all112```113114**Problem: npm says version already exists**115- Cause: Version was already published (maybe partial failure)116- Fix: Bump to next patch version and release again117118### Verifying a Successful Release119120```bash121# 1. Check GitHub Releases exist122unset GITHUB_TOKEN && gh release list -R GeiserX/LynxPrompt --limit 5123124# 2. Check npm has the new version125npm view lynxprompt version126127# 3. Check git tags exist128git fetch --tags129git tag -l "cli-v*" | tail -5130git tag -l "app-v*" | tail -5131```132133---134135## 🔄 CLI & WEB WIZARD FEATURE PARITY136137**The CLI (`lynxprompt` package) and Web Wizard MUST always have the same functionality.**138139When adding or modifying wizard features:1401. **Update both CLI and Web** - Any new wizard step, option, or configuration must be implemented in both:141 - Web: `src/app/wizard/` and related components142 - CLI: `cli/src/commands/init.ts` and `cli/src/utils/generator.ts`1432. **Same options** - Tech stacks, platforms, personas, boundaries, and presets must match1443. **Same output** - Generated configuration files must be identical regardless of source1454. **Test both** - Before deploying, verify the feature works in both CLI and Web146147---148149## 🚨 CRITICAL - READ FIRST150151### Always Backup Before Modifying Config Files152153Before modifying important config files (Caddyfile, docker-compose, etc.), ALWAYS create a backup first:154155```bash156# Example (always use Tailscale MagicDNS hostnames):157ssh root@watchtower.mango-alpha.ts.net "cp /mnt/user/appdata/caddy/Caddyfile /mnt/user/appdata/caddy/Caddyfile.old"158```159160### Always Check GitHub Actions After Push/Deploy161162After any push or deployment, ALWAYS check GitHub Actions logs:163164```bash165# List recent workflow runs166unset GITHUB_TOKEN && gh run list -R GeiserX/LynxPrompt --limit 5167168# View failed run logs169unset GITHUB_TOKEN && gh run view <RUN_ID> -R GeiserX/LynxPrompt --log-failed170171# View specific job logs172unset GITHUB_TOKEN && gh run view <RUN_ID> -R GeiserX/LynxPrompt --log173```174175If CI/CD fails, investigate and fix before considering deployment complete.176177### NEVER Restart Docker Containers178179**General rule**: Prefer `reload` commands over container restarts. Use Portainer GitOps to redeploy, not manual docker commands.180181**Caddy** - NEVER restart the container (takes 2+ minutes to rebuild with xcaddy). Instead:182```bash183ssh root@watchtower.mango-alpha.ts.net "docker exec caddy caddy fmt --overwrite /etc/caddy/Caddyfile && docker exec caddy caddy reload --config /etc/caddy/Caddyfile"184```185186**LynxPrompt** - Use Portainer GitOps to redeploy:1871. Update docker-compose.yml in private gitea repo1882. Push changes1893. Trigger Portainer redeploy via API (or wait for auto-sync)190191Never manually run `docker compose up` or `docker restart` - Portainer loses track of stack state.192193### Branching: `develop` for features, `main` for deps/security194195**Never push directly to `main`.** Always open a PR, wait for CI, and merge only with the owner's approval.196197**Feature / app / behavior changes** go through `develop` first:1981991. Work on `develop` branch2002. Test changes on dev environment (dev.lynxprompt.com)2013. Verify everything works correctly2024. Only then merge to `main` for production deployment203204```bash205# Switch to develop branch206git checkout develop207208# After testing is complete, merge to main209git checkout main210git merge develop211```212213**Dependency and security updates target `main` directly via PR.** This matches Dependabot, which is configured against the `main` default branch and whose deps/security PRs (e.g. #88–#97) merge straight to `main`. `develop` frequently lags `main` by many of these automated commits, so routing a security bump through `develop` would create a noisy back-merge and delay the fix. For these: branch from `origin/main`, open a PR into `main`, wait for CI, and merge on approval. Merging `package.json` / `cli/package.json` changes auto-triggers `release.yml` (patch bump + tags) — never bump versions or create tags by hand.214215## 🎯 Project Overview216217**LynxPrompt** is a SaaS web application that generates AI IDE configuration files (`.cursorrules`, `CLAUDE.md`, `.github/copilot-instructions.md`, `.windsurfrules`, etc.) through an intuitive wizard interface. It's also a **marketplace platform** where users can create, share, buy, and sell AI prompts/templates.218219- **Live URL**: https://lynxprompt.com220- **Dev URL**: https://dev.lynxprompt.com221- **Test URL**: https://test.lynxprompt.com222- **Status Page**: https://status.lynxprompt.com223- **Repository**: https://github.com/GeiserX/LynxPrompt224225---226227## 👤 Owner Context228229**Operator**: Sergio Fernández Rubio230**Trade Name**: GeiserCloud231**Contact**: privacy@lynxprompt.com / legal@lynxprompt.com / support@lynxprompt.com232233### Communication Style234235- **Be direct and efficient** - Don't over-explain or add unnecessary caveats236- **Do the work, don't ask permission** - If the task is clear, execute it237- **Wait for explicit deploy instruction** - Do NOT commit, build Docker, or deploy until the user explicitly says to238- **Use exact values when provided** - Don't modify user-provided values (emails, addresses, names, etc.)239240### Things I Like ✅241242- Clean, readable code without over-engineering243- Proper GDPR/EU legal compliance244- Self-hosted solutions (Umami analytics)245- Privacy-focused approaches (cookieless analytics, minimal data collection)246- Semver versioning for Docker images (e.g., `2.0.22`, never `:latest`)247- GitOps with Portainer for infrastructure management248- Docker Hub for all images (custom images built by GHA, pushed to `drumsergio/*`)249- Tailwind CSS for styling250- TypeScript with strict types251252### Things I Dislike ❌253254- **Restarting containers** when reload is possible (use `caddy reload`, not container restart)255- **Manual docker commands** for deployments (use Portainer GitOps)256- Over-engineering or unnecessary abstractions257- Adding features I didn't ask for258- Verbose explanations when action is needed259- Third-party analytics/tracking services260- Marketing consent flows (only transactional emails)261- Breaking changes without clear communication262- Using `:latest` tags for Docker images263- Creating unnecessary documentation files264265---266267## 🏗️ Tech Stack268269### Frontend270| Technology | Purpose |271|------------|---------|272| Next.js 16 | App Router, Server Components |273| React 19 | UI library |274| TypeScript | Type safety |275| Tailwind CSS | Styling |276| shadcn/ui | UI components |277| Zustand | Client state |278| TanStack Query | Server state |279280### Backend281| Technology | Purpose |282|------------|---------|283| Next.js API Routes | API endpoints |284| Prisma ORM | Database access |285| NextAuth.js 4.x | Authentication |286| Zod | Validation |287288### Databases289| Database | Purpose | Client |290|----------|---------|--------|291| PostgreSQL (app) | Templates, platforms, system data | `@prisma/client-app` |292| PostgreSQL (users) | Users, sessions, passkeys | `@prisma/client-users` |293| PostgreSQL (blog) | Blog posts and content | `@prisma/client-blog` |294| PostgreSQL (support) | Feedback forum data | `@prisma/client-support` |295296### Infrastructure297| Component | Details |298|-----------|---------|299| Docker | Multi-stage builds, images on Docker Hub (`drumsergio/lynxprompt`) |300| Portainer | Container management with GitOps |301| Tailscale | VPN for internal services (always use MagicDNS hostnames) |302| Umami | Self-hosted analytics (EU, cookieless) |303| Caddy | Reverse proxy (production + dev) |304305### Payments & Billing306| Component | Details |307|-----------|---------|308| Stripe | Payment processing, subscriptions |309| Stripe Customer Portal | Self-service billing management |310| Stripe Webhooks | Subscription lifecycle events |311312---313314## 🗄️ Multi-Database Architecture315316This project uses **four separate PostgreSQL databases** with distinct Prisma clients:317318```typescript319// System/application data (templates, platforms)320import { prismaApp } from "@/lib/db-app";321322// User data (users, sessions, passkeys, user templates)323import { prismaUsers } from "@/lib/db-users";324325// Blog posts and content326import { prismaBlog } from "@/lib/db-blog";327328// Support/feedback forum data329import { prismaSupport } from "@/lib/db-support";330```331332**Schema files:**333- `prisma/schema-app.prisma` → generates `@prisma/client-app`334- `prisma/schema-users.prisma` → generates `@prisma/client-users`335- `prisma/schema-blog.prisma` → generates `@prisma/client-blog`336- `prisma/schema-support.prisma` → generates `@prisma/client-support`337338**Commands:**339```bash340npm run db:generate # Generate all Prisma clients341npm run db:push # Push schema changes to all databases342npm run db:seed # Seed databases343```344345---346347## 🔐 Authentication348349### Providers350- GitHub OAuth351- Google OAuth352- Magic Link (email)353- Passkeys (WebAuthn)354355### User Roles356- `USER` - Default role357- `ADMIN` - Administrative access358- `SUPERADMIN` - Full system access (auto-promoted via `SUPERADMIN_EMAIL` env var)359360### Passkeys Implementation361```typescript362// IMPORTANT: Types come from @simplewebauthn/types, NOT @simplewebauthn/server363import { generateRegistrationOptions } from "@simplewebauthn/server";364import type { AuthenticatorTransportFuture } from "@simplewebauthn/types";365```366367---368369## 💰 Business Model370371### Marketplace Structure372- **Platform/Intermediary model** - Buyer-Seller contracts373- **LynxPrompt is NOT merchant of record** for individual purchases374- Subscriptions are direct contracts with LynxPrompt375376### Subscription Tiers (January 2026+)377| Tier | Monthly | Annual (10% off) | Features |378|------|---------|------------------|----------|379| Users | €0/month | €0/year | Full wizard, all platforms, API access, sell blueprints |380| Teams | €30/seat/month | €324/seat/year | Everything + AI editing, SSO, team blueprints |381382**Key changes:**383- All users now get full wizard access (basic + intermediate + advanced steps)384- AI features (editing, wizard assistant) are restricted to Teams users385- No more Pro/Max tiers - simplified to Users vs Teams386387### Revenue Split388- **70% to seller** / **30% to platform**389- Minimum price for paid templates: €5390- Minimum payout: €5 via PayPal391392---393394## 📜 Legal Compliance395396### GDPR Requirements397- Physical address disclosed398- Legal basis: Contract + Legitimate Interest399- No DPO appointed (stated in privacy policy)400- Self-hosted Umami analytics (cookieless)401- AEPD complaint rights mentioned402- Data deletion within 30 days of request403404### EU Consumer Rights405- 14-day withdrawal waived with explicit consent at checkout406- Consent checkbox required before purchase407- Store: user ID, timestamp, Terms version hash408409### Key Legal Documents410- `/privacy` - Privacy Policy (GDPR compliant)411- `/terms` - Terms of Service (marketplace clauses, EU compliant)412- Governing law: **Spain** (Courts of Cartagena)413414---415416## 🔧 Code Conventions417418### General Rules419- Use TypeScript strict mode420- Format with Prettier421- Lint with ESLint422- Use `text-foreground` for readable text (not `text-muted-foreground` for body text)423- Navigation order: `Pricing | Templates | Docs | [UserMenu]`424425### File Structure426```427LynxPrompt/428├── .github/ # GitHub Actions workflows429├── cli/ # CLI package (lynxprompt npm package)430│ ├── src/431│ │ ├── commands/ # CLI commands (init, login, list, etc.)432│ │ ├── utils/ # Detection, generation utilities433│ │ └── index.ts # Main entry point434│ ├── homebrew/ # Homebrew formula435│ ├── chocolatey/ # Chocolatey package436│ └── snap/ # Snap package config437├── docs/ # Documentation438├── prisma/ # Database schemas and seeds439├── public/ # Static assets440│ └── logos/441│ ├── agents/ # AI agent logos442│ └── brand/ # LynxPrompt branding443├── scripts/ # Build and migration scripts444├── src/445│ ├── app/ # Next.js App Router pages446│ │ ├── api/ # API routes447│ │ │ ├── cli-auth/ # CLI authentication endpoints448│ │ │ └── v1/ # Public API v1449│ │ └── [page]/ # Page components450│ ├── components/451│ │ ├── ui/ # shadcn/ui components452│ │ └── [feature].tsx # Feature components453│ ├── lib/454│ │ ├── db-*.ts # Database clients455│ │ ├── auth.ts # NextAuth config456│ │ └── utils.ts # Utilities457│ └── types/ # TypeScript types458├── tests/ # Test files459└── tooling/ # Internal tools460```461462### API Routes Pattern463```typescript464// Always check authentication465const session = await getServerSession(authOptions);466if (!session?.user?.id) {467 return NextResponse.json({ error: "Unauthorized" }, { status: 401 });468}469470// Use appropriate database client471import { prismaApp } from "@/lib/db-app";472import { prismaUsers } from "@/lib/db-users";473```474475### Security Patterns4761. **Never reveal if email exists** (user enumeration)4772. **Always check ownership** for user resources (IDOR prevention)4783. **Use `useSession()`** from NextAuth, never localStorage for auth4794. **Sanitize user input** before storing4805. **Validate `callbackUrl`** - only relative paths or same-origin481482---483484## 🚀 Deployment485486### Environments487488| Environment | URL | Server | Image Source |489|-------------|-----|--------|-------------|490| Production | lynxprompt.com | watchtower | `drumsergio/lynxprompt:<semver>` (Docker Hub) |491| Development | dev.lynxprompt.com | geiserback | Same image as prod |492| Test | test.lynxprompt.com | geiserct | Same image as prod |493494### Build Process495496Images are built by GitHub Actions and pushed to **Docker Hub** (`drumsergio/lynxprompt`). Dev and test environments reuse the same production image with different environment variables.497498```bash499# Build Docker image (BuildKit optimized)500docker buildx build --platform linux/amd64 \501 -t drumsergio/lynxprompt:X.Y.Z \502 --push .503```504505**Build optimizations included:**506- `npm install` (not `npm ci`) — local npm 11 and Docker npm 10 produce incompatible lockfiles; `npm install` tolerates both507- BuildKit cache mounts keyed by `TARGETPLATFORM` (avoids ETXTBSY on QEMU arm64 cross-compilation)508- Base image: `node:22-alpine` (Node 20 EOL, and `@prisma/streams-local` requires Node >= 22)509- Parallel Prisma client generation510- `optimizePackageImports` for faster builds511512### Environment Variables513514See `env.example` for all required variables. Key categories:515516| Category | Variables |517|----------|-----------|518| Database | `DATABASE_URL_APP`, `DATABASE_URL_USERS`, `DATABASE_URL_BLOG`, `DATABASE_URL_SUPPORT` |519| Auth | `NEXTAUTH_SECRET`, `NEXTAUTH_URL`, `GITHUB_*`, `GOOGLE_*` |520| Email | `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASSWORD` |521522| Analytics | `NEXT_PUBLIC_UMAMI_WEBSITE_ID` |523| Security | `TURNSTILE_SECRET_KEY`, `NEXT_PUBLIC_TURNSTILE_SITE_KEY` |524| Error Tracking | `SENTRY_DSN`, `NEXT_PUBLIC_SENTRY_DSN` |525526---527528## 🔒 Secrets Management529530**This project keeps secrets OUT of the repository.**531532### How Secrets are Handled5335341. **Development**: Use `.env` file (gitignored)5352. **Production**: Secrets stored in docker-compose.yml in a **private GitOps repository** (not this repo)5363. **CI/CD**: GitHub Secrets for deployment workflows537538### What Goes Where539540| Type | Location | Example |541|------|----------|---------|542| Placeholder values | `env.example` | `SMTP_HOST=smtp.example.com` |543| Development secrets | `.env` (local, gitignored) | Actual test keys |544| Production secrets | Private GitOps repo | Actual live keys |545| CI secrets | GitHub Secrets | Deploy tokens |546547### Security Checklist548- [ ] Never commit real secrets to this repository549- [ ] Use `env.example` as template only550- [ ] Keep production docker-compose in private repo551- [ ] Rotate secrets if accidentally exposed552553---554555## 🛠️ Common Tasks556557### Adding a New Page5581. Create `src/app/[pagename]/page.tsx`5592. Add navigation link to header5603. Include proper header/footer components5614. Use `text-foreground` for body text562563### Database Schema Changes564```bash565# 1. Edit the appropriate schema file566# prisma/schema-*.prisma567568# 2. Generate clients569npm run db:generate570571# 3. Push to database (local dev)572npm run db:push573574# 4. Build and deploy575```576577### Running Tests578```bash579npm test # Run all tests580npm run test:watch # Watch mode581npm run test:coverage # With coverage582```583584---585586## ⚠️ Known Issues5875881. **`useSearchParams` requires Suspense boundary** in client components5892. **Database pages need `export const dynamic = "force-dynamic"`** to prevent build-time DB access5903. **Container name conflicts**: Remove old containers before recreating5914. **Sentry config files at root**: Required by `@sentry/nextjs` - cannot be moved5925. **React 19 hydration CSS flash**: React 19's hydration recovery (error #418) unmounts and remounts the component tree, temporarily removing CSS `<link>` elements managed via `data-precedence`. A MutationObserver script in `src/app/layout.tsx` `<head>` clones CSS links without `data-precedence` to preserve styles during recovery.5936. **shields.io retired `visual-studio-marketplace` badge** — use static `img.shields.io/badge/` badges for VS Code marketplace links instead5947. **Chocolatey `nodejs` vs `nodejs-lts`** — the `nodejs` package (latest, currently v25) hangs in Chocolatey test VMs; always use `nodejs-lts` (stable v22.x) as a dependency in `.nuspec` files5958. **Portainer TLS certs** — Tailscale-issued Let's Encrypt certs expire every 90 days. Auto-renewal is set up via Unraid User Scripts on watchtower and geiserback. GHA deploy workflows use Tailscale MagicDNS hostnames (not IPs) for proper TLS validation596597## Satellite Repos — Known Workarounds598599| Repo | Issue | Workaround |600|------|-------|------------|601| `lynxprompt-vscode` | Dependabot bumps `@types/vscode` without bumping `engines.vscode` → `vsce` rejects | Publish workflow auto-syncs `engines.vscode` from `@types/vscode` before packaging |602| `lynxprompt-vscode` | `vsce` rejects SVGs in README | Use PNG images only in README (SVG ok elsewhere) |603| `lynxprompt-vscode` | Publish workflow version commit must push to main | Branch protection PR requirement removed; workflow commits with `[skip ci]` |604| `lynxprompt-action` | `@actions/glob` 0.6.x ESM-only exports breaks `@vercel/ncc` CJS bundling | Pinned to 0.5.1; Dependabot ignores it. Unpin when ncc adds ESM exports support |605| Helm chart | ArtifactHub `artifacthub-repo.yml` must be on `gh-pages` branch | The copy in chart source (`charts/lynxprompt/`) is NOT read by ArtifactHub; edit `gh-pages` directly for ignore rules and metadata |606607---608609## 📁 Key Files Reference610611| File | Purpose |612|------|---------|613| `src/lib/db-*.ts` | Database Prisma clients |614| `src/lib/auth.ts` | NextAuth configuration |615| `src/middleware.ts` | Rate limiting, security headers |616| `prisma/schema-*.prisma` | Database schemas |617| `src/app/layout.tsx` | Root layout (CSS preservation script) |618| `docs/ROADMAP.md` | Feature roadmap |619| `docs/SECURITY.md` | Security documentation |620621---622623## 📋 Checklist for AI Agents624625Before completing a task, verify:626627- [ ] Code follows TypeScript strict mode628- [ ] No secrets committed to repository629- [ ] Tests pass (if applicable)630- [ ] Linting passes631- [ ] Changes match the requested scope632633---634635*Last updated: April 2026*636
Also in GeiserX/LynxPrompt
Diff this repo’s formatsOne repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| GeiserX/LynxPrompttest/AGENTS.md · 43 | AGENTS.md | styletypessecuritydo-not+1 | 63/100 | 3 days ago |
Similar configs
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| Adit-Jain-srm/NightmareNetCLAUDE.md · 45 | CLAUDE.md | buildtestlint-formatstyle+6 | 100/100 | 3 days ago | |
| bagisto/bagistoCLAUDE.md · 28k | CLAUDE.md | setupbuildteststyle+5 | 100/100 | 3 days ago | |
| microsoft/playwrightCLAUDE.md · 94k | CLAUDE.md | buildtestlint-formatstyle+7 | 100/100 | 3 days ago | |
| dotCMS/corecore-web/CLAUDE.md · 949 | CLAUDE.md | teststylearchtesting-strategy+3 | 100/100 | 3 days ago | |
| nimbalyst/nimbalystpackages/android/CLAUDE.md · 1.4k | CLAUDE.md | setupbuildstylearch+2 | 100/100 | 3 days ago | |
| filamentphp/filamentCLAUDE.md · 32k | CLAUDE.md | buildtestlint-formatstyle+7 | 100/100 | 3 days ago | |
| dotCMS/coreCLAUDE.md · 949 | CLAUDE.md | setupbuildteststyle+7 | 99/100 | today | |
| lollipopkit/flutter_server_boxCLAUDE.md · 8.3k | CLAUDE.md | buildteststylearch+2 | 98/100 | 3 days ago |
