DEAR_LLM.md for Sketch Repository

Repository Architecture

Sketch is an agentic coding tool with a multi-layer architecture:

  1. Outer Sketch: The CLI command (sketch) running on the user's machine
  2. Inner Sketch: The binary running inside Docker containers
  3. Container System: Docker containers isolate work environments

Key Components

Outer Sketch (Host)

  • cmd/sketch/main.go: Entry point and CLI definitions
  • dockerimg/: Container management (building, configuration, orchestration)

Inner Sketch (Container)

  • loop/agent.go: Core agent logic and tool implementations
  • loop/server/: Server implementation inside containers

Shared Components

  • webui/: Web-based user interface components
  • llm/: Language model interaction

Development Workflows

Development Modes

  1. Container Mode (Default): go run ./cmd/sketch -C /path/to/codebase

    • Creates Docker container for code analysis
    • Safe and isolated environment
  2. Unsafe Mode: go run ./cmd/sketch -unsafe -C /path/to/codebase

    • Runs directly on host OS without containerization
    • Useful for quick testing during development

Source/Container Relationship

  • Target codebase: Copied into container via COPY . /app
  • Sketch itself: Binary built specifically for containers (GOOS=linux)
  • Container configuration: Generated based on target codebase detection

Common Gotchas

  1. Container Caching: Docker image caching may require -force-rebuild-container when the target codebase changes

  2. Two Git Contexts:

    • Sketch's own repository (where outer and inner Sketch code lives)
    • The target repository being analyzed by Sketch
    • Keep these separate in your mental model
  3. Inner/Outer Code Changes:

    • Changes to inner Sketch (loop/agent.go) are built into the Linux binary for containers
    • Changes to outer Sketch (dockerimg/) affect how containers are created

Flags and Settings

  • -unsafe: Run without containerization
  • -force-rebuild-container: Force Docker image rebuilding
  • -verbose: Show detailed output and logs
  • -C /path/to/repo: Specify target codebase path

See CONTRIBUTING.md for additional development guidance.