Scripts written in
plain English
ThinkingScript is a shebang interpreter for natural language.
Write what you want. Run it. Install it.
Write your script in plain English
Create a .md file. Describe what you want done. It doesn't need to be perfect.
#!/usr/bin/env think
---
model: claude-haiku-4-5-20251001
---
Figure out where I am and tell me the current
weather conditions. If arguments are passed in,
it could be a zip code or city. If not, try to
geolocate.
Output format:
City, State
Temperature, conditions. Wind and humidity.
Run it
Pass your script to think. It sends the prompt to an LLM, which figures out what commands to run. You approve each one.
$ think weather.md "San Francisco"
San Francisco, CA
62°F, partly cloudy. Wind: 12 mph W. Humidity: 68%.
Install it
When you're happy with it, install it. Now you can just run weather from anywhere.
$ thought install weather.md
Installed weather.md → ~/.thinkingscript/thoughts/weather
$ weather "New York"
New York, NY
45°F, clear skies. Wind: 8 mph NW. Humidity: 52%.
Compose them like Unix tools
stdout is sacred. Only script output goes there, so you can pipe .md files together just like grep, awk, or anything else.
$ cat raw-data.csv \
| think clean.md \
| think analyze.md \
| think format-report.md > report.md
Or install them all and it gets even cleaner.
$ cat raw-data.csv | clean | analyze | format-report > report.md
Unix native
Pipes, redirects, shebangs. It all works. Compose .md files like any other tool in your pipeline.
Approval at every step
Every command, env read, and argument gets your approval first. Pattern matching means repeated workflows get faster over time.
Just a file
No build step. No compilation. No project structure. It's a text file with a shebang. Write it, run it, install it.
It handles the messy stuff
The prompt here is informal, full of hedges, vaguely remembered flags. That's the whole point. You don't need to get the wording perfect.
#!/usr/bin/env think
---
model: claude-haiku-4-5-20251001
---
Create a new Rails application.
Check the first argument for a path, if its not
there prompt me for it, then run `rails new`
with that path.
When that's done, cd into that directory, run
`rails server` and then open the browser to
the URL that's running.
$ think rails-new.md ~/Code/my-app
You see where this is going? You describe the *intent*, not the implementation.
Get started
$ go install github.com/thinkingscript/cli/cmd/think@latest
$ go install github.com/thinkingscript/cli/cmd/thought@latest
You'll need an Anthropic API key. Set it in your environment:
$ export ANTHROPIC_API_KEY=sk-ant-...
Then write your first script and run it.
#!/usr/bin/env think
Print "hello world" and exit.
$ think hello.md
hello world
If you want to install it so you can run hello from anywhere:
$ thought install hello.md
$ export PATH="$HOME/.thinkingscript/thoughts:$PATH"
$ hello
hello world