grokkit/todo/queued/pprof.md

63 lines
1.7 KiB
Markdown
Raw Normal View History

# `grokkit agent` pprof integration
## Priority: 10 of 12
**Description**: Go pprof profiling wrappers (CPU/memory/allocs). Captures profiles during agent runs, AI-analyzes hotspots.
## Problem It Solves
Profile.md is high-level; pprof enables raw data + AI opts for slow cmds (agent loops).
## Benefits
- **Capture**: `go test -cpuprofile` or runtime/pprof.
- **Analyze**: Feed pprof text/top to Grok ("Optimize this flamegraph").
- **Safe**: Temp .pprof files, no web UI.
- **Integrate**: Auto-profile long agents.
## Agent Tool Examples
```
grokkit agent "Profile cmd/agent.go benchmark, suggest fixes"
# Grok: pprof cpu → "30% in StreamSilent, batch calls"
```
## High-Level Implementation
1. **Detect**: `go tool pprof --version`.
2. **Tool schemas**:
- `cpu_profile(duration: int) → pprof_text`
- `analyze(profile_data: string) → suggestions`
3. **Wrappers** in `internal/tools/pprof.go`:
```go
func CPUProfile(ctx context.Context, args map[string]any) (string, error)
```
4. **Agent integration**: Flag-triggered profiling.
5. **Safety**:
- Tempdir files (os.TempDir).
- No --http/--pdf.
- Config: `[tools.pprof.enabled]`.
## Flags / Config
| Key | Description |
|-----|-------------|
| `tools.pprof.enabled` | Enable pprof tools |
| `--profile-cpu` | Auto-cpu on agent |
## Implementation Notes
- **Capture**: runtime/pprof.StartCPUProfile, or `go test -cpuprofile`.
- **Parse**: `go tool pprof -text`.
- **Errors**: PprofError.
- **Tests**: Mock profiles.
- **Effort**: Medium (~180 LOC). Ties to profile.md.
- **Prereq**: Go stdlib pprof.
## ROI
**High** for perf:
| Stage | Covered |
|-------|---------|
| Profile | **pprof** ← new |
| Analyze | profile.md ✓ |