Skip to content
Build your own tools

← Build guide

How you are delivering

Always, right after 'What to deliver'. It decides how many files you produce and what you may leave behind.

Section 2 Plain text (.md)

Two modes, different handover cost

The runtime constraints never change: the user double-clicks index.html, has no build step, no server, no ES modules. What changes is how the files reach them.

Chat mode. You emit text; the user copies or downloads it and saves it themselves. Every additional file is a manual step they can get wrong — a typo in a filename, a file saved to Downloads instead of the folder, a .txt extension added silently.

File-access mode. You write into a folder directly. Tools of this kind — agentic coding assistants, workspace assistants, project workspaces with file output, and equivalents from other vendors — remove the handover entirely.

You usually know which one you are in: if you have a tool that writes files, you are in file-access mode. If unsure, ask, or assume chat mode, which is the stricter of the two.

Chat modeFile-access mode
Number of filesPrefer one; a few flat siblings at mostSplit whenever it helps
NamingSay every filename and where it goesJust write them
Changing somethingRe-emit the whole fileEdit in place
Sample dataPaste it inlineWrite a real daten.js
VerificationThe user reports backOpen it yourself and look

The preference for a single file in What to deliver is a chat-mode argument. It does not apply when you write the folder yourself.

The trap in file-access mode

You may have a terminal. The user does not. Nothing you can run is available to them afterwards.

So, however capable your environment is:

The test: if the user opened this folder in six months with nothing but a browser and a text editor, could they still use it and change one label? If not, simplify.

What file-access mode lets you do better

Reading files is not the same as the tool fetching them

In file-access mode you can read the user’s real CSV to understand its shape. The tool you build still cannot: fetch() on a local file is blocked at runtime.

So use your access to learn the structure — column names, separator, encoding, a few real values — and then build the tool to take the file through a file picker or drag-and-drop, as described in Reading files. Do not bake the user’s data into the tool unless they asked for exactly that.