You need a working Open Brain setup. If you haven't built one yet, start with the Open Brain guide. Every contribution you submit should be tested against your own instance first — don't submit something you haven't run yourself.
You don't need to write code to contribute to Open Brain. If you have a workflow, a use case, or an idea — that's a contribution. Here's how it works:
- Open a Non-Technical Contribution issue. Describe your idea, workflow, or knowledge in plain language. Screenshots and examples help.
- A community mentor picks it up. They'll work with you to shape your idea into a contribution — writing the code, structuring the README, filling in the metadata.
- You get full credit. Your name goes in the
authorfield ofmetadata.jsonand in CONTRIBUTORS.md. The mentor is credited as a co-author in the PR.
This is a first-class path, not a workaround. Some of the best contributions come from people who use Open Brain daily but don't code. You can also post ideas in the #non-dev-contributions channel on Discord.
Other ways to contribute without code:
- Report bugs or unclear documentation
- Suggest improvements to existing contributions
- Test someone else's recipe and confirm it works (or report what broke)
- Share use cases that could become future contributions
| Category | What belongs here | Examples | Open or Curated? |
|---|---|---|---|
extensions/ |
Progressive builds that replace SaaS tools with agent-powered infrastructure | Household Knowledge Base, Meal Planning, Professional CRM | Curated — discuss with maintainers first |
primitives/ |
Reusable concept guides referenced by multiple extensions | Row Level Security, Shared MCP Server | Curated — must be used by 2+ extensions |
recipes/ |
Step-by-step builds that add a new capability | Email import, ChatGPT import, daily digest, new capture workflows | Open |
schemas/ |
Database table extensions and metadata schemas | CRM contacts table, taste tracker, reading list schema | Open |
dashboards/ |
Frontend templates for Vercel/Netlify hosting | Knowledge dashboard, weekly review, mobile capture UI | Open |
integrations/ |
MCP extensions, webhooks, capture sources | Discord bot, email handler, browser extension, calendar sync | Open |
skills/ |
Reusable AI client skills and prompt packs | Meeting triage assistant, code review protocol, transcript processor | Open |
- Extensions are curated, ordered builds that form a progressive learning path. Each teaches new concepts through practical use. They include database schemas, MCP server code, and step-by-step instructions. If you want to propose a new extension, open an issue first.
- Primitives are reusable concept guides that get referenced by multiple extensions. They teach a pattern (like RLS or shared access) once, so extensions can link to them instead of re-explaining. A primitive should be referenced by at least 2 extensions. Propose one here.
- Recipes are standalone builds — they add a capability without being part of the learning path. No ordering, no prerequisites beyond a working Open Brain. Open for community contributions.
- Skills are standalone agent behaviors packaged as plain-text prompt/skill files. They are smaller than recipes: no full build required, just a reusable behavior you can install into Claude Code, Codex, Cursor, or a similar client. Open for community contributions.
- If a prompt/skill behavior is reusable across multiple contributions, its canonical home is
skills/. Recipes and other contributions should depend on it withrequires_skillsinstead of keeping the canonical copy in their own folder. Recipe-local*.skill.mdfiles are still allowed for tightly coupled glue, but they are not the preferred pattern for reusable behavior.
Not sure where yours fits? Open a discussion issue first.
Every contribution lives in its own subfolder under the right category (e.g., recipes/my-cool-recipe/ or skills/my-cool-skill/) and must include:
README.md— What it does, prerequisites, step-by-step setup, expected outcome, troubleshootingmetadata.json— Structured metadata (see template below)- Your actual code — SQL files, edge function code, frontend code, config files, whatever it takes
- NO credentials, API keys, or secrets. The automated review will reject them. Use environment variables and document what the user needs to set.
Your contribution's README must include these sections:
- What it does — 1-2 sentences. What capability does this add to Open Brain?
- Prerequisites — What the user needs before starting (e.g., "Working Open Brain setup," "OpenRouter API key," "Node.js 18+")
- Step-by-step instructions — Numbered steps, copy-paste ready where possible. Don't skip steps. Don't assume knowledge that isn't in the prerequisites.
- Expected outcome — What should the user see when it's working? Be specific.
- Troubleshooting — At least 2-3 common issues and how to fix them.
These patterns are required for extensions and strongly recommended for all other contributions. They match the Getting Started guide and make guides scannable, beginner-friendly, and consistent across the repo.
Step badges — Every major step gets a shields.io badge as its header. Sub-steps get inverted badges (colored label, grey title). Pick one color per guide and use it consistently. See the extension template for the exact URL format.
<!-- Main step badge -->

