Start here
Coding agents on your Mac. An invite is required.
About Cedrus
This is my take on a harness: the setup of tools and rules that runs coding agents for you. The less of it, the better. Fewer layers, less process.
Shit’s going to break. Using it and fixing it is how you come to understand all of it. I think harnesses like this will be useless in about a year, once agents plan and review their own code far more efficiently.
Cedrus puts a Desk on your Mac: one window full of tabs. A Claude guide inside it finishes setup. After that, you ask for work in English. Coding agents, the AI workers that read and change your project, do the work. You check the result in the app; they handle the code and merge.
The work uses online services. Agents send chat and project content to the AI providers you sign into, and shipped changes go to GitHub. Cedrus’s separate account setup does not keep that work on your Mac. Start with a project that is safe to share with those services.
Invite required
Cedrus is private. You cannot download it until I add you. If you do not have an invite yet, stop here and ask me for one. Do not hunt for a public install line.
Getting started
- Get a paid Claude account.
- Open Terminal once.
- Paste one install line.
- Answer the SETUP guide, one question at a time.
- Ask for one small thing on a project.
- Watch until it merges or stops and says why.
You are done with this guide when one real change has shipped (merged). GitHub Later during setup is a fine middle stop. Keep this guide on your phone or a second browser tab if you want.
Mac requirements
Open the Apple menu, then About This Mac. This install is built for Apple Silicon, the chips named M1 and newer. If it says Intel, stop and ask whoever invited you. The download is not tested for that Mac.
Claude account
Go to claude.ai. Sign up. Subscribe to a paid Claude plan. SETUP needs Claude for its first login. Other providers can be added afterwards.
Keep using the Claude Mac app if you already like it. It is no longer required. If you get stuck, tell the SETUP guide what you see, or text me.
GitHub
Make a free account at github.com if you do not have one.
Cedrus downloads from a private GitHub release (haikaljeh/cedrus). gh is the command-line tool for GitHub. Without an accepted invite and the right login, the download can return 404 (not found), even though the release exists. Accept my invite, then sign into github.com with gh before you paste the install line.
Missing GitHub tool
Stop and tell me. Do not invent an extra package manager from an old guide. Ask me for an invite, then wait until I say you can paste.
Terminal
Press Cmd + Space. Type Terminal. Enter.
A dark window with a blinking cursor appears. It looks like this:
Paste with Cmd + V. You will live in this window for one command. After that, Cedrus opens its own window. You can quit Terminal.
Command Line Tools
A brand-new Mac may have placeholders for git (file history) and python3 (a tool the installer runs). Apple’s Command Line Tools replace those placeholders with working tools. If the installer prints missing-clt, run this, finish Apple’s popup, then re-run the install line:
xcode-select --install
Cedrus brings what it needs, so skip extra package managers and code editors.
Install
Install Cedrus and open the setup workspace.
Install command
Typing this command gives consent to install Cedrus. Do not pipe yes into it. Do not run it twice at the same time. Ask me for an invite first.
gh release download --repo haikaljeh/cedrus --pattern install.sh --output - | sh
Download error (404)
You will see a line like:
Then log in (you must already be invited), come back, and paste the download line again:
gh auth login
Install result
The install script downloads the tools and sets up the Desk. Its final status is one success line or one refusal line. Wait for that line before deciding what happened; an open Terminal window alone does not mean it finished.
Success looks like:
It should then open the Desk and a workspace named SETUP: Claude guide on one side, a live checklist on the other.
Setup checklist
Install, Login, Accounts, Look, GitHub, Project, Shortcuts, First shipment.
States are only: done, doing, next, waiting on you: …, failed: ….
Install success completes Install. First shipment can wait.
Install problems
Copy the whole cedrus-install: … line and send it to me. Include what you did just before it appeared. If there is no final line yet, keep the window open so we can read it. Common ones:
missing-clt: runxcode-select --installfetch-failed: private; log in withgh auth loginoverlap/destination-occupied/lock-held: something else is already using those pathssetup-failed/desk-failed
Do not run uninstall because you are impatient. Do not install into a random folder. Cedrus keeps its private Desk data in ~/.local/share/cedrus. The app you will reopen later is ~/Applications/Cedrus.app, in your home Applications folder.
Setup
Set up your accounts, preferences, and project folder.
Stay in SETUP. Do not wander into HQ yet. If you quit halfway, reopen Cedrus, go back to SETUP, type /cedrus-setup if the guide is not already there. It resumes from the first checklist row that is not done.
/cedrus-setup
Reopen Cedrus.app; if the checklist is gone, type /cedrus-setup in the SETUP tab.
Login
Sign into Claude in the tab it opens. A browser login is normal. Return to SETUP when it finishes and wait for the login check. A successful browser page alone does not finish the checklist row.
Accounts
Claude first. Then you may add Codex (via Pi / openai-codex), xai, and extras. Pi runs some of those other providers in the Desk; you can leave them for later. Pick a label (a short nickname) and a provider. API keys and tokens are secret strings that let tools use your account. Never paste a password, API key, or token into the guide chat. The login tab opens beside you. DeepSeek types the key inside its own tab.
The Desk must also link the account before workers can use it. If the guide says login is ready but the Desk is not linked, wait; do not start a second login.
Look
The default, auto, follows your Mac’s light/dark setting. Other names: light, dark, colorblind-light, colorblind-dark. Pick auto unless you have a reason.
GitHub
Pick Later to finish install with shipping off. Shipping stays off until GitHub identity and repo access check out. Now reuses a safe existing login, or opens a separate browser login. If neither works, it defers the step.
Without GitHub you still have a Desk and accounts, but shipping must wait. Come back to this step before your first shipment.
Projects folder
It asks where you keep your projects. Use ~/projects and create it if it is missing. This step only sets the folder; it leaves choosing and cloning a repo for later. Checklist row: Projects folder set. Adding a project is Cmd+N, after this.
Shortcuts
The guide will ask you to press keys so it can prove they work. Press them in the Desk, not in this browser.
| Cmd+T | New Claude tab (an agent tab in this room). SETUP checks this one off. |
| Cmd+N | New project workspace (a big picker). Counted when the picker opens, not when a clone finishes. SETUP checks this one off. |
| Cmd+W | Close the current pane. Works, but the checklist does not tick it. |
| Cmd+1 … Cmd+9 | Jump to that workspace. Works, but the checklist does not tick them. |
If the checklist will not mark Cmd+W or Cmd+1–9 done, that is expected. Do not smash tabs until it looks right. The section can stay incomplete even after Cmd+T and Cmd+N work. You can skip it and continue.
A room with no project yet: Cmd+T should refuse with “This room has no project yet. Cmd+N adds one.”
First shipment
If the projects folder is empty: no project added yet. That is fine. Skip to reopen. To return later, use a project with GitHub access and working checks; Project requirements explains what it needs.
If you already have a project: the guide asks which repo and which existing GitHub issue. It ships with /sweep only. Wait for the result to confirm the PR merged. Parked means it stopped; read the reason.
Do not file a fake issue “to see.” Do not start a second sweep by hand.
Reopening and startup
Cedrus.app is ~/Applications/Cedrus.app. Spotlight: type Cedrus.
For daily reopening and saving a long chat, see Extras.
It will ask once whether to open the Desk at login. Default No. Saying yes to the original install command was not a yes to login items.
The Desk
Use rooms, tabs, and panes to follow the work in one window.
Rooms, tabs, and panes
herdr is the tab and pane manager inside the Desk window.
- Desk is the window Cedrus opened.
- Workspace means a room: SETUP, HQ, and one room per project.
- A tab is a conversation or a board. A pane is a split inside a tab. Workers that change things run in panes you can see.
You do not read files in an editor. Tabs are conversations. Keep this guide on your phone if you want a second screen. You do not need two full-screen desktops.
Keyboard shortcuts
Cmd+1…9 changes rooms, so the conversations on screen change too. Select the room with your project’s name before opening a new Claude tab. Cmd+W also closes the tab if that was its last pane; leave busy worker panes open.
HQ
HQ is the board you glance at. It is watch-only. It does not start jobs.
You may see pins, all, a board per project, log, parked, accounts, and api-billing. The two that matter here are parked and accounts.
| parked | Stopped work, and whether it later merged. |
| accounts | Quota (your account’s usage allowance) and how much has been used. |
The money board shows provider credit and local cost estimates where available. Estimates are not invoices; check the provider’s own account page for billing. Some account boards can be absent if their helper is unavailable.
If an HQ tab says STOPPED, ignore it; it's a known bug being fixed.
Ask for a change
Describe a change and the result you want, then use /do.
One change at a time
Ask for one change at a time.
Say what you should see when it is done. If you name two unrelated changes, /do can file two issues and start two jobs. Look for more than one issue link in its reply.
A question such as “why is X slow?” files nothing and starts no job. Ask questions in the chat. Use /do once you want a change made.
GitHub project
In that project’s Claude tab, say the work in English and use /do. That files GitHub issues and starts work. You should get the repo, the issue URLs, and a message that the jobs are running. The next update is done or stuck.
/do
If the issue already exists, this is enough:
/sweep 123
Replace 123 with the issue number. Launch from that project’s tab.
Project requirements
A repo, short for repository, is a project with file history. A local folder alone cannot finish the shipping flow. It needs a connected repo on GitHub that your account can write to, plus that project’s checks and shipping setup.
Start with a repo whoever invited you has prepared. Use Cmd+N to add it to the Desk. If you create an empty folder instead, ask for help connecting it before your first job. Finishing the SETUP GitHub login does not create a repo or give you access to every project.
If /do asks which repo, name the one you intend to change. If access or checks are missing, fix that with your inviter. Repeating the request cannot supply them. For First shipment in SETUP, use an existing issue.
Do not run a local preview yourself. Do not open localhost unless a worker tells you a preview URL in plain words.
Example requests
These still work as the content of an issue:
- “Make the header smaller”
- “Change the blue to green”
- “That’s not what I wanted. The image should be on the right”
Describe the outcome you want. Leave passwords, API keys, and customer exports out of the request and the first project. The workers read project files as well as your chat.
The Foreman
When you ask for work, /do files GitHub issues, the written requests on your project, and starts /sweep. Each issue gets its own Foreman.
The Foreman is a program. It creates a worktree, a separate working copy of the project, then starts helpers and reads their saved result files. That keeps the main copy untouched while the job runs.
Job tabs and panes
Each Foreman has a tab beside the tab you started from. Helper panes open for a task and close after their result is saved. The sweep itself runs in the shared sweeps tab in that workspace.
After the first Foreman starts, its job appears on the board in HQ. Glance there or at the Foreman tab while it runs. Helpers in separate panes work on different parts of the same job. Match the issue number on the board to the link you received when work started.
Agents
Explore reads the project without editing files or running tests; on a small, clear job, it writes the plan and the Foreman skips Planner. For harder work, Planner uses those facts to name the steps, files Executor may change, and checks, without changing the app.
Executor edits the worktree, follows the plan, runs the named checks, and saves changes and results for the Foreman to handle the PR and merge. If a simple plan needs a larger decision, Executor returns needs-plan; the same job goes to Planner once and continues in the same worktree.
Runtime QA checks a safe running copy when live behavior needs proof without an automated test, saves what it saw, and reports pass or fail. It never fixes the app; failures go back to Executor.
A Cold Reviewer checks risky work before auto-merge is enabled, using a different model vendor from Executor, and returns findings. Ordinary work can ship on green tests without this review.
Optional helpers are a Resident Engineer, who settles a routine technical choice from Planner’s supplied options without changing your request; a Research expert, who answers factual questions with sources without editing the product; and Visual QC, who reports visual problems without editing the product.
The saved model settings, called pins, choose who fills each role. A job keeps the settings it started with, so you do not need to pick models while it runs.
The helper names describe jobs; the model names describe the AI doing them. A different model name in another pane can be expected. Each helper saves a result file for the Foreman to read. You do not need to visit each pane or carry replies between them.
Job progress
A Foreman tab is open. Helpers come and go in panes. HQ shows the job moving. You may see tests run. A quiet pane alone does not tell you whether a check is still running or work is blocked; read the latest status before starting anything again.
If a login, trust, or permission prompt interrupts the job, use When it breaks. You should never need to click Merge on GitHub to finish the flow.
Status updates
A run should bother you when it starts and when it is done or stuck. In between, the pane is where to look. For a catch-up in your Claude tab, use /play.
Keep the Mac awake and plugged in until the job is merged or parked. Sleep and lid-close behavior during a running job is not guaranteed.
Merged or parked
The Foreman opens a PR, the proposed change on GitHub, and sets it to merge when the required checks pass. Ordinary work ships on green tests. Risky work also gets an independent review.
Before calling the job done, the run must confirm the merge, any required install, and cleanup of its temporary worktree and branch. Green tests with an unmerged PR are still unfinished work.
If it cannot finish, it parks with a saved reason. Read that reason in HQ’s parked tab, or ask whoever invited you. Do not merge the PR by hand.
Merge confirmation
Chat messages, a busy pane, and a closed issue do not prove a merge.
HQ / the sweep result says it merged, with the PR URL. GitHub shows the change on the default branch. If the project has a live site wired in that repo’s own process, the site updates when main changes. You do not deploy it by hand.
When it breaks
Read the saved reason in HQ’s parked tab.
Reason for stopping
Parked means stopped and waiting, with a saved reason. Open parked in HQ.
Read the reason for the issue you started. You might need to fix GitHub access, name the repo, or ask for help with a failed check. The parked board also keeps recent history, so read any later outcome before assuming an old row is still waiting.
Send whoever invited you the issue or PR link, the full reason, and what you last did. Do not merge the PR or rewrite its branch yourself.
Login and permission requests
SETUP and some logins use waiting on you: …. Do the named thing, such as finish the browser login or press the shortcut, then wait for done.
A worker can also be blocked by a first-time project trust prompt, login, or permission request. Open the named pane and read what it is asking. The Desk reports the stop and leaves the prompt for you to read.
Finish a login or approve a request only when you understand it and recognize the project. If the prompt is unclear, send your inviter a screenshot with private details hidden. Leave the pane open and do not start a second copy of the job.
Correcting a merged change
For a bad merged change, ask for another job: “revert X” or “fix the header.” Say what changed and what you want restored. The workers can test and ship the correction through the same process.
Account usage limits
A paid Claude plan has usage limits. If a new tab refuses to open or a job never starts, check HQ’s accounts tab and read the exact refusal. Cmd+T can refuse based on saved usage information, so its message may describe an earlier check rather than a fresh one.
Wait for the allowance to reset, or ask your inviter whether another account is appropriate. Adding an account explains how to add a login. Repeatedly pressing Cmd+T will not create more allowance.
A job marked ready-undispatched is ready but has not started a worker. When an account has no room to start work, the refused job does not retry automatically. Once the account problem is resolved, ask your inviter how to resume that job and include its issue link.
Stopping a job
There is no friend-safe cancel command documented here. Ask whoever invited you to stop the specific job, and give them its issue link. Closing a busy worker pane is not a clean cancellation.
Keep the Desk available while they help. Do not force-quit random processes or delete Cedrus’s data folders to make a job disappear.
Extras
Reopen the Desk, check work, and manage accounts, projects, and Cedrus.
Reopening Cedrus
Type Cedrus in Spotlight to reopen the same Desk and rooms. The app is at ~/Applications/Cedrus.app.
Closing the Desk window leaves its background session running. Opening Cedrus again focuses the existing window or opens one window on that same session. Double-clicking the app while it is open does not start a second Desk. Closing the window does not cancel work.
Work status
Paste:
/play
Use this in a Claude tab on your Desk. It reads the work status without starting or changing jobs. Its sections are Your call, Landed, Running, Next. Read Your call first for anything that needs your answer, then Landed for completed work.
Opening at login
Only if you turned it on in SETUP. If the window is gone but the app focuses nothing, tell me the exact message. If macOS asks for Automation / System Events to focus the window, grant it. Without that access, the launcher refuses to open a second window.
Saving a chat
In the conversation you are about to clear, run:
/pause
This saves the chat’s notes and tells you whether it is safe to clear. Wait for that reply. If it reports a problem, keep the conversation until it is resolved. Running workers keep going; /pause does not pause them.
Saving also happens during the conversation, so forgetting this once is not a reason to panic. It is the final check before you clear a long chat. When you return, use the catch-up above.
Adding an account
In a Claude tab:
/add-account
Give a label and provider, then finish the login tab. Wait for the Desk to link the account, as in SETUP’s Accounts step. An added login does not by itself mean a running job will change accounts. Ask for help if the job still names the old account in its refusal.
Appearance
Ask the SETUP guide, or tell a Claude tab you want light / dark / auto / colorblind. Do not hand-edit config files.
Connecting GitHub
If you picked Later, return to SETUP with /cedrus-setup and complete GitHub. Wait for the account and project access checks. The login used to download Cedrus and the Desk’s shipping check are separate steps.
Then follow the project requirements before starting work. Do not run random gh auth in Terminal.app unless the guide says so.
Adding a project
Cmd+N opens the picker. That is how you add a project after the folder is set. SETUP never clones a repo for you. After adding it, check the room name before asking for work so the request goes to the intended project.
Updating Cedrus
When whoever invited you says a newer release is ready, use the same private download line in Terminal. If they name a specific version, ask them for the exact line for that version. Do not guess a release number.
Check that your jobs are merged or parked before updating, and ask for help if anything is still running. Normal reinstall is designed to keep your accounts and projects. You do not need to wipe them to update.
Wait for the install result, reopen Cedrus, and check your project rooms. If the installer refuses or something is missing, keep the message and ask your inviter. Do not delete folders and try again.
Removing Cedrus
Ask whoever invited you to help with removal. Plain uninstall removes the owned installation and stops its Desk while keeping accounts and project data. A later install can reuse what it kept.
A full wipe is a separate choice with extra consent. It deletes the whole private Cedrus data folder, including logins and any projects stored inside it. Projects outside that folder are outside the wipe. Read the named folder before agreeing, and make sure you have copies of anything you need.
Checking the result
I made this guide because I was tired of explaining the same setup one person at a time.
Open the app and try the change you asked for. If it works and the result confirms the merge, you have made your first shipment. If it is wrong, say what you see and ask for the correction.
If I add more features for beginners, I will update this guide. You can share this URL with someone else who has an invite.