grokkit/todo/queued/scaffold.md
Greg Gauthier b884f32758
All checks were successful
CI / Test (push) Successful in 33s
CI / Lint (push) Successful in 25s
CI / Build (push) Successful in 19s
chore(todo): add priorities to queued items and new tool integration plans
- Added priority markers (e.g., "Priority: X of 12") to existing queued TODOs like audit, changelog, profile, scaffold.
- Introduced new detailed TODO markdowns for agent integrations: cnotes, git-chglog, gotools, make, pprof, rg, tea.
- Enhances planning for grokkit agent tooling ecosystem.
2026-03-02 23:42:06 +00:00

4.7 KiB
Raw Blame History

grokkit scaffold

Priority: 1 of 12

Description: AI-powered code generation that creates new files from natural language descriptions, learning from your existing codebase patterns to produce idiomatic, ready-to-compile output.

Problem It Solves

Every existing grokkit command operates on existing files (edit, agent, lint, docs, testgen). There is no command to create a new file from scratch. Developers spend significant time writing boilerplate for new handlers, services, models, CLI commands, middleware, etc. scaffold fills this gap.

Benefits

  • Pattern-aware: Reads similar existing files for package names, import styles, error handling conventions, struct naming, and logger usage before generating.
  • Idiomatic output: Produces code that looks like it was written by the same developer — same patterns as the rest of the codebase, not generic AI output.
  • Multi-language: Works for any language the project already supports (Go, Python, JS/TS, etc.), with lang detected from the output path or --lang flag.
  • Optional test companion: With --with-tests, also generates a corresponding test file using the same testgen prompt logic.
  • Safe preview: Shows a diff/preview before writing, requires confirmation (or --yes to skip).
  • No overwrites: Refuses to overwrite an existing file unless --force is passed.

CLI Examples

# Generate a new Cobra CLI command file
grokkit scaffold cmd/export.go "export command that writes chat history to JSON or CSV"

# New internal package
grokkit scaffold internal/cache/cache.go "simple in-memory LRU cache with TTL support"

# Generate with a companion test file
grokkit scaffold internal/git/tag.go "functions to list and create git tags" --with-tests

# Python module
grokkit scaffold src/auth/jwt.py "JWT encode/decode utilities using PyJWT"

# Skip confirmation
grokkit scaffold cmd/webhook.go "webhook command that posts PR descriptions to Slack" --yes

# Preview only (no write)
grokkit scaffold cmd/watch.go "file watcher that reruns lint on save" --dry-run

High-Level Implementation

  1. Input validation: Check target path doesn't already exist (error unless --force). Detect language from file extension.
  2. Context harvesting: Walk sibling files in the same directory and the most structurally similar files in the project (e.g., other cmd/*.go if generating a command). Read them for patterns.
  3. Prompt construction:
    • System: "You are an expert Go/Python/etc. engineer. Given existing code samples, generate a new file that matches the codebase's conventions exactly. Return only the file content — no explanations, no markdown."
    • User: paste harvested sibling files as context + target path + description.
  4. Streaming response: Use client.StreamSilent (same as edit/testgen).
  5. Clean output: Run through grok.CleanCodeResponse to strip any markdown fences.
  6. Preview: Print file content with a header showing the target path. Prompt (y/n).
  7. Write: Create parent directories if needed (os.MkdirAll), write file.
  8. Optional test generation: If --with-tests, reuse testgen logic to generate companion test file with the same preview/confirm flow.

Flags

Flag Description
--with-tests Also generate companion test file
--yes / -y Skip confirmation prompt
--dry-run Preview only, do not write
--force Overwrite if target file already exists
--lang Override language detection (go, python, js, ts, rust, ruby)
--model / -m Override model
--context-files Comma-separated paths to use as context (overrides auto-detection)

Implementation Notes

  • Context size: Cap harvested context at ~4000 tokens to avoid prompt bloat. Prefer the most relevant files (same directory, same package name for Go).
  • Go specifics: Extract package name from sibling files and inject it at the top of the prompt so the AI uses the correct package declaration.
  • Reuse existing patterns: Share internal/linter.DetectLanguage, grok.CleanCodeResponse, and the standard preview/confirm UX from edit.go.
  • Effort: Medium (~250350 LOC). Most complexity is in the context-harvesting logic.

ROI

High. This closes the only remaining gap in grokkit's file lifecycle coverage:

Lifecycle stage Command
Create new file scaffold ← missing
Edit existing file edit
Multi-file changes agent
Review changes review
Document code docs
Generate tests testgen
Commit commit

Developers scaffold new files multiple times per day. Making that AI-assisted and pattern-aware is a force multiplier for the entire tool.