blob: 4983cac4577770b73dbc1aa9c7ec8bd35189ae2e [file] [log] [blame] [view]
Josh Bleecher Snyder6d4c7ea2025-05-12 12:14:24 -07001Sketch is an agentic coding tool with a two-layer architecture:
2
31. Outer sketch: CLI command running on user's machine
42. Inner sketch: Binary running inside Docker containers for isolated work
5
6Both layers use the same entrypoint (cmd/sketch). Outer sketch sets up containerization and starts inner sketch. Changes made in inner sketch are pushed via git to outer sketch.
7
8## Core Packages
9
10- termui, webui: Both interfaces operate at all times
11- loop: Central state machine that manages agent conversation flow
12- claudetools: Tool calls available to LLMs
13- llm: Common LLM interface and conversation management, with provider-specific integrations
14
15## Development Guidelines
16
17- Do NOT git add or modify .gitignore, makefiles, or executable binaries unless requested
18- When changing tool schemas, update both termui and webui
19- For unsafe/recursive development, use `-unsafe` flag
20- Unless explicitly requested, do not add backwards compatibility shims
Josh Bleecher Snyder385da542025-05-12 19:18:10 -070021
22## Meta
23
24The program you are working on is Sketch. The program you are running is Sketch. This can be slightly confusing: Carefully distinguish the prompt and tools you have from the codebase you are working on. Modifying the code does not change your prompt or tools.
Josh Bleecher Snyder6e353322025-05-21 18:21:24 +000025
Josh Bleecher Snyderd9b1eb42025-05-28 21:59:54 -070026To start a copy of sketch, use -skaband-addr="" -addr ":8080" -unsafe -prompt "some appropriate prompt". Do not use pkill or killall to stop background sketch processes--your process is called sketch! Instead, kill the pid provided by the bash tool when you started the background process. Do not browse to :80--that is your process! Instead browse to :8080.
Josh Bleecher Snyder78e7cf92025-05-23 14:33:34 -070027
Josh Bleecher Snyder6e353322025-05-21 18:21:24 +000028## Testing
29
30- Do NOT use the testify package. Write tests using the standard Go testing library only.