Codebase Onboarding logo

Codebase Onboarding

Community
seaworld008
codebase-onboarding

Create repository onboarding guides with architecture, key files, setup, debugging, and contribution workflows for a defined audience.

Overview

Publisherseaworld008
RepositoryCommonly-used-high-value-skills
Skill namecodebase-onboarding
Stars
70
Forks
11
Bundled files
1
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by seaworld008 on GitHub. Read the source before you install it.

Installation

Install the Codebase Onboarding AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/seaworld008/Commonly-used-high-value-skills.git /tmp/Commonly-used-high-value-skills
mkdir -p .claude/skills
cp -r /tmp/Commonly-used-high-value-skills/openclaw-skills/codebase-onboarding .claude/skills/codebase-onboarding
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Codebase Onboarding in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Codebase Onboarding on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Codebase Onboarding is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Codebase Onboarding

Tier: POWERFUL
Category: Engineering
Domain: Documentation / Developer Experience


Overview

Analyze a codebase and generate comprehensive onboarding documentation tailored to your audience. Produces architecture overviews, key file maps, local setup guides, common task runbooks, debugging guides, and contribution guidelines. Outputs to Markdown, Notion, or Confluence.

Core Capabilities

  • Architecture overview — tech stack, system boundaries, data flow diagrams
  • Key file map — what's important and why, with annotations
  • Local setup guide — step-by-step from clone to running tests
  • Common developer tasks — how to add a route, run migrations, create a component
  • Debugging guide — common errors, log locations, useful queries
  • Contribution guidelines — branch strategy, PR process, code style
  • Audience-aware output — junior, senior, or contractor mode

When to Use

  • Onboarding a new team member or contractor
  • After a major refactor that made existing docs stale
  • Before open-sourcing a project
  • Creating a team wiki page for a service
  • Self-documenting before a long vacation

Codebase Analysis Commands

Read the detailed procedure and examples when working on this part of the task.

Generated Documentation Template

README.md — Full Template

markdown
# [Project Name]

> One-sentence description of what this does and who uses it.

[![CI](https://github.com/org/repo/actions/workflows/ci.yml/badge.svg)](https://github.com/org/repo/actions/workflows/ci.yml)
[![Coverage](https://codecov.io/gh/org/repo/branch/main/graph/badge.svg)](https://codecov.io/gh/org/repo)

## What is this?

[2-3 sentences: problem it solves, who uses it, current state]

**Live:** https://myapp.com  
**Staging:** https://staging.myapp.com  
**Docs:** https://docs.myapp.com

---

## Quick Start

### Prerequisites

| Tool | Version | Install |
|------|---------|---------|
| Node.js | 20+ | `nvm install 20` |
| pnpm | 8+ | `npm i -g pnpm` |
| Docker | 24+ | [docker.com](https://docker.com) |
| PostgreSQL | 16+ | via Docker (see below) |

### Setup (5 minutes)

```bash
# 1. Clone
git clone https://github.com/org/repo
cd repo

# 2. Install dependencies
pnpm install

# 3. Start infrastructure
docker compose up -d   # Starts Postgres, Redis

# 4. Environment
cp .env.example .env
# Edit .env — ask a teammate for real values or see Vault

# 5. Database setup
pnpm db:migrate        # Run migrations
pnpm db:seed           # Optional: load test data

# 6. Start dev server
pnpm dev               # → http://localhost:3000

# 7. Verify
pnpm test              # Should be all green

Verify it works

  • http://localhost:3000 loads the app
  • http://localhost:3000/api/health returns {"status":"ok"}
  • pnpm test passes

Architecture

System Overview

Browser / Mobile
[Next.js App] ←──── [Auth: NextAuth]
    ├──→ [PostgreSQL] (primary data store)
    ├──→ [Redis] (sessions, job queue)
    └──→ [S3] (file uploads)
         
Background:
[BullMQ workers] ←── Redis queue
    └──→ [External APIs: Stripe, SendGrid]

Tech Stack

LayerTechnologyWhy
FrontendNext.js 14 (App Router)SSR, file-based routing
StylingTailwind CSS + shadcn/uiRapid UI development
APINext.js Route HandlersCo-located with frontend
DatabasePostgreSQL 16Relational, RLS for multi-tenancy
ORMDrizzle ORMType-safe, lightweight
AuthNextAuth v5OAuth + email/password
QueueBullMQ + RedisBackground jobs
StorageAWS S3File uploads
EmailSendGridTransactional email
PaymentsStripeSubscriptions
DeploymentVercel (app) + Railway (workers)
MonitoringSentry + Datadog

Key Files

PathPurpose
app/Next.js App Router — pages and API routes
app/api/API route handlers
app/(auth)/Auth pages (login, register, reset)
app/(app)/Protected app pages
src/db/Database schema, migrations, client
src/db/schema.tsDrizzle schema — single source of truth
src/lib/Shared utilities (auth, email, stripe)
src/lib/auth.tsAuth configuration — read this first
src/components/Reusable React components
src/hooks/Custom React hooks
src/types/Shared TypeScript types
workers/BullMQ background job processors
emails/React Email templates
tests/Test helpers, factories, integration tests
.env.exampleAll env vars with descriptions
docker-compose.ymlLocal infrastructure

Common Developer Tasks

Add a new API endpoint

bash
# 1. Create route handler
touch app/api/my-resource/route.ts
typescript
// app/api/my-resource/route.ts
import { NextRequest, NextResponse } from 'next/server'
import { auth } from '@/lib/auth'
import { db } from '@/db/client'

export async function GET(req: NextRequest) {
  const session = await auth()
  if (!session) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
  }
  
  const data = await db.query.myResource.findMany({
    where: (r, { eq }) => eq(r.userId, session.user.id),
  })
  
  return NextResponse.json({ data })
}
bash
# 2. Add tests
touch tests/api/my-resource.test.ts

# 3. Add to OpenAPI spec (if applicable)
pnpm generate:openapi

Run a database migration

bash
# Create migration
pnpm db:generate     # Generates SQL from schema changes

# Review the generated SQL
cat drizzle/migrations/0001_my_change.sql

# Apply
pnpm db:migrate

# Roll back (manual — inspect generated SQL and revert)
psql $DATABASE_URL -f scripts/rollback_0001.sql

Add a new email template

bash
# 1. Create template
touch emails/my-email.tsx

# 2. Preview in browser
pnpm email:preview

# 3. Send in code
import { sendEmail } from '@/lib/email'
await sendEmail({
  to: user.email,
  subject: 'Subject line',
  template: 'my-email',
  props: { name: user.name },
})

Add a background job

typescript
// 1. Define job in workers/jobs/my-job.ts
import { Queue, Worker } from 'bullmq'
import { redis } from '@/lib/redis'

export const myJobQueue = new Queue('my-job', { connection: redis })

export const myJobWorker = new Worker('my-job', async (job) => {
  const { userId, data } = job.data
  // do work
}, { connection: redis })

// 2. Enqueue
await myJobQueue.add('process', { userId, data }, {
  attempts: 3,
  backoff: { type: 'exponential', delay: 1000 },
})

Debugging Guide

Common Errors

Error: DATABASE_URL is not set

bash
# Check your .env file exists and has the var
cat .env | grep DATABASE_URL

# Start Postgres if not running
docker compose up -d postgres

PrismaClientKnownRequestError: P2002 Unique constraint failed

User already exists with that email. Check: is this a duplicate registration?
Run: SELECT * FROM users WHERE email = 'test@example.com';

Error: JWT expired

bash
# Dev: extend token TTL in .env
JWT_EXPIRES_IN=30d

# Check clock skew between server and client
date && docker exec postgres date

500 on /api/* in local dev

bash
# 1. Check terminal for stack trace
# 2. Check database connectivity
psql $DATABASE_URL -c "SELECT 1"
# 3. Check Redis
redis-cli ping
# 4. Check logs
pnpm dev 2>&1 | grep -E "error|Error|ERROR"

Useful SQL Queries

sql
-- Find slow queries (requires pg_stat_statements)
SELECT query, mean_exec_time, calls, total_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 20;

-- Check active connections
SELECT count(*), state FROM pg_stat_activity GROUP BY state;

-- Find bloated tables
SELECT relname, n_dead_tup, n_live_tup,
  round(n_dead_tup::numeric/nullif(n_live_tup,0)*100, 2) AS dead_pct
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;

Debug Authentication

bash
# Decode a JWT (no secret needed for header/payload)
echo "YOUR_JWT" | cut -d. -f2 | base64 -d | jq .

# Check session in DB
psql $DATABASE_URL -c "SELECT * FROM sessions WHERE user_id = 'usr_...' ORDER BY expires_at DESC LIMIT 5;"

Log Locations

EnvironmentLogs
Local devTerminal running pnpm dev
Vercel productionVercel dashboard → Logs
Workers (Railway)Railway dashboard → Deployments → Logs
Databasedocker logs postgres (local)
Background jobspnpm worker:dev terminal

Contribution Guidelines

Branch Strategy

main           → production (protected, requires PR + CI)
  └── feature/PROJ-123-short-desc
  └── fix/PROJ-456-bug-description
  └── chore/update-dependencies

PR Requirements

  • Branch name includes ticket ID (e.g., feature/PROJ-123-...)
  • PR description explains the why
  • All CI checks pass
  • Test coverage doesn't decrease
  • Self-reviewed (read your own diff before requesting review)
  • Screenshots/video for UI changes

Commit Convention

feat(scope): short description       → new feature
fix(scope): short description        → bug fix
chore: update dependencies           → maintenance
docs: update API reference           → documentation

Code Style

bash
# Lint + format
pnpm lint
pnpm format

# Type check
pnpm typecheck

# All checks (run before pushing)
pnpm validate

Audience-Specific Notes

For Junior Developers

  • Start with src/lib/auth.ts to understand authentication
  • Read existing tests in tests/api/ — they document expected behavior
  • Ask before touching anything in src/db/schema.ts — schema changes affect everyone
  • Use pnpm db:seed to get realistic local data

For Senior Engineers / Tech Leads

  • Architecture decisions are documented in docs/adr/ (Architecture Decision Records)
  • Performance benchmarks: pnpm bench — baseline is in tests/benchmarks/baseline.json
  • Security model: RLS policies in src/db/rls.sql, enforced at DB level
  • Scaling notes: docs/scaling.md

For Contractors

  • Scope is limited to src/features/[your-feature]/ unless discussed
  • Never push directly to main
  • All external API calls go through src/lib/ wrappers (for mocking in tests)
  • Time estimates: log in Linear ticket comments daily

Output Formats

Notion Export

javascript
// Use Notion API to create onboarding page
const { Client } = require('@notionhq/client')
const notion = new Client({ auth: process.env.NOTION_TOKEN })

const blocks = markdownToNotionBlocks(onboardingMarkdown) // use notion-to-md
await notion.pages.create({
  parent: { page_id: ONBOARDING_PARENT_PAGE_ID },
  properties: { title: { title: [{ text: { content: 'Engineer Onboarding — MyApp' } }] } },
  children: blocks,
})

Confluence Export

bash
# Using confluence-cli or REST API
curl -X POST \
  -H "Content-Type: application/json" \
  -u "user@example.com:$CONFLUENCE_TOKEN" \
  "https://yourorg.atlassian.net/wiki/rest/api/content" \
  -d '{
    "type": "page",
    "title": "Codebase Onboarding",
    "space": {"key": "ENG"},
    "body": {
      "storage": {
        "value": "<p>Generated content...</p>",
        "representation": "storage"
      }
    }
  }'

Common Pitfalls

  • Docs written once, never updated — add doc updates to PR checklist
  • Missing local setup step — test setup instructions on a fresh machine quarterly
  • No error troubleshooting — debugging section is the most valuable part for new hires
  • Too much detail for contractors — they need task-specific, not architecture-deep docs
  • No screenshots — UI flows need screenshots; they go stale but are still valuable
  • Skipping the "why" — document why decisions were made, not just what was decided

Best Practices

  1. Keep setup under 10 minutes — if it takes longer, fix the setup, not the docs
  2. Test the docs — have a new hire follow them literally, fix every gap they hit
  3. Link, don't repeat — link to ADRs, issues, and external docs instead of duplicating
  4. Update in the same PR — docs changes alongside code changes
  5. Version-specific notes — call out things that changed in recent versions
  6. Runbooks over theory — "run this command" beats "the system uses Redis for..."

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Codebase Onboarding AI skill do?

Create repository onboarding guides with architecture, key files, setup, debugging, and contribution workflows for a defined audience.

Why use Codebase Onboarding on TypingMind?

Because you install it once and use it with any model. Codebase Onboarding is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Codebase Onboarding in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/seaworld008/Commonly-used-high-value-skills/tree/main/openclaw-skills/codebase-onboarding. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Codebase Onboarding?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Codebase Onboarding?

As many as you like. As long as a model supports skills, you can use Codebase Onboarding with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Codebase Onboarding AI skill free?

Yes. It is published on GitHub by seaworld008 under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