From aradotso-trending-skills-37
Indexes markdown files into Postgres+pgvector knowledge base with hybrid search for AI agents. Guides CLI setup using Bun, Supabase, OpenAI embeddings.
npx claudepluginhub joshuarweaver/cascade-ai-ml-agents-misc-1 --plugin aradotso-trending-skills-37This skill uses the workspace's default tool permissions.
```markdown
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
---
name: gbrain-agent-knowledge
description: Skill for using GBrain — a Postgres-backed markdown knowledge brain with hybrid search for AI agents
triggers:
- set up gbrain for my agent
- help me build a knowledge brain
- index my markdown files with gbrain
- search my notes with an AI agent
- gbrain import and query
- set up agent memory with markdown and postgres
- configure gbrain skillpack
- connect gbrain to my AI agent
---
# GBrain Agent Knowledge Skill
> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.
GBrain is a markdown-first, Postgres-backed knowledge brain for AI agents. It turns a git repo of markdown files into a hybrid-searchable (vector + keyword + RRF) knowledge base. The agent reads from and writes to the brain, compounding knowledge over time. Built to work with OpenClaw and Hermes Agent, but usable with any agent that can run CLI commands or call MCP tools.
---
## What GBrain Does
- **Indexes markdown files** into Postgres + pgvector via chunking and OpenAI embeddings
- **Hybrid search** — keyword (tsvector), vector (pgvector), and RRF fusion in one query
- **Knowledge model** — compiled truth header + append-only timeline per page
- **MCP layer** — exposes `gbrain search`, `gbrain get`, `gbrain query` as agent tools
- **Dream cycle** — nightly cron that enriches entities, fixes links, and consolidates memory
- **Works without Postgres** — the schema and skillpack work with plain markdown + grep until scale demands more
---
## Installation
### Prerequisites
| Dependency | Purpose | Source |
|---|---|---|
| Bun | Runtime | `curl -fsSL https://bun.sh/install \| bash` |
| Supabase (Pro) | Postgres + pgvector | [supabase.com](https://supabase.com) |
| OpenAI API key | Embeddings (`text-embedding-3-large`) | `OPENAI_API_KEY` env var |
| Anthropic API key | Multi-query expansion, LLM chunking | `ANTHROPIC_API_KEY` env var |
### Install GBrain
```bash
# Install via bun
bun add github:garrytan/gbrain
# Or globally
bun add -g github:garrytan/gbrain
export OPENAI_API_KEY=sk-...
export ANTHROPIC_API_KEY=sk-ant-...
# Supabase URL is configured interactively via: gbrain init --supabase
gbrain init --supabase
# Follow the wizard to connect your Supabase database
# This runs the SQL migrations (pgvector, tsvector, RRF functions)
# Import a markdown repo (skip embedding for speed, embed in background)
gbrain import ~/git/brain/ --no-embed
# Import and embed immediately
gbrain import ~/Documents/obsidian-vault/
# Import with Obsidian wikilink conversion
gbrain import ~/Documents/obsidian-vault/ --convert-wikilinks
gbrain stats
# Pages: 342, Chunks: 1,847, Embedded: 1,847, Links: 0
# Hybrid search (keyword + vector + RRF)
gbrain query "competitive dynamics in fintech"
# Get a specific page by slug or path
gbrain get people/pedro-franceschi
# Keyword-only search (no embeddings required)
gbrain search "board meeting March"
# Semantic search (requires embeddings)
gbrain query "what have I said about founder resilience?"
# Pick up changes from the markdown repo after manual edits
gbrain sync
# Sync a specific directory
gbrain sync ~/git/brain/people/
# Scan machine for markdown repos
gbrain discover
# Reports paths, file counts, type (plain markdown vs Obsidian vault)
Every page follows the compiled truth + append-only timeline pattern. Never edit the timeline — always append. Rewrite the compiled truth section when evidence changes.
people/jordan-smith.md)# Jordan Smith
**Role:** Partner, Accel
**Company:** [[companies/accel]]
**First met:** 2021-03-15 (YC Demo Day)
**Contact:** jordan@accel.com
## Compiled Truth
Jordan leads Series A in developer tools. Focused on infra and AI-native companies.
Strong network in NYC. Warm intro from Pedro (2022). Key relationship for fundraising.
Prefers Slack over email. Responds fast to concrete asks.
## Open Threads
- [ ] Follow up on the infra fund thesis deck (due 2026-04-15)
- [ ] Intro to their new operating partner
## Timeline
- 2021-03-15 — Met at YC Demo Day. Brief intro. Source: calendar/yc-demo-day-2021
- 2022-06-01 — Pedro intro'd over email. Discussed Series A landscape. Source: email
- 2024-11-20 — Coffee in NYC. Talked about AI-native infra thesis. Source: meeting-transcripts/2024-11-20-jordan
- 2026-04-08 — Zoom: shared deck draft. Positive signal on market size. Source: calendar/zoom-jordan-2026-04-08
companies/accel.md)# Accel
**Type:** Venture Capital
**Stage:** Series A–C
**HQ:** Palo Alto / London / NYC
**Key contacts:** [[people/jordan-smith]], [[people/rich-wong]]
## Compiled Truth
Top-tier global VC. Strong in developer tools, infra, and fintech.
Accel's NYC presence has grown since 2022. Jordan is the primary contact.
Portfolio includes Brex, Atlassian, Slack.
## Timeline
- 2022-06-01 — First contact via Jordan intro. Source: email
- 2024-11-20 — Jordan meeting. Discussed fund cycle and portfolio fit. Source: meeting-transcripts/2024-11-20-jordan
originals/shame-founder-performance.md)# Shame and Founder Performance
**Thesis category:** Psychology / Leadership
**Created:** 2025-08-12
**Status:** Developing
## Compiled Truth
Founders who operate from shame (fear of judgment, proving worth) hit a ceiling earlier
than founders who operate from curiosity. Shame optimizes for external validation;
curiosity optimizes for truth. The transition from shame-driven to curiosity-driven is
often the unlock at the Series B inflection point.
## Evidence
- 2025-08-12 — Observed in 3 portfolio companies simultaneously. Source: notes/coaching-session-aug-2025
- 2025-09-04 — Brené Brown's research on shame vs guilt maps onto this. Source: media/brene-brown-daring-greatly
- 2026-01-17 — Jordan independently raised something similar in our meeting. Source: meeting-transcripts/2026-01-17-jordan
Signal arrives (meeting, email, tweet, note)
→ Agent detects entities (people, companies, ideas)
→ READ: gbrain search / gbrain get (check brain first)
→ Respond with full context
→ WRITE: update markdown pages with new information
→ gbrain sync (index changes)
When a message mentions a person, company, or original idea:
gbrain get people/<slug> — check if page existsgbrain sync to re-index1. gbrain search <person> — pull dossier before meeting
2. During/after: capture transcript → meeting-transcripts/<date>-<person>.md
3. Extract entities mentioned: people, companies, ideas
4. For each entity: gbrain get <entity> → append timeline entry
5. Update compiled truth for each entity page
6. Create new pages for unknown entities
7. gbrain sync
When installed as an MCP skill, these tools are available to the agent:
gbrain_search(query: string) → ranked list of pages
gbrain_get(slug: string) → full page content
gbrain_query(query: string) → hybrid search with scores
gbrain_sync() → re-index changed files
import { GBrain } from 'gbrain'
const brain = new GBrain({
supabaseUrl: process.env.SUPABASE_URL!,
supabaseKey: process.env.SUPABASE_SERVICE_KEY!,
openaiApiKey: process.env.OPENAI_API_KEY!,
anthropicApiKey: process.env.ANTHROPIC_API_KEY,
})
// Hybrid search
const results = await brain.query('competitive dynamics fintech', { limit: 5 })
for (const r of results) {
console.log(r.slug, r.score, r.excerpt)
}
// Get a specific page
const page = await brain.get('people/jordan-smith')
console.log(page.content)
// Import a directory
await brain.import('/Users/me/git/brain', { embed: true })
// Sync changes
await brain.sync()
// Get stats
const stats = await brain.stats()
console.log(`Pages: ${stats.pages}, Chunks: ${stats.chunks}, Embedded: ${stats.embedded}`)
The dream cycle runs while you sleep and enriches the brain autonomously.
[[wikilinks]]crontab -e)# Run dream cycle nightly at 2am
0 2 * * * /Users/me/.bun/bin/gbrain dream >> /tmp/gbrain-dream.log 2>&1
gbrain dream
# Scans today's activity, enriches entities, syncs
gbrain dream --dry-run
# Shows what would change without writing
brain/
├── people/ # One page per person
├── companies/ # One page per company/org
├── meetings/ # Meeting notes (separate from transcripts)
├── meeting-transcripts/ # Raw transcripts with AI analysis
├── originals/ # Your original ideas, organized by thesis
├── calendar/ # Calendar event stubs with entity links
├── notes/ # Apple Notes or freeform notes
├── media/ # Video transcripts, book summaries, articles
├── food/ # Food and restaurant guide (optional)
├── travel/ # Travel logs (optional)
└── DREAMS.md # Dream cycle log (auto-maintained)
GBrain fuses three retrieval signals using Reciprocal Rank Fusion (RRF):
| Signal | How | Best for |
|---|---|---|
| Vector | pgvector cosine similarity on text-embedding-3-large chunks | Semantic meaning, concepts |
| Keyword | Postgres tsvector full-text search | Exact names, dates, terms |
| RRF | Rank fusion of both signals | Combined — used by default |
-- What GBrain runs under the hood (simplified)
WITH vector_results AS (
SELECT slug, ROW_NUMBER() OVER (ORDER BY embedding <=> $query_embedding) AS rank
FROM chunks
),
keyword_results AS (
SELECT slug, ROW_NUMBER() OVER (ORDER BY ts_rank(tsv, $query_tsquery) DESC) AS rank
FROM chunks
WHERE tsv @@ $query_tsquery
),
rrf AS (
SELECT slug,
COALESCE(1.0/(60+v.rank),0) + COALESCE(1.0/(60+k.rank),0) AS score
FROM vector_results v
FULL OUTER JOIN keyword_results k USING (slug)
)
SELECT slug, score FROM rrf ORDER BY score DESC LIMIT 10;
| Layer | What it stores | How to query |
|---|---|---|
| gbrain | People, companies, meetings, ideas, media | gbrain search, gbrain query, gbrain get |
Agent memory (memory_search) | Preferences, decisions, operational config | OpenClaw / Hermes memory tools |
| Session context | Current conversation | Automatic (in-context) |
Always check all three. GBrain for world facts. Agent memory for operational config. Session for immediate context.
# Check OPENAI_API_KEY is set
echo $OPENAI_API_KEY
# Force re-embed all chunks
gbrain embed --all
# Check embedding status
gbrain stats
# Check if pages were imported
gbrain stats
# Run keyword-only search to confirm data is there
gbrain search "exact term you expect"
# If chunks exist but embeddings are 0, run:
gbrain embed
# Force full re-sync
gbrain sync --full
# Sync a specific file
gbrain sync ~/git/brain/people/jordan-smith.md
-- Run in Supabase SQL editor
create extension if not exists vector;
# Re-run link resolution pass
gbrain sync --relink
# Check for broken links
gbrain links --broken
# Import without embedding first (fast), embed in background
gbrain import ~/git/brain/ --no-embed
# Then embed incrementally
gbrain embed --batch-size 50
Paste this into your agent to trigger automated setup:
Set up gbrain (https://github.com/garrytan/gbrain) as my knowledge brain.
1. Install bun if needed: curl -fsSL https://bun.sh/install | bash
Then: bun add github:garrytan/gbrain
2. Run: gbrain init --supabase
3. Discover markdown repos: gbrain discover
Import the best candidate: gbrain import <path> --no-embed
4. Run: gbrain query "<something relevant to my content>"
5. Read docs/GBRAIN_RECOMMENDED_SCHEMA.md and restructure if needed
6. Read docs/GBRAIN_SKILLPACK.md and update your skills accordingly
Or via skill install (OpenClaw):
openclaw skills install gbrain