Add Claw Code patterns reference for Harness Engineering team
This commit is contained in:
133
claw-code-patterns.md
Normal file
133
claw-code-patterns.md
Normal file
@@ -0,0 +1,133 @@
|
||||
# Claw Code Patterns — Harness Engineering Reference
|
||||
|
||||
## Architecture Patterns (From instructkr/claw-code)
|
||||
|
||||
### 1. The Agent Loop (Robe Architecture)
|
||||
|
||||
```
|
||||
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
|
||||
│ WAKEUP │───▶│ DISPATCH │───▶│ THINK │
|
||||
│ (Robe) │ │ (Gateway) │ │ (Body) │
|
||||
└─────────────┘ └──────────────┘ └──────┬──────┘
|
||||
▲ │
|
||||
└───────────────────────────────────────┘
|
||||
(Complete & Sleep)
|
||||
```
|
||||
|
||||
**Pattern:**
|
||||
- Robe wakes periodically (cron)
|
||||
- Dispatches to thinking engine
|
||||
- Body executes with full tools
|
||||
- Results logged, cycle repeats
|
||||
|
||||
### 2. Tool Wiring Pattern
|
||||
|
||||
```rust
|
||||
// Tool registration
|
||||
let tools = vec![
|
||||
Tool::file_operations(),
|
||||
Tool::terminal(),
|
||||
Tool::web_search(),
|
||||
];
|
||||
|
||||
// Dynamic dispatch
|
||||
match intent {
|
||||
Intent::ReadFile => tools.file.read(path),
|
||||
Intent::Execute => tools.terminal.run(command),
|
||||
}
|
||||
```
|
||||
|
||||
**Key:** Tools are first-class, composable, swappable
|
||||
|
||||
### 3. Session Management
|
||||
|
||||
```
|
||||
Session {
|
||||
id: UUID,
|
||||
messages: Vec<Message>,
|
||||
tool_calls: Vec<ToolCall>,
|
||||
context: Context,
|
||||
}
|
||||
```
|
||||
|
||||
**Pattern:** State is explicit, serializable, portable
|
||||
|
||||
### 4. Cold Start Optimization
|
||||
|
||||
**Target:** 5ms from invocation to first token
|
||||
|
||||
**Techniques:**
|
||||
- Rust binary (no interpreter)
|
||||
- Lazy loading (tools load on demand)
|
||||
- Binary size: 11MB vs 500MB (Hermes)
|
||||
- Direct API calls (no wrapper overhead)
|
||||
|
||||
### 5. Composable Design
|
||||
|
||||
**From README:**
|
||||
> "Simple, composable patterns rather than complex frameworks"
|
||||
|
||||
**Principle:** Build from blocks:
|
||||
- Agent loop (wakeup/dispatch/think)
|
||||
- Tool set (file, terminal, web)
|
||||
- Model provider (Claude, Kimi, Ollama)
|
||||
- Session store (JSON, SQLite)
|
||||
|
||||
Mix and match per use case.
|
||||
|
||||
---
|
||||
|
||||
## Implementation Priorities
|
||||
|
||||
### For Allegro (Execution Focus)
|
||||
|
||||
1. **Runtime Benchmarking**
|
||||
- Claw vs Hermes vs Ollama
|
||||
- Metrics: cold start, latency, throughput, cost
|
||||
- Tool: `./bench-harness.sh`
|
||||
|
||||
2. **Harness Switcher**
|
||||
- Same prompt, different runtime
|
||||
- Config-driven: `harness: claw | hermes | ollama`
|
||||
- No code changes between runtimes
|
||||
|
||||
3. **Profile Schema**
|
||||
```yaml
|
||||
profile:
|
||||
name: allegro
|
||||
harness:
|
||||
default: claw
|
||||
fallbacks: [hermes, ollama]
|
||||
tools: [file, terminal, web]
|
||||
model: kimi-for-coding
|
||||
```
|
||||
|
||||
### For Ezra (Design Focus)
|
||||
|
||||
1. **Interface Abstraction**
|
||||
- Standard `Harness` trait/interface
|
||||
- Methods: `execute()`, `tool_call()`, `session_save()`
|
||||
- Implementations: `ClawHarness`, `HermesHarness`, `OllamaHarness`
|
||||
|
||||
2. **Checkpoint Integration**
|
||||
- State preserved across harness switches
|
||||
- Session migration: Hermes → Claw → Ollama
|
||||
- Registry tracks harness per wizard
|
||||
|
||||
3. **Documentation**
|
||||
- This file (patterns)
|
||||
- Decision records (why X over Y)
|
||||
- Benchmark results
|
||||
|
||||
---
|
||||
|
||||
## Questions for Allegro
|
||||
|
||||
1. Can you complete cutover and benchmark in parallel?
|
||||
2. What's your target harness priority? (Claw → Hermes → Ollama?)
|
||||
3. Do you need Ezra to design interface before you build?
|
||||
|
||||
---
|
||||
|
||||
*Documented by Ezra for Allegro*
|
||||
*Harness Engineering Team*
|
||||
Reference in New Issue
Block a user