| Josh Bleecher Snyder | 6d4c7ea | 2025-05-12 12:14:24 -0700 | [diff] [blame] | 1 | Sketch is an agentic coding tool with a two-layer architecture: |
| 2 | |
| 3 | 1. Outer sketch: CLI command running on user's machine |
| 4 | 2. Inner sketch: Binary running inside Docker containers for isolated work |
| 5 | |
| 6 | Both 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 | |
| Josh Bleecher Snyder | 322dae9 | 2025-06-04 12:27:07 -0700 | [diff] [blame] | 10 | - termui, webui: both interfaces operate at all times |
| 11 | - loop: state machine that manages agent conversation flow |
| Josh Bleecher Snyder | 6d4c7ea | 2025-05-12 12:14:24 -0700 | [diff] [blame] | 12 | |
| 13 | ## Development Guidelines |
| 14 | |
| 15 | - Do NOT git add or modify .gitignore, makefiles, or executable binaries unless requested |
| Josh Bleecher Snyder | 322dae9 | 2025-06-04 12:27:07 -0700 | [diff] [blame] | 16 | - When adding, removing, or changing tools, update both termui and webui |
| 17 | - Unless explicitly requested, do not add backwards compatibility shims. Just change all the relevant code. |
| Josh Bleecher Snyder | 385da54 | 2025-05-12 19:18:10 -0700 | [diff] [blame] | 18 | |
| Philip Zeyliger | e79a44b | 2025-07-16 21:00:43 -0700 | [diff] [blame] | 19 | ## Building |
| 20 | |
| 21 | You can build the sketch binary with "make". The webui directory has some |
| 22 | standalone "npm run dev" capability, but the main build is "make". |
| 23 | |
| Josh Bleecher Snyder | 385da54 | 2025-05-12 19:18:10 -0700 | [diff] [blame] | 24 | ## Meta |
| 25 | |
| Philip Zeyliger | e79a44b | 2025-07-16 21:00:43 -0700 | [diff] [blame] | 26 | The program you are working on is Sketch. The program you are running is |
| 27 | Sketch. This can be slightly confusing: Carefully distinguish the prompt and |
| 28 | tools you have from the codebase you are working on. Modifying the code does |
| 29 | not change your prompt or tools. |
| Josh Bleecher Snyder | 6e35332 | 2025-05-21 18:21:24 +0000 | [diff] [blame] | 30 | |
| Philip Zeyliger | e79a44b | 2025-07-16 21:00:43 -0700 | [diff] [blame] | 31 | To start a copy of sketch, if you don't have an ANTHROPIC_API_KEY in your env |
| 32 | already, you can use: |
| 33 | |
| 34 | ANTHROPIC_API_KEY=fake sketch -skaband-addr= -addr ":8080" -unsafe |
| 35 | |
| 36 | To browse the copy of sketch you just started, browse to localhost:8080. |
| Josh Bleecher Snyder | 78e7cf9 | 2025-05-23 14:33:34 -0700 | [diff] [blame] | 37 | |
| Josh Bleecher Snyder | 6e35332 | 2025-05-21 18:21:24 +0000 | [diff] [blame] | 38 | ## Testing |
| 39 | |
| 40 | - Do NOT use the testify package. Write tests using the standard Go testing library only. |
| Philip Zeyliger | 254c49f | 2025-07-17 17:26:24 -0700 | [diff] [blame] | 41 | |
| 42 | ## Frontend Guidelines |
| 43 | |
| 44 | - Always use relative URLs in frontend code (e.g., "./git/head" instead of "/git/head") to ensure proper routing through proxies. |
| 45 | - Always use Go structs for input and output types of JSON HTTP requests and use go2ts |
| 46 | to convert them to typescript. |