Skip to main content
Glama
README.md
# Cérebro 2.0

Context optimization server for OpenCode. Compresses LLM prompts via LLMLingua-2, injects task protocols, and provides a 2nd Brain knowledge graph.

## Architecture

```
┌─────────────────────────────────────────────────┐
│                  OpenCode                        │
│  ┌──────────────┐  ┌──────────────────────────┐ │
│  │ Plugin       │  │ MCP Client               │ │
│  │ (hooks)      │  │ (tools)                  │ │
│  └──────┬───────┘  └────────────┬─────────────┘ │
│         │                       │                │
└─────────┼───────────────────────┼────────────────┘
          │                       │
    ┌─────▼─────┐          ┌──────▼──────┐
    │ Compressor │          │ MCP Server  │
    │ LLMLingua-2│          │ + HTTP API  │
    └─────┬─────┘          └──────┬──────┘
          │                       │
    ┌─────▼───────────────────────▼──────┐
    │           @cerebro/core             │
    │  compressor · task-injector · brain │
    └────────────────────────────────────┘
```

### Packages

| Package | Description |
|---|---|
| `@cerebro/core` | Compression engine, task injector, brain engine, metrics |
| `@cerebro/mcp-server` | MCP stdio server + HTTP API for dashboard |
| `@cerebro/plugin` | OpenCode plugin (message compression + task injection) |
| `@cerebro/dashboard` | Vite + React + Tailwind dashboard UI |

## Quick Start

```bash
# Install dependencies
pnpm install

# Approve native builds (onnxruntime-node)
pnpm approve-builds

# Run tests
pnpm test

# Build all packages
pnpm -r build

# Start MCP server (stdio for OpenCode)
node packages/mcp-server/dist/index.js

# Start dashboard dev server
pnpm --filter @cerebro/dashboard dev
```

## Configuration

Environment variables (set in `opencode.json` under `environment`):

| Variable | Default | Description |
|---|---|---|
| `COMPRESSION_RATE` | `0.4` | Compression rate (0.05–1.0, lower = more compression) |
| `BRAIN_PATH` | `.context-brain` | Path to 2nd Brain knowledge base |
| `DASHBOARD_PORT` | `4321` | HTTP API port for dashboard |
| `ENABLE_TASK_INJECTION` | `true` | Enable task protocol injection |
| `PROTECTED_PATTERNS` | `code,json,errors,system` | Comma-separated protected block patterns |

### OpenCode Integration

Add to `opencode.json` in your project root:

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cerebro": {
      "type": "local",
      "command": ["node", "caminho/para/cerebro/packages/mcp-server/dist/index.js"],
      "environment": {
        "COMPRESSION_RATE": "0.4",
        "BRAIN_PATH": ".context-brain",
        "DASHBOARD_PORT": "4321",
        "ENABLE_TASK_INJECTION": "true"
      },
      "enabled": true
    }
  }
}
```

## MCP Tools

### `compress_prompt`
Compress text using LLMLingua-2 ONNX.

```json
{ "text": "Your long prompt...", "rate": 0.4 }
```

### `brain_resolve`
Query the 2nd Brain for a screen and its wiki-linked dependencies.

```json
{ "screen": "dashboard-vendas", "depth": 1 }
```

### `brain_index`
Index or update a screen in the knowledge graph.

```json
{
  "id": "dashboard-vendas",
  "content": "---\ntitle: Dashboard Vendas\n---\n\n# Dashboard Vendas\n\nMetrics for the sales dashboard."
}
```

### `brain_screens`
List all indexed screens. No parameters.

### `cerebro_metrics`
Get compression metrics and token savings. No parameters.

### `cerebro_config`
Get or set runtime configuration.

```json
{ "key": "compressionRate", "value": 0.3 }
```

## Dashboard

The dashboard runs on port 4321 and provides:

- **Métricas**: Compression stats, token savings, recent events
- **2º Cérebro**: Browse indexed screens and their wiki-links
- **Config**: View and edit runtime configuration

```bash
pnpm --filter @cerebro/dashboard dev
# Open http://localhost:4321
```

## Plugin Hooks

The OpenCode plugin provides three hooks:

| Hook | Description |
|---|---|
| `experimental.chat.messages.transform` | Compresses old messages before sending to LLM |
| `experimental.chat.system.transform` | Injects task protocol + self-check into system prompt |
| `tool.execute.after` | Logs tool execution for dashboard visibility |

## Development

```bash
# Type check all packages
pnpm -r typecheck

# Run tests
pnpm test

# Watch mode
npx vitest

# Build dashboard
pnpm --filter @cerebro/dashboard build
```

## Testing

66 tests across 6 suites:

```
packages/core/src/          task-injector.test.ts (18) · metrics.test.ts (5)
packages/mcp-server/src/    errors.test.ts (9) · rate-limiter.test.ts (7) · e2e.test.ts (10)
packages/plugin/src/        plugin.test.ts (8)
```

Run with: `pnpm test` or `npx vitest run`

## License

MIT