Hey HN, I'm building Plandex (
https://plandex.ai), an open source, terminal-based AI coding engine for complex tasks.
I built Plandex because I was tired of copying and pasting code back and forth between ChatGPT and my projects. It can complete tasks that span multiple files and require many steps. It uses the OpenAI API with your API key (support for other models, including Claude, Gemini, and open source models is on the roadmap). You can watch a 2 minute demo here: https://player.vimeo.com/video/926634577
Here's a prompt I used to build the AWS infrastructure for Plandex Cloud (Plandex can be self-hosted or cloud-hosted): https://github.com/plandex-ai/plandex/blob/main/test/test_pr...
Something I think sets Plandex apart is a focus on working around bad outputs and iterating on tasks systematically. It's relatively easy to make a great looking demo for any tool, but the day-to-day of working with it has a lot more to do with how it handles edge cases and failures. Plandex tries to tighten the feedback loop between developer and LLM:
- Every aspect of a Plandex plan is version-controlled, from the context to the conversation itself to model settings. As soon as things start to go off the rails, you can use the `plandex rewind` command to back up and add more context or iterate on the prompt. Git-style branches allow you to test and compare multiple approaches.
- As a plan proceeds, tentative updates are accumulated in a protected sandbox (also version-controlled), preventing any wayward edits to your project files.
- The `plandex changes` command opens a diff review TUI that lets you review pending changes side-by-side like the GitHub PR review UI. Just hit the 'r' key to reject any change that doesn’t look right. Once you’re satisfied, either press ctrl+a from the changes TUI or run `plandex apply` to apply the changes.
- If you work on files you’ve loaded into context outside of Plandex, your changes are pulled in automatically so that the model always uses the latest state of your project.
Plandex makes it easy to load files and directories in the terminal. You can load multiple paths:
plandex load components/some-component.ts lib/api.ts ../sibling-dir/another-file.ts
You can load entire directories recursively:
plandex load src/lib -r
You can use glob patterns:
plandex load src/**/*.{ts,tsx}
You can load directory layouts (file names only):
plandex load src --tree
Text content of urls:
plandex load https://react.dev/reference/react/hooks
Or pipe data in:
cargo test | plandex load
For sending prompts, you can pass in a file:
plandex tell -f "prompts/stripe/add-webhooks.txt"
Or you can pop up vim and write your prompt there:
plandex tell
For shorter prompts you can pass them inline:
plandex tell "set the header's background to #222 and text to white"
You can run tasks in the background:
plandex tell "write tests for all functions in lib/math/math.go. put them in lib/math_tests." --bg
You can list all running or recently finished tasks:
plandex ps
And connect to any running task to start streaming it:
plandex connect
For more details, here’s a quick overview of commands and functionality:
https://github.com/plandex-ai/plandex/blob/main/guides/USAGE...Plandex is written in Go and is statically compiled, so it runs from a single small binary with no dependencies on any package managers or language runtimes. There’s a 1-line quick install:
curl -sL https://plandex.ai/install.sh | bash
It's early days, but Plandex is working well and is legitimately the tool I reach for first when I want to do something that is too large or complex for ChatGPT or GH Copilot. I would love to get your feedback. Feel free to hop into the Discord (
https://discord.gg/plandex-ai) and let me know how it goes. PRs are also welcome!