From secondbrain
Scaffolds knowledge management system with VitePress portal, YAML microdatabases, configurable entities (ADRs, notes, tasks, discussions), and Claude hooks. Optional review stamps and meeting transcription.
npx claudepluginhub sergio-bershadsky/ai --plugin secondbrainThis skill uses the workspace's default tool permissions.
Scaffold a complete knowledge management system with microdatabases, VitePress portal, and Claude automation.
Creates custom entity types for secondbrain projects with YAML schemas, records management, Markdown templates, and VitePress TypeScript data loaders. Use for adding trackable data beyond ADR, Note, Task, Discussion.
Initializes any folder as a Bedrock-powered Obsidian vault by creating entity directories, copying templates, configuring language/domain taxonomy, scaffolding example entities, and checking dependencies. Use for 'bedrock setup' or new vault bootstrapping.
Use when setting up a new knowledge base, bootstrapping an Obsidian vault, or when user says 'init kb', 'new knowledge base', 'create kb', or 'setup vault'. Triggers on any request to initialize or scaffold a knowledge base project.
Share bugs, ideas, or general feedback.
Scaffold a complete knowledge management system with microdatabases, VitePress portal, and Claude automation.
Initialize a new secondbrain project with:
Ask the user for:
my-knowledge-base)./<project-name>)Present entity selection with checkboxes:
## Entity Selection
Which entities would you like to enable?
[x] ADRs (Architecture Decision Records)
- Numbered decisions with status workflow
- Category-based numbering ranges
[x] Discussions (Meeting notes, conversations)
- Monthly partitioned records
- Participant tracking
[x] Notes (General knowledge capture)
- Date-based IDs
- Tag support
[ ] Tasks (Action items, todo tracking)
- Sequential numbering
- Priority and due dates
Would you like to define a custom entity type? (y/n)
Present optional feature selection:
## Optional Features
[ ] Review Stamps
- Track who reviewed which pages and when
- ReviewBadge component with staleness coloring (green/yellow/orange)
- Adds /secondbrain-review command
[ ] Meeting Transcription
- Import meetings from transcription providers (Fireflies.ai)
- Auto-generate discussion documents from transcripts
- SessionStart hook checks for undocumented meetings
- Adds /secondbrain-transcribe command
- Requires provider API key (e.g., FIREFLIES_API_KEY)
If Review Stamps selected:
review section to config.yamlReviewBadge.vue component from ${CLAUDE_PLUGIN_ROOT}/templates/scaffolding/vitepress/theme/components/ReviewBadge.vue.tmpl{{fresh_days}} with 30 and {{aging_days}} with 90 (or custom values)If Meeting Transcription selected:
fireflies (more providers coming)team and integrations.transcription sections to config.yamlfireflies.py) from ${CLAUDE_PLUGIN_ROOT}/templates/scaffolding/lib/fireflies.py.tmpl.env.local or environmentPresent search configuration options:
## Search Configuration
Which semantic search would you like to enable?
[ ] qmd (Claude Code search)
- CLI-based semantic search for AI
- Requires: bun/npm install -g qmd (~1.5GB models)
- Best for: Local development, Claude Code integration
[ ] Orama (VitePress browser search)
- Client-side semantic search for humans
- Adds ~30MB to browser (on-demand model loading)
- Best for: Static sites, offline-capable portals
[x] Both (Recommended)
- Dual index: qmd for Claude, Orama for browser
- Same semantic search quality for AI and humans
[ ] None (Skip search)
- Use basic VitePress search (keyword only)
- Can add semantic search later with /secondbrain-search-init
Based on selection:
| Selection | Actions |
|---|---|
| qmd | Create .claude/search/, generate qmd.config.json, add search hook |
| Orama | Add Orama deps to package.json, generate SearchBox.vue, generate build script |
| Both | All of the above |
| None | Skip search setup, use VitePress native search |
CRITICAL: Always propose creating .claude/settings.local.json with maximum permissions:
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"_comment": "Secondbrain project - maximum freedom for knowledge management",
"permissions": {
"allow_web_search": true,
"allow_web_fetch": ["*"],
"allow_read": ["~/**", "/tmp/**"],
"allow_bash": ["*"],
"auto_approve_write": ["<project_path>/docs/**"]
}
}
Show the settings and ask for confirmation before proceeding.
Create the following structure:
<project-name>/
├── .claude/
│ ├── settings.local.json # Max freedom permissions + hooks
│ ├── data/
│ │ ├── config.yaml # Project configuration
│ │ ├── adrs/ # (if enabled)
│ │ │ ├── schema.yaml
│ │ │ ├── meta.yaml # last_number + shard list
│ │ │ └── YYYY-MM.yaml # Monthly shard
│ │ ├── discussions/ # (if enabled)
│ │ │ ├── schema.yaml
│ │ │ └── YYYY-MM.yaml # Monthly shard
│ │ ├── notes/ # (if enabled)
│ │ │ ├── schema.yaml
│ │ │ ├── meta.yaml # shard list
│ │ │ └── YYYY-MM.yaml # Monthly shard
│ │ └── tasks/ # (if enabled)
│ │ ├── schema.yaml
│ │ ├── meta.yaml # last_number + shard list
│ │ └── YYYY-MM.yaml # Monthly shard
│ ├── lib/
│ │ └── tracking.py # CRUD library with validation
│ ├── hooks/
│ │ ├── freshness-check.py
│ │ ├── sidebar-check.py
│ │ ├── session-context.py
│ │ └── search-index-update.py # (if qmd enabled)
│ └── search/ # (if qmd enabled)
│ └── (qmd index files)
├── docs/
│ ├── .vitepress/
│ │ ├── config.ts # Navigation, sidebar, plugins
│ │ ├── theme/
│ │ │ ├── index.ts
│ │ │ ├── Layout.vue # Giscus comments
│ │ │ ├── custom.css
│ │ │ └── components/
│ │ │ ├── EntityTable.vue
│ │ │ ├── ReviewBadge.vue # (if review stamps enabled)
│ │ │ └── SearchBox.vue # (if Orama enabled)
│ │ └── data/
│ │ └── <entity>.data.ts # Per enabled entity
│ ├── index.md # Home page
│ ├── adrs/ # (if enabled)
│ │ ├── index.md
│ │ └── TEMPLATE.md
│ ├── discussions/ # (if enabled)
│ │ ├── index.md
│ │ └── TEMPLATE.md
│ ├── notes/ # (if enabled)
│ │ └── index.md
│ └── tasks/ # (if enabled)
│ └── index.md
├── package.json # VitePress dependencies
├── qmd.config.json # (if qmd enabled)
├── CLAUDE.md # Project instructions
└── .gitignore
For each enabled entity, generate from templates in ${CLAUDE_PLUGIN_ROOT}/templates/:
Microdatabase files:
config.yaml from scaffolding/microdatabase/config.yaml.tmplschema.yaml from entities/<entity>/schema.yamlrecords.yaml initialized emptyVitePress files:
config.ts from scaffolding/vitepress/config.ts.tmplscaffolding/vitepress/theme/scaffolding/vitepress/data/Documentation:
scaffolding/docs/index.md.tmplscaffolding/docs/entity-index.md.tmplentities/<entity>/TEMPLATE.mdAutomation:
settings.local.json from scaffolding/claude/settings.local.json.tmpltracking.py from scaffolding/lib/tracking.py.tmplhooks/ (copy to project)Search (if enabled):
qmd.config.json from scaffolding/search/qmd.config.json.tmplsearch-index-update.py hookSearchBox.vue from scaffolding/vitepress/theme/components/SearchBox.vue.tmplbuild-search-index.ts from scaffolding/vitepress/search/build-search-index.ts.tmplpackage.jsonReview Stamps (if enabled):
ReviewBadge.vue from scaffolding/vitepress/theme/components/ReviewBadge.vue.tmpl{{fresh_days}} / {{aging_days}} with configured thresholds (defaults: 30/90)review section to config.yamlMeeting Transcription (if enabled):
fireflies.py) from scaffolding/lib/fireflies.py.tmplteam and integrations.transcription sections to config.yaml## Secondbrain Created Successfully!
**Project:** my-knowledge-base
**Location:** /path/to/my-knowledge-base
**Entities:** ADRs, Discussions, Notes
### Structure Created
.claude/
├── settings.local.json ✓ Maximum freedom permissions
├── data/ ✓ Microdatabases with schemas
├── lib/tracking.py ✓ CRUD operations
└── hooks/ ✓ Automation hooks
docs/
├── .vitepress/ ✓ Custom theme with EntityTable
├── adrs/ ✓ Decision records
├── discussions/ ✓ Meeting notes
└── notes/ ✓ Knowledge capture
### Next Steps
1. Navigate to project:
cd my-knowledge-base
2. Install dependencies:
npm install
3. Start development server:
npm run docs:dev
4. Create your first decision:
/secondbrain-adr infrastructure my-first-decision
5. Add a note:
/secondbrain-note my-first-note
### Available Commands
- /secondbrain-search <query> — Semantic search (if enabled)
- /secondbrain-adr <category> <title> — Create ADR
- /secondbrain-note <title> — Create note
- /secondbrain-discussion <who> <topic> — Document discussion
- /secondbrain-freshness — Check what needs attention
- /secondbrain-entity <name> — Add custom entity type
- /secondbrain-review <page> [name] — Stamp page as reviewed (if enabled)
- /secondbrain-transcribe <id|list|all> — Import meeting transcripts (if enabled)
- /secondbrain-search-init — Enable semantic search later
When generating files, replace these variables:
| Variable | Description |
|---|---|
{{project_name}} | Project name (kebab-case) |
{{project_path}} | Absolute path to project |
{{description}} | Project description |
{{date}} | Current date (YYYY-MM-DD) |
{{timestamp}} | Current ISO timestamp |
{{year_month}} | Current year-month (YYYY-MM) |
{{entities}} | Array of enabled entity configs |
Each entity has standard configuration:
<entity_slug>:
enabled: true
label: "Entity Label"
singular: "Entity"
doc_path: docs/<entity_slug>
freshness:
stale_after_days: 30
For detailed entity schemas and templates:
references/entity-schemas.md — Predefined entity schema definitions