The Craftsman's
Manual
Everything you need to install, configure and work with DAEDALUS — the AI coding agent that lives only in your terminal. Reading time: about ten minutes.
01Overview #
DAEDALUS is a coding agent powered by Claude. You give it a task in plain language; it reads your project, decides what to change, asks your permission, makes the change, and runs your tests to prove it worked.
It has three deliberate limits:
- Terminal only. No GUI, no browser tab, no editor plugin. If it isn't started in an interactive terminal, it exits.
- One folder. File tools can only touch the folder you launched it from and what's inside it.
- Asks first. Writing files and running commands need your approval, unless you turn that off.
02Requirements #
| Need | Details |
|---|---|
| Node.js 20+ | Check with node --version. Get it from nodejs.org. |
| A terminal | Windows Terminal, PowerShell, macOS Terminal, iTerm2, or any Linux terminal. A terminal with 24-bit colour looks best. |
| Anthropic credentials | An API key from the Anthropic Console, or a login made with the ant CLI. See API key & login. |
03Install #
One line. Pick whichever you like:
Try it without installing
npx daedalusrh
Install it for good
npm install -g daedalusrh
After a global install the short command daedalus works in any folder. Check it with daedalus --version.
Other package managers
pnpm dlx daedalusrh # or: pnpm add -g daedalusrh bunx daedalusrh # or: bun add -g daedalusrh yarn dlx daedalusrh
04API key & login #
DAEDALUS talks to Claude through the Anthropic API using your own account, so usage is billed to you. It picks up credentials in this order — the first one found wins:
ANTHROPIC_API_KEYenvironment variableANTHROPIC_AUTH_TOKENenvironment variable- A profile saved by
ant auth login
Option A — API key
$env:ANTHROPIC_API_KEY = "sk-ant-..."
setx ANTHROPIC_API_KEY "sk-ant-..."
export ANTHROPIC_API_KEY=sk-ant-... # add to ~/.bashrc or ~/.zshrc to keep itOption B — log in once
If you use Anthropic's ant CLI, run ant auth login once. DAEDALUS will use that profile automatically — no key to copy around.
Never paste your key into a chat, a commit or a screenshot. If it leaks, revoke it in the Anthropic Console and make a new one.
05Your first task #
Go into a project folder and start the agent:
cd ~/my-app daedalus
Or hand it a task straight away:
daedalus "add a /health endpoint and test it"
A typical turn looks like this:
─────────────────────────────────────── ◇ ask · ↑0 ↓0 ❯ add a /health endpoint and test it ✦ thinking │ Read the server routes first, then add the endpoint and run the tests. ╭─ ◫ read_file read src/server.js ╰─ ✓ 48 lines read · 5ms ╭─ ✎ edit_file edit src/server.js │ - "/": () => "hello", │ + "/": () => "hello", │ + "/health": () => JSON.stringify({ ok: true }), │ allow? [y] yes [n] no [a] always › y ╰─ ✓ edited src/server.js · 4ms ╭─ ❯ run_command $ npm test │ allow? [y] yes [n] no [a] always › y │ 12 passing ╰─ ✓ exit 0 · 2.1s Added GET /health returning { ok: true }. All 12 tests pass. ✻ forged in 14.2s · ↑3.3K ↓530 tokens · 5.0K from cache
06Reading the interface #
| You see | What it means |
|---|---|
◇ ask / ◆ auto | The status line above each prompt. ask means writes and commands need your approval; auto means they run without asking. The arrows show tokens sent ↑ and received ↓ this session. |
| Shimmering spinner | The model is working. The timer counts seconds; Ctrl+C stops it. |
✦ thinking | A summary of the model's reasoning, in grey italics behind a │ gutter. |
Boxed card ╭─ … ╰─ | One tool call: the tool, what it touched, any diff or output, and how long it took. ✓ is success, ✗ is an error or a declined action. |
✻ forged in … | End of a turn: total time and tokens, including how much came from the prompt cache. |
Replies are rendered as light markdown: headings, bullet and numbered lists, bold, inline code and boxed code blocks.
07Approvals #
Reading is free. Changing things needs a yes. When a tool needs approval you'll see a preview first — a red/green diff for edits, the first lines of the file for writes, the exact command for shell runs — then:
| Key | Effect |
|---|---|
| y | Allow this one action. |
| n (or anything else) | Decline. The agent is told you said no and picks another approach instead of retrying the same thing. |
| a | Allow this and every later action for the rest of the session (turns on auto mode). |
Type /auto at the prompt any time to switch auto-approve on or off. The status line shows which mode you're in.
08Commands & keys #
| Command | What it does |
|---|---|
/help | Show the command list. |
/clear | Forget the conversation and start fresh (also clears the screen). |
/auto | Toggle auto-approve for writes and shell commands. |
/cost | Tokens used this session: input, cache reads and output. |
/exit or /quit | Leave. |
| Ctrl+C | During a turn: stop it. At the empty prompt: quit. |
The conversation is remembered across turns until you /clear or quit, so you can say things like "now add a test for that too".
09Writing good tasks #
- Say what "done" looks like. "Fix the login bug — the tests in
auth.test.jsshould pass" beats "fix login". - Name files when you know them. It can search, but a pointer saves time and tokens.
- One task at a time. Big rewrites go better as a few smaller turns.
- Any language works. It replies in the language you write in.
- Interrupt freely. If the thinking goes the wrong way, press Ctrl+C and steer.
10Tools #
The agent can do exactly six things. Nothing else is available to it.
| Tool | Approval | Behaviour |
|---|---|---|
list_dir | free | Lists one folder (not recursive), folders first. |
read_file | free | Returns numbered lines, up to 2,000 at a time; larger files are read in windows. |
search | free | Regex search across files. Skips node_modules, .git, dist, build, .next, __pycache__, .venv, binary files and files over 1 MB. Up to 200 matches. |
write_file | asks | Creates or overwrites a file; creates missing folders. |
edit_file | asks | Replaces one exact snippet. Refuses if the snippet is missing or appears more than once. |
run_command | asks | Runs a shell command in the workspace (cmd.exe on Windows, /bin/sh elsewhere). Stopped after 120 seconds. Output is capped at 30,000 characters. |
11Configuration #
| Setting | Default | Purpose |
|---|---|---|
ANTHROPIC_API_KEY | — | Your API key. See API key & login. |
DAEDALUS_MODEL | claude-opus-5-5 | Which Claude model to use. |
| Launch folder | current directory | The workspace. File tools can't leave it — cd into the right project before starting. |
12Model & limits #
- Model: Claude Opus 5.5 by default, with adaptive thinking at high effort.
- Reply length: up to 64,000 output tokens per reply.
- Fallback: if the main model declines a request, the API can retry it on another Claude model automatically.
- Caching: repeated context is cached, which makes long sessions faster and cheaper.
/costshows the cache reads. - Memory: only the current session. Nothing is remembered after you quit.
13Safety model #
- Workspace lock: every file path is resolved against the launch folder; anything that points outside (
../, absolute paths) is refused. - Approval gate: writes, edits and commands wait for you unless auto mode is on.
- Visible changes: you see the diff or file preview before approving.
- Timeouts: shell commands are killed after 120 seconds.
The workspace lock applies to the file tools. A shell command runs with your user permissions and can reach anything you can. Read commands before pressing y, and be careful with auto mode in folders you care about.
14Privacy & data #
To reason about your code, DAEDALUS sends these to the Anthropic API as part of the conversation:
- what you type,
- the contents of files it reads and the results of searches,
- the output of commands it runs,
- your workspace path and operating system name.
Nothing is sent anywhere else, and DAEDALUS keeps no logs on disk. Files it never reads are never sent. Anthropic's handling of API data is described in their privacy policy and commercial terms.
Don't start it in a folder full of secrets (like a home directory with .env files) unless you need to. A focused project folder keeps the context small and private.
15Cost #
DAEDALUS itself is free and MIT-licensed. You pay Anthropic for the tokens it uses, at the normal API price of the model you've chosen. To keep costs down:
- run it inside the specific project, not a huge parent folder;
/clearbetween unrelated tasks so old context isn't resent;- check
/costnow and then; - set a monthly spend limit in the Anthropic Console.
16Troubleshooting #
DAEDALUS only runs in an interactive terminal
It was started with its input or output piped or redirected, or from a tool that isn't a real terminal. Open a terminal window and run daedalus directly.
✗ No valid credentials
No API key was found, or the key is wrong or revoked. Set ANTHROPIC_API_KEY in the same terminal window (or open a new window after setx), or run ant auth login.
✗ Rate limited
Your account hit its request or token limit. Wait a minute and try again; higher limits come with higher usage tiers in the Anthropic Console.
✗ API error 4xx / 5xx
A 400 usually means an invalid model name in DAEDALUS_MODEL. A 5xx is a temporary server problem — the SDK already retries twice, so try again shortly.
! The model declined this request
The request was refused by the model's safety checks, including the fallback model. Rephrase the task or split it into smaller steps.
! Output hit the token limit mid tool call
The agent tried to write something too large in one go. Ask for smaller steps, e.g. one file at a time.
daedalus is not recognized as a command
The global install didn't run or npm's global folder isn't on your PATH. Run npm install -g daedalusrh again and open a new terminal window — or skip installing and use npx daedalusrh.
Colours or box lines look broken
Your terminal doesn't support 24-bit colour or the font lacks box-drawing characters. Windows Terminal and recent PowerShell on Windows 10/11 work well; try a font like Cascadia Code or JetBrains Mono.
17Uninstall #
npm uninstall -g daedalusrh
That's it — DAEDALUS stores nothing else on your machine. If you only ever used npx, there's nothing to uninstall.