Phase 1 delivers the complete durability and storage layer:
- WAL with crash recovery: Append-only journal with BLAKE3 checksums,
fsync guarantees, and proper seek-to-EOF on reopen
- Storage engine: sled-backed KVStore with scan_prefix for range queries
- Content-addressed storage: H:{hash}, V:{hash}, E:{hash} key patterns
- Ingestor: Background worker tailing WAL, writing to KV with 8-byte
aligned record headers for rkyv zero-copy deserialization
- Comprehensive tests: 31 tests covering crash recovery, round-trips,
and multi-cycle durability
New crates: stemedb-wal, stemedb-storage, stemedb-ingest
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
585 lines
16 KiB
Markdown
585 lines
16 KiB
Markdown
# AI Coding Assistant Integration Guide
|
|
|
|
> Research report on integrating Episteme (StemeDB) with Claude Code, Gemini CLI, OpenAI Codex, and other AI coding assistants.
|
|
|
|
## Executive Summary
|
|
|
|
There are **three main integration approaches** for AI coding assistants, each with different trade-offs:
|
|
|
|
| Approach | Reliability | Complexity | Cross-Platform | Best For |
|
|
|----------|-------------|------------|----------------|----------|
|
|
| **Skills/Commands + CLI** | High | Low | Good | Direct, reliable integration |
|
|
| **Context Files (CLAUDE.md, AGENTS.md)** | High | Very Low | Excellent | Static knowledge, guidelines |
|
|
| **A2A Protocol** | Medium | Medium | Emerging | Agent-to-agent collaboration |
|
|
| **MCP Servers** | Variable | High | Good | Dynamic tools (when working) |
|
|
|
|
**Recommendation:** Start with **Skills + CLI tools** for reliability, use **context files** for static knowledge, and consider **A2A** for agent collaboration. MCP is powerful but has reliability concerns.
|
|
|
|
---
|
|
|
|
## Part 1: Integration Approaches Comparison
|
|
|
|
### Why MCP Can Be Problematic
|
|
|
|
MCP servers can be unreliable for several reasons:
|
|
- Connection management complexity (STDIO process lifecycle, HTTP session state)
|
|
- Protocol version mismatches between clients
|
|
- Authentication failures with OAuth 2.1 flows
|
|
- Tool search latency when many tools are registered
|
|
- Context window consumption from tool descriptions
|
|
|
|
### Recommended: Skills + CLI Integration
|
|
|
|
**Agent Skills** ([agentskills.io](https://agentskills.io)) provide a simpler, more reliable approach:
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ AI Coding Assistant │
|
|
│ (Claude Code, Gemini CLI, Codex, Cursor) │
|
|
└────────────────────────┬────────────────────────────┘
|
|
│
|
|
┌───────────────┼───────────────┐
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌──────────┐ ┌──────────┐ ┌──────────┐
|
|
│ SKILL.md │ │AGENTS.md │ │ CLI │
|
|
│ /command │ │ Context │ │ Tool │
|
|
└──────────┘ └──────────┘ └──────────┘
|
|
│ │ │
|
|
└───────────────┼───────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────┐
|
|
│ episteme-cli │
|
|
│ (Rust binary) │
|
|
└─────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────┐
|
|
│ StemeDB │
|
|
└─────────────────────┘
|
|
```
|
|
|
|
**Advantages:**
|
|
- Skills are just markdown files - no running processes
|
|
- CLI tools are standalone binaries - always available
|
|
- Context files are version-controlled and deterministic
|
|
- No connection management, no protocol negotiation
|
|
- Works offline, no authentication complexity
|
|
|
|
---
|
|
|
|
## Part 2: Agent Skills (SKILL.md)
|
|
|
|
### What Are Agent Skills?
|
|
|
|
Agent Skills are organized folders of instructions, scripts, and resources that AI assistants discover and load dynamically. They follow an open standard adopted by Claude Code, Codex, and others.
|
|
|
|
### SKILL.md Format
|
|
|
|
```yaml
|
|
---
|
|
name: episteme-query
|
|
description: Query the Episteme knowledge graph for assertions about a subject
|
|
disable-model-invocation: false
|
|
allowed-tools: Bash(episteme *)
|
|
---
|
|
|
|
# Episteme Query
|
|
|
|
Query the knowledge graph for information about a subject.
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
episteme query --subject "$ARGUMENTS" --lens recency
|
|
```
|
|
|
|
## What to Look For
|
|
|
|
- Check for conflicting assertions
|
|
- Note the confidence levels
|
|
- Trace provenance if the source matters
|
|
|
|
## Output Format
|
|
|
|
Returns JSON with assertions matching the query.
|
|
```
|
|
|
|
### Skill Locations
|
|
|
|
| Location | Path | Scope |
|
|
|----------|------|-------|
|
|
| Personal | `~/.claude/skills/<name>/SKILL.md` | All your projects |
|
|
| Project | `.claude/skills/<name>/SKILL.md` | This project only |
|
|
| Codex | `~/.codex/skills/<name>/SKILL.md` | Codex sessions |
|
|
|
|
### Cross-Platform Compatibility
|
|
|
|
The Agent Skills specification ([agentskills.io](https://agentskills.io)) works across:
|
|
- Claude Code
|
|
- OpenAI Codex CLI
|
|
- Cursor
|
|
- Other compatible tools
|
|
|
|
**Key insight:** Write skills once, they work everywhere.
|
|
|
|
---
|
|
|
|
## Part 3: Context Files (AGENTS.md / CLAUDE.md / GEMINI.md)
|
|
|
|
### The Open Standard: AGENTS.md
|
|
|
|
[AGENTS.md](https://agents.md/) is an open format for guiding coding agents, now stewarded by the Linux Foundation's Agentic AI Foundation. It's adopted by 40,000+ open-source projects.
|
|
|
|
### File Discovery (Codex)
|
|
|
|
```
|
|
Discovery order (first match wins):
|
|
1. ./AGENTS.md (current directory)
|
|
2. Parent directories up to repo root
|
|
3. Sub-folders the agent is working in
|
|
4. ~/.factory/AGENTS.md (personal override)
|
|
|
|
Merge: Files concatenate root → leaf, closer files override.
|
|
```
|
|
|
|
### Recommended Sections
|
|
|
|
```markdown
|
|
# AGENTS.md
|
|
|
|
## Build & Test
|
|
Exact commands for compiling and testing.
|
|
|
|
## Architecture Overview
|
|
Short description of major modules.
|
|
|
|
## Knowledge System
|
|
This project uses Episteme for persistent knowledge:
|
|
- Query: `episteme query --subject <topic>`
|
|
- Store: `episteme assert <subject> <predicate> <object>`
|
|
- Lenses: consensus, recency, authority
|
|
|
|
When you learn something important, store it in Episteme.
|
|
|
|
## Conventions
|
|
Naming, folder layout, code style.
|
|
```
|
|
|
|
### Platform-Specific Files
|
|
|
|
| Platform | Primary File | Alternative |
|
|
|----------|-------------|-------------|
|
|
| Claude Code | `CLAUDE.md` | Also reads `AGENTS.md` |
|
|
| Gemini CLI | `GEMINI.md` | Also reads `AGENT.md` |
|
|
| OpenAI Codex | `AGENTS.md` | - |
|
|
| Cursor | `.cursor/rules/` | - |
|
|
|
|
**Best Practice:** Use `AGENTS.md` as the canonical file, reference it from platform-specific files:
|
|
|
|
```markdown
|
|
# CLAUDE.md
|
|
|
|
See [AGENTS.md](./AGENTS.md) for project conventions.
|
|
|
|
## Claude-Specific
|
|
Additional Claude Code settings here.
|
|
```
|
|
|
|
---
|
|
|
|
## Part 4: CLI Tool Integration
|
|
|
|
### The episteme-cli Approach
|
|
|
|
Instead of MCP, build a standalone CLI that skills can invoke:
|
|
|
|
```rust
|
|
// crates/episteme-cli/src/main.rs
|
|
use clap::{Parser, Subcommand};
|
|
|
|
#[derive(Parser)]
|
|
#[command(name = "episteme")]
|
|
#[command(about = "Episteme knowledge graph CLI")]
|
|
struct Cli {
|
|
#[command(subcommand)]
|
|
command: Commands,
|
|
}
|
|
|
|
#[derive(Subcommand)]
|
|
enum Commands {
|
|
/// Query assertions about a subject
|
|
Query {
|
|
#[arg(short, long)]
|
|
subject: String,
|
|
#[arg(short, long, default_value = "recency")]
|
|
lens: String,
|
|
#[arg(short, long)]
|
|
predicate: Option<String>,
|
|
},
|
|
/// Create a new assertion
|
|
Assert {
|
|
subject: String,
|
|
predicate: String,
|
|
object: String,
|
|
#[arg(short, long)]
|
|
source: Option<String>,
|
|
#[arg(short, long, default_value = "1.0")]
|
|
confidence: f64,
|
|
},
|
|
/// List conflicts for a subject
|
|
Conflicts {
|
|
#[arg(short, long)]
|
|
subject: String,
|
|
},
|
|
/// Trace provenance chain
|
|
Trace {
|
|
#[arg(long)]
|
|
assertion_id: String,
|
|
},
|
|
}
|
|
```
|
|
|
|
### CLI Usage in Skills
|
|
|
|
```yaml
|
|
---
|
|
name: remember
|
|
description: Store a learning in the knowledge graph
|
|
allowed-tools: Bash(episteme *)
|
|
---
|
|
|
|
Store important learnings about this codebase.
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
episteme assert "$0" "$1" "$2" --source "claude-session"
|
|
```
|
|
|
|
Where:
|
|
- $0 = subject (e.g., "AuthSystem")
|
|
- $1 = predicate (e.g., "uses")
|
|
- $2 = object (e.g., "JWT with 24h expiration")
|
|
```
|
|
|
|
### Output Format
|
|
|
|
Design CLI output for AI consumption:
|
|
|
|
```bash
|
|
$ episteme query --subject AuthSystem --lens recency
|
|
|
|
{
|
|
"assertions": [
|
|
{
|
|
"id": "blake3:abc123...",
|
|
"subject": "AuthSystem",
|
|
"predicate": "uses",
|
|
"object": "JWT",
|
|
"confidence": 0.95,
|
|
"source": "code-review-2024-01",
|
|
"timestamp": "2024-01-15T10:30:00Z"
|
|
}
|
|
],
|
|
"lens": "recency",
|
|
"conflicts": []
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Part 5: A2A Protocol (Agent-to-Agent)
|
|
|
|
### What is A2A?
|
|
|
|
[A2A](https://a2a-protocol.org/) is Google's open protocol for agent-to-agent communication, now under Linux Foundation governance. It's **complementary** to MCP:
|
|
|
|
- **MCP**: Agent → Tool communication
|
|
- **A2A**: Agent → Agent communication
|
|
|
|
### When to Use A2A
|
|
|
|
Use A2A when you want:
|
|
- Multiple AI agents collaborating on a task
|
|
- Episteme acting as a "memory agent" that other agents consult
|
|
- Cross-vendor agent ecosystems (Claude ↔ Gemini ↔ GPT agents)
|
|
|
|
### A2A Architecture
|
|
|
|
```
|
|
┌──────────────────┐ A2A ┌──────────────────┐
|
|
│ Claude Agent │◄────────────►│ Episteme Agent │
|
|
│ (Coding tasks) │ │ (Knowledge) │
|
|
└──────────────────┘ └──────────────────┘
|
|
│ │
|
|
│ A2A │
|
|
▼ ▼
|
|
┌──────────────────┐ ┌──────────────────┐
|
|
│ Gemini Agent │ │ StemeDB │
|
|
│ (Review tasks) │ │ │
|
|
└──────────────────┘ └──────────────────┘
|
|
```
|
|
|
|
### Agent Card (Discovery)
|
|
|
|
Agents advertise capabilities via JSON "Agent Cards":
|
|
|
|
```json
|
|
{
|
|
"name": "episteme-memory",
|
|
"description": "Knowledge graph memory for AI agents",
|
|
"version": "0.1.0",
|
|
"capabilities": [
|
|
"store_assertion",
|
|
"query_knowledge",
|
|
"resolve_conflicts"
|
|
],
|
|
"endpoint": "https://episteme.local/a2a",
|
|
"auth": {
|
|
"type": "bearer"
|
|
}
|
|
}
|
|
```
|
|
|
|
### Task Lifecycle
|
|
|
|
A2A uses task-oriented communication:
|
|
|
|
1. **Client agent** discovers Episteme via Agent Card
|
|
2. **Sends task**: "Remember that AuthSystem uses JWT"
|
|
3. **Episteme agent** processes, returns task status
|
|
4. **Long-running tasks** use SSE streaming for updates
|
|
|
|
### A2A vs MCP
|
|
|
|
| Aspect | MCP | A2A |
|
|
|--------|-----|-----|
|
|
| Communication | Tool invocation | Task delegation |
|
|
| Statefulness | Stateful sessions | Task-based state |
|
|
| Discovery | Client config | Agent Cards |
|
|
| Use case | AI → External tools | AI → AI collaboration |
|
|
| Opacity | Tools exposed | Internal state hidden |
|
|
|
|
---
|
|
|
|
## Part 6: Recommended Implementation Strategy
|
|
|
|
### Phase 1: CLI + Skills (Start Here)
|
|
|
|
1. **Build `episteme-cli`** as standalone Rust binary
|
|
2. **Create skills** that wrap CLI commands
|
|
3. **Add to AGENTS.md** with usage instructions
|
|
|
|
```bash
|
|
# Install
|
|
cargo install --path crates/episteme-cli
|
|
|
|
# Skills location
|
|
mkdir -p ~/.claude/skills/episteme-query
|
|
mkdir -p ~/.claude/skills/episteme-remember
|
|
```
|
|
|
|
### Phase 2: Context Integration
|
|
|
|
1. **Create AGENTS.md** with Episteme documentation
|
|
2. **Symlink or reference** from CLAUDE.md, GEMINI.md
|
|
3. **Version control** the context files
|
|
|
|
### Phase 3: A2A Agent (Optional)
|
|
|
|
1. **Implement Agent Card** endpoint
|
|
2. **Add A2A task handlers** for knowledge operations
|
|
3. **Deploy as service** for multi-agent scenarios
|
|
|
|
### Phase 4: MCP Server (If Needed)
|
|
|
|
Only if you need:
|
|
- Dynamic tool discovery (tools that change at runtime)
|
|
- Resource subscriptions (real-time updates)
|
|
- Deep IDE integration beyond skills
|
|
|
|
---
|
|
|
|
## Part 7: Episteme Skills Library
|
|
|
|
### Core Skills
|
|
|
|
#### `/episteme-query` - Query Knowledge
|
|
|
|
```yaml
|
|
---
|
|
name: episteme-query
|
|
description: Query the knowledge graph. Use before making changes to understand existing knowledge.
|
|
allowed-tools: Bash(episteme *)
|
|
---
|
|
|
|
Query Episteme for existing knowledge about a subject.
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
episteme query --subject "$ARGUMENTS" --lens recency
|
|
```
|
|
|
|
## Lenses
|
|
|
|
- `recency` - Most recent assertions win
|
|
- `consensus` - Community agreement
|
|
- `authority` - Trusted sources weighted higher
|
|
|
|
## Example
|
|
|
|
```bash
|
|
episteme query --subject "PaymentService" --lens authority
|
|
```
|
|
```
|
|
|
|
#### `/episteme-remember` - Store Knowledge
|
|
|
|
```yaml
|
|
---
|
|
name: episteme-remember
|
|
description: Store a learning in the knowledge graph. Use after discovering something important.
|
|
disable-model-invocation: false
|
|
allowed-tools: Bash(episteme *)
|
|
---
|
|
|
|
Store important learnings in Episteme.
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
episteme assert "$0" "$1" "$2" --source "claude-session" --confidence 0.9
|
|
```
|
|
|
|
## Arguments
|
|
|
|
- $0: Subject (what the assertion is about)
|
|
- $1: Predicate (the relationship)
|
|
- $2: Object (the value or target)
|
|
|
|
## Examples
|
|
|
|
```bash
|
|
# Architecture decision
|
|
episteme assert "UserService" "database" "PostgreSQL" --source "arch-review"
|
|
|
|
# Pattern discovery
|
|
episteme assert "ErrorHandling" "pattern" "Result<T, AppError>" --source "code-analysis"
|
|
```
|
|
```
|
|
|
|
#### `/episteme-conflicts` - Find Conflicts
|
|
|
|
```yaml
|
|
---
|
|
name: episteme-conflicts
|
|
description: Find conflicting assertions about a subject. Use when information seems contradictory.
|
|
allowed-tools: Bash(episteme *)
|
|
---
|
|
|
|
Find conflicting knowledge that needs resolution.
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
episteme conflicts --subject "$ARGUMENTS"
|
|
```
|
|
|
|
## Output
|
|
|
|
Returns pairs of conflicting assertions with:
|
|
- Both assertion details
|
|
- Confidence levels
|
|
- Sources
|
|
- Suggested resolution strategy
|
|
```
|
|
|
|
---
|
|
|
|
## Part 8: Cross-Platform Configuration
|
|
|
|
### Universal Setup
|
|
|
|
```
|
|
project/
|
|
├── AGENTS.md # Open standard, works everywhere
|
|
├── CLAUDE.md # References AGENTS.md + Claude extras
|
|
├── .gemini/
|
|
│ └── GEMINI.md # References AGENTS.md + Gemini extras
|
|
├── .claude/
|
|
│ └── skills/
|
|
│ ├── episteme-query/
|
|
│ │ └── SKILL.md
|
|
│ └── episteme-remember/
|
|
│ └── SKILL.md
|
|
└── .codex/
|
|
└── skills/ # Symlink to .claude/skills/
|
|
```
|
|
|
|
### AGENTS.md Template
|
|
|
|
```markdown
|
|
# AGENTS.md
|
|
|
|
## Overview
|
|
[Project description]
|
|
|
|
## Knowledge System
|
|
|
|
This project uses **Episteme** for persistent AI memory.
|
|
|
|
### Querying Knowledge
|
|
Before making significant changes, query existing knowledge:
|
|
```bash
|
|
episteme query --subject <topic> --lens recency
|
|
```
|
|
|
|
### Storing Learnings
|
|
After discovering important patterns or decisions:
|
|
```bash
|
|
episteme assert <subject> <predicate> <object>
|
|
```
|
|
|
|
### Resolving Conflicts
|
|
When encountering contradictory information:
|
|
```bash
|
|
episteme conflicts --subject <topic>
|
|
```
|
|
|
|
## Build & Test
|
|
[Your build commands]
|
|
|
|
## Architecture
|
|
[Architecture overview]
|
|
```
|
|
|
|
---
|
|
|
|
## References
|
|
|
|
### Agent Skills
|
|
- [Agent Skills Specification](https://agentskills.io)
|
|
- [Claude Code Skills](https://code.claude.com/docs/en/skills)
|
|
- [Codex Skills](https://developers.openai.com/codex/skills/)
|
|
|
|
### Context Files
|
|
- [AGENTS.md Specification](https://agents.md/)
|
|
- [AGENTS.md on GitHub](https://github.com/openai/codex/blob/main/docs/agents_md.md)
|
|
- [Claude Code Memory](https://code.claude.com/docs/en/memory)
|
|
|
|
### A2A Protocol
|
|
- [A2A Protocol Specification](https://a2a-protocol.org/latest/)
|
|
- [A2A GitHub](https://github.com/a2aproject/A2A)
|
|
- [Linux Foundation Announcement](https://www.linuxfoundation.org/press/linux-foundation-launches-the-agent2agent-protocol-project)
|
|
|
|
### CLI Integration
|
|
- [Using Gemini CLI as Claude Subagent](https://aicodingtools.blog/en/claude-code/gemini-cli-as-subagent-of-claude-code)
|
|
- [Claude Code + Gemini CLI Integration](https://gist.github.com/AndrewAltimit/fc5ba068b73e7002cbe4e9721cebb0f5)
|
|
|
|
### MCP (Reference)
|
|
- [MCP Specification](https://modelcontextprotocol.io/specification/2025-11-25)
|
|
- [Rust MCP SDK](https://github.com/modelcontextprotocol/rust-sdk)
|