# Brainiac

Persistent, searchable agent knowledge store for [pi](https://github.com/mariozechner/pi-coding-agent).

Agents learn one fact at a time, connect ideas together, and recall relevant knowledge automatically — before every turn.

## Install

```bash
pi install npm:@marcfargas/brainiac
```

Or add directly to `~/.pi/agent/settings.json`:

```json
{
  "packages": ["npm:@marcfargas/brainiac"]
}
```

**Requires pi ≥ 0.50.0** and `better-sqlite3` (native module — may need `npm rebuild` after Node version upgrades).

## Tools

| Tool | Description |
|------|-------------|
| `brainiac_learn` | Store atomic facts/learnings (single or batch with auto-connections) |
| `brainiac_recall` | FTS5 full-text search with bidirectional connections |
| `brainiac_connect` | Link items to each other or external resources (files, URLs, etc.) |
| `brainiac_feedback` | Report relevance of search results (explicit + implicit signals) |

## Usage

Once installed, Brainiac tools are available in every pi session. The model can use them directly:

```
User: remember that Odoo hr.contract ended contracts have state='close', not just date_end < today
Model: [calls brainiac_learn] → Learned #42

User: how do I check for ended Odoo contracts?
Model: [auto-search fires, injects #42 into context automatically]
       Based on my notes: ended contracts have state='close'...

User: find everything I know about Odoo contracts
Model: [calls brainiac_recall { query: "odoo contract" }] → #42: ...
```

## Auto-Search

The killer feature. Before each agent turn, Brainiac automatically searches for relevant knowledge based on the user's message and injects it into the agent's context.

Toggle with `/brainiac on` or `/brainiac off`.

## Privacy

Items can be marked `private` for multi-project setups. Configure per-project in `.pi/brainiac.json`:

```json
{
  "defaults": {
    "private": true,
    "tags": ["my-project"]
  },
  "readPrivate": ["my-project", "related-project"]
}
```

## Storage

Global SQLite database at `~/.pi/brainiac/brainiac.db`. Uses FTS5 for full-text search with porter stemming. Vector search ready (Phase 2).

## License

MIT
