4.3 KiB
grokkit agent make integration
Description: Wrappers for Makefile targets (test/lint/build/cover). Enables Grok to run/verify builds mid-agent workflow (e.g., "edit, test, fix loops").
Problem It Solves
Agent edits code but can't auto-verify compilation/tests—manual make test context-switch.
Benefits
- Automated verification: Post-edit
make test+ analyze failures. - Dry-runs: Preview
make buildoutput. - Safe: Whitelisted targets, timeout, project-dir.
- Parse results: Extract pass/fail, coverage, errors for next agent step.
- Workflow: "Refactor → test → fix → commit".
Agent Tool Examples
grokkit agent "Fix lint errors in cmd/, run make lint to verify, then test"
# Grok: edits → make lint → "All green!" → make test → fixes failures
grokkit agent "Benchmark changes before commit"
# Grok: make test-cover → "Coverage drop 2%" → optimizations
High-Level Implementation
- Detect:
test -f Makefileormake --version. - Tool schemas:
run_target(target: string) → {output: string, success: bool}dry_run(target: string) → simulated_output
- Wrappers in
internal/tools/make.go:func RunTarget(ctx context.Context, args map[string]any) (string, error) - Agent integration: Tool call → parse stdout → feed to Grok ("Tests failed: fix?").
- Safety:
- Whitelist: test, lint, build, test-cover, install.
- 300s timeout.
- No sudo/privileged.
- Config:
[tools.make.enabled].
- Parsing: Grep for "PASS/FAIL", coverage %.
Flags / Config
| Key | Description |
|---|---|
tools.make.enabled |
Enable make tools |
tools.make.timeout |
Per-target timeout (s) |
Implementation Notes
- Commands:
make TARGET(no args). - Extend agent: Loop includes make calls post-edit.
- Errors: MakeError with output.
- Tests: Mock exec, table-driven (success/fail outputs).
- Effort: Low (~120 LOC). Std exec + parsing.
- Prereq: Makefile present.
ROI
High. Agent verification loop:
| Stage | Covered |
|---|---|
| Edit | agent ✓ |
| Verify | make ← new |
| Repo/log | tea/cnotes |
Instant feedback elevates agent reliability.## Work Plan
-
Setup structure: Create
internal/tools/make.goandinternal/tools/make_test.go. Add config flags ininternal/config/config.gofortools.make.enabled(bool, default false) andtools.make.timeout(int, default 300). -
Implement whitelist: Define
validTargets = []string{"test", "lint", "build", "test-cover", "install"}. AddisValidTarget(target string) boolfunc. -
Implement
RunTarget:- Check
tools.make.enabled, Makefile exists (os.Stat("Makefile")), validate target. - Use
exec.CommandContextwith timeout:cd $PROJECT_DIR && make TARGET. - Capture stdout/stderr, return
{output: string, success: bool, exitCode: int}as JSON. - Error wrapping:
MakeError{target, output, exitCode}.
- Check
-
Add
DryRuntool: Simulatemake -n TARGET(no-execute mode), same safety checks. -
Implement parsing helpers:
ParseTestResult(output string) (pass bool, failures int): grep "PASS", "FAIL".ParseCoverage(output string) (float64, error): regex for "%" coverage.ParseErrors(output string) []string: extract compiler/lint errors.
-
Register tools: In
internal/agent/tools.go, addmakeRunandmakeDryRuntool schemas callingRunTarget/DryRun. -
Agent loop integration: Update
internal/agent/run.gopost-edit: auto-callmake testif Makefile exists, parse results, feed to next prompt ("Tests failed: ..."). -
Safety hardening:
- Set
exec.Dir = projectDir,EnvwithoutPATHmods. - Timeout enforcement, kill on ctx cancel.
- Log full output to
cnotes.
- Set
-
Tests (table-driven in
make_test.go):- Mock
exec.Commandreturns (success/fail outputs). - Invalid target → error.
- Timeout simulation.
- Parsing: PASS/FAIL, coverage "92.3%", lint errors.
- Run
go test ./internal/tools -v.
- Mock
-
Docs/Config: Update README with tool examples. Add
[tools.make]sample config. -
Commit: `git commit -m "feat: grokkit agent make integration
- Add make tool wrappers (run_target, dry_run)
- Safety: whitelist, timeout, parsing for tests/cover
- Agent auto-verification loop Closes #"`