<!-- Sub-step badge (inverted: color on left, grey on right) -->
Verification checkpoints — Every step ends with a ✅ **Done when:** line telling the user exactly what to check before moving on.
Collapsible SQL blocks — Wrap SQL in <details> with a descriptive summary so the page stays scannable:
<details>
<summary>📋 <strong>SQL: Description here</strong> (click to expand)</summary>
\```sql
-- your SQL here
\```
</details>GitHub alert callouts — Use these for warnings, tips, and critical information:
> [!CAUTION] ← Stop-and-read-this-now errors
> [!WARNING] ← Things that can go wrong
> [!IMPORTANT] ← Required steps that are easy to skip
> [!TIP] ← Helpful but optional context
> [!NOTE] ← Additional background informationNumbered commands — When a step has 2+ commands that must run in order, number them with bold labels:
**1. Create the function folder:**
\```bash
supabase functions new my-function
\```
**2. Download the server code:**
\```bash
curl -o supabase/functions/my-function/index.ts https://...
\```GRANT step — Every extension that creates tables MUST include a GRANT step. Supabase no longer auto-grants CRUD permissions to service_role on new projects:
grant select, insert, update, delete on table public.your_table to service_role;- "Why This Matters" section leading with the human pain point
- "Learning Path" table showing position in the 6-extension sequence
- "What You'll Learn" listing new concepts introduced
- "Cross-Extension Integration" prominently documenting connections to other extensions
- "Next Steps" linking to the next extension
- Tool audit link — Any extension or integration that exposes MCP tools must link to the MCP Tool Audit & Optimization Guide in its "Next Steps" or closing section. This helps users manage their tool surface area as they add extensions. The link is checked by the automated review.
- MCP tool annotations — Any extension or integration that exposes MCP tools must mark read-only tools with
annotations: { readOnlyHint: true }and write tools withannotations: { readOnlyHint: false, openWorldHint: false, destructiveHint: false }unless the tool really can touch arbitrary external resources or destroy data. ChatGPT uses this metadata to distinguish read tools from write actions. - Remote MCP setup — MCP servers must be deployed as Supabase Edge Functions and connected via custom connectors (URL-based). Do NOT use local Node.js servers or
claude_desktop_config.json. See the extension template for the correct pattern.
Primitives additionally require:
- "Extensions That Use This" section listing which extensions reference this primitive
Skills additionally require:
- At least one plain-text skill artifact (
SKILL.md,*.skill.md, or*-skill.md) - "Supported Clients" section listing which AI tools the skill is designed for
- "Installation" steps showing exactly where the file goes
- "Trigger Conditions" explaining when the skill should fire
- Plain-text, reviewable source files only. Do not submit zipped/exported skill bundles in
skills/.
Dependency declarations:
- If a contribution depends on a canonical skill in
skills/, declare it inmetadata.jsonviarequires_skills - If you declare
requires_skills, your README must link toskills/<slug>/so users can install the dependency before following the rest of the guide - Keep reusable skill behavior in
skills/. Use recipe-local skill files only when they are tightly coupled to that one contribution and not intended for reuse
Check the _template/ folder in each category for a starter README. The extension template contains HTML comments with detailed instructions for both human contributors and AI assistants.
Every contribution needs a metadata.json file. Here's the template:
{
"name": "Email History Import",
"description": "Import your Gmail email history into Open Brain as searchable thoughts with sender, subject, and date metadata.",
"category": "recipes",
"author": {
"name": "Matt Hallett",
"github": "matthallett"
},
"version": "1.0.0",
"requires": {
"open_brain": true,
"services": ["Gmail API"],
"tools": ["Node.js 18+"]
},
"requires_skills": [],
"tags": ["email", "gmail", "import", "history"],
"difficulty": "intermediate",
"estimated_time": "30 minutes",
"created": "2026-03-10",
"updated": "2026-03-10"
}Required fields: name, description, category, author (with name), version, requires.open_brain (must be true), tags (at least 1), difficulty (one of: beginner, intermediate, advanced), estimated_time
Optional fields: author.github, requires.services, requires.tools, requires_skills, created, updated
Additional structured dependency fields:
requires_skills— array of skill slugs this contribution depends on (e.g.,["auto-capture"]). Use this when the reusable behavior lives inskills/<slug>/requires_primitives— array of primitive slugs this contribution depends on (e.g.,["rls", "shared-mcp"])
Extension-specific fields:
learning_order— integer position in the extension learning path (1-6)
Example for an extension:
{
"name": "Meal Planning",
"description": "Recipes, weekly meal plans, and shared shopping lists with RLS and a dedicated shared MCP server.",
"category": "extensions",
"author": {
"name": "Nate B. Jones",
"github": "NateBJones"
},
"version": "1.0.0",
"requires": {
"open_brain": true,
"services": [],
"tools": ["Node.js 18+"]
},
"requires_primitives": ["rls", "shared-mcp"],
"learning_order": 4,
"tags": ["meal-planning", "recipes", "shopping", "sharing", "rls"],
"difficulty": "intermediate",
"estimated_time": "1 hour",
"created": "2026-03-12",
"updated": "2026-03-12"
}Example for a recipe that depends on a reusable skill:
{
"name": "Auto-Capture Protocol",
"description": "Workflow guidance for automatically storing evaluated ideas and session summaries in Open Brain at session close.",
"category": "recipes",
"author": {
"name": "Your Name",
"github": "your-github-username"
},
"version": "1.0.0",
"requires": {
"open_brain": true,
"services": [],
"tools": ["Claude Code or similar AI coding tool"]
},
"requires_skills": ["auto-capture"],
"tags": ["capture", "workflow", "session-close"],
"difficulty": "beginner",
"estimated_time": "10 minutes"
}Title: [category] Short description
- Example:
[recipes] Email history import via Gmail API - Example:
[schemas] CRM contacts table with interaction tracking - Example:
[extensions] Household Knowledge Base - Example:
[primitives] Row Level Security guide - Example:
[skills] Panning for Gold standalone skill pack
Description must include:
- What the contribution does
- What it requires (services, tools)
- Confirmation that you tested it on your own Open Brain instance
- You submit a PR
- An automated GitHub Action checks machine-readable rules (see below)
- If the automated check passes, a human admin reviews for quality, clarity, and safety
- Expect 2-5 business days for human review
- Contains credentials, API keys, or secrets
- Requires paid services with no free-tier alternative
- Poorly documented (missing README sections, unclear instructions)
- Duplicates an existing contribution without meaningful improvement
- Modifies core Open Brain infrastructure (the
thoughtstable structure, the core MCP server) — that's upstream, not here
As you contribute, you'll progress through these levels. Every level is achievable through technical or non-technical contributions.
| Level | What it means | How you get here |
|---|---|---|
| Community Member | You use Open Brain and participate in discussions | Show up — ask questions, report bugs, share ideas |
| Contributor | You've had at least one contribution merged (code or non-code) | Submit a PR (or have a mentor submit one with your attribution) that gets merged |
| Regular | You're a consistent, trusted contributor | 3+ merged contributions, or sustained help reviewing/testing others' work |
| Maintainer | You help review PRs, mentor new contributors, and shape the project | Invited by existing maintainers based on sustained, quality involvement |
Non-code contributions count at every level. Testing recipes, mentoring non-technical contributors, improving documentation, and triaging issues all count toward progression.
Every PR is checked against these rules. All must pass before human review.
- Folder structure — Contribution is in the correct category directory (
recipes/,schemas/,dashboards/,integrations/,skills/,primitives/,extensions/) - Required files — Both
README.mdandmetadata.jsonexist in the contribution folder - Metadata valid —
metadata.jsonparses as valid JSON and passes the repo JSON Schema - No credentials — No API keys, tokens, passwords, or secrets in any file
- SQL safety — No
DROP TABLE,DROP DATABASE,TRUNCATE, or unqualifiedDELETE FROM. No modifications to corethoughtstable columns (adding columns is fine, altering/dropping existing ones is not) - Category-specific artifacts —
recipes/have code or detailed instructions,schemas/have SQL files,dashboards/have frontend code orpackage.json,integrations/have code files,skills/have at least one plain-text skill file,primitives/have substantial READMEs (200+ words),extensions/have both SQL and code files - PR format — Title starts with
[recipes],[schemas],[dashboards],[integrations],[skills],[primitives], or[extensions] - No binary blobs — No files over 1MB, no
.exe,.dmg,.zip,.tar.gz - README completeness — Contribution README includes Prerequisites, step-by-step instructions, and expected outcome sections
- Contribution dependencies — If a contribution declares
requires_primitivesorrequires_skills, those folders must exist in the repo and be linked in the README - LLM clarity review — (Planned for v2) Automated check that instructions are clear and complete
- Scope check — All changes are within the contribution folder(s)
- Internal links — All relative links in READMEs resolve to existing files
- Remote MCP pattern — Extensions and integrations must use remote MCP via Supabase Edge Functions. No
claude_desktop_config.json, no local Node.js stdio servers. See the Getting Started guide for the correct pattern - Tool audit link — Extensions and integrations must link to the MCP Tool Audit & Optimization Guide in their README. This ensures users are aware of tool surface area management as they add capabilities
- MCP tool annotations — Read-only tools include
readOnlyHint: true; write tools includereadOnlyHint: false,openWorldHint, anddestructiveHint