Concepts you need first
Credentials
| Credential | Who uses it | Where it lives | How to manage |
|---|---|---|---|
| Web passphrase | Browser users | auth.json under the profile’s auth dir (~/.taskmanager/profiles/<name>/auth/) | Set in the web UI on first visit, gated by a one-time bootstrap setup token the launcher prints in the server terminal. |
| Recovery key | Browser users | auth.json under the profile’s auth dir (~/.taskmanager/profiles/<name>/auth/) | Set in the web UI on first visit, gated by a one-time bootstrap setup token the launcher prints in the server terminal. |
CLI API key (tmk-…) | hirotm and remote scripts/agents | Hash in cli-api-keys.json (server-side, same auth dir as auth.json); raw key in the client profile’s api_key field | hirotaskmanager server api-key generate / list / revoke. |
Server/Client setup
Deploy the API server on a VPS behind HTTPS, then point your laptop’s CLI at it. The instructions below target a Debian 11+ VPS (e.g. a Google Cloud VM) onx86_64; adapt package commands for other distros.
A - Prerequisites
Point a hostname at the VPS
Create a public DNS A record (e.g.
hirotm.example.com) pointing to the VPS’s public IP, then confirm from your laptop:B - Install Task Manager
Install Bun
As the Add Bun to your shell’s PATH:Verify Bun is installed:
taskmanager user:You can use npm instead of Bun, but Bun is recommended for cold-start performance.
C - Configure HTTPS
The Task Manager API listens on127.0.0.1:3001 (or the port you specified in the setup wizard). The public internet only needs SSH, HTTP, and HTTPS — a reverse proxy terminates TLS and forwards to the loopback port.
Install a TLS reverse proxy
Pick an option below or use your own.
Replace
hirotm.example.com with the hostname you specified in the prerequisites. Replace 3001 with the port you intend to use in the setup wizard.- Caddy (recommended)
- nginx
Minimal config, automatic certificates out of the box.Write the site config:Watch the first reload to confirm the cert was issued, then Look for
Ctrl+C:certificate obtained successfully.D - Initialize the server
Run the setup wizard
As the Answer the prompts:
taskmanager user:| Prompt | Value | Notes |
|---|---|---|
| Port | 3001 | Pick any internal port |
| Data dir | ~/.taskmanager/data | Location of the database |
| Accept connections from other machines on the network? | N | Reverse proxy handles internet traffic |
| Require a CLI API key for local connections too? | Y | Not required, but more secure |
| Open browser on start? | N | Headless server |
| Mint a CLI API key now? | Y | Save it for your client profile later |
| Set as default profile? | Y | easier, does not require adding --profile argument in local CLI commands. |
| Start the server now? | Y | The server starts in the background. |
Open the first-time setup link
The setup wizard prints a deep-link of the form
https://127.0.0.1:3001/?setupToken=<token>. replace ip:port with your hostname and paste it into your client browser- Pick a passphrase for the web UI.
- Back to the server terminal and save the recovery key in a safe place, not on your client machine.
- Log in with your passphrase.
The setup token is single-use. Once a passphrase is created the token is destroyed
E - Connect a CLI client
Run these on your laptop, not the VPS.Run Server as a service
This is optional, but useful if you are using Hiro Task Manager frequently. If you need your hirotaskmanager server to survive a system reboot or a failure, you can run it as a service. Instructions may vary depending on your *nix distro.Hardening local setup
Useful on shared workstations or production parity testing on one machine: the server stays on127.0.0.1 but the CLI must still present a key.
server api-key generate --save-to-profile, the freshly minted key is written into the same profile’s api_key field. The local CLI authenticates immediately, with no extra prompts.
Other local users on the same machine cannot reach the API just by connecting to 127.0.0.1:3001 — they need a valid key.
Wizard Options Explained
| Prompt | Default | Notes |
|---|---|---|
| Profile name | default | run using —profile <name> if it is not set as default profile |
| Port | 3001 | default port for the server |
| Accept connections from other machines on the network? | N | No for both Local Setup and Server/Client Setup |
| Create API key for CLI? | N | select Yes for Server/Client Setup. No for Local Setup unless you want tightened hardening locally |
| Open browser on start? | Y | The web UI opens automatically. |
| Set as default profile? | Y | Default Profile doesn’t need adding --profile argument. |
| Start server now? | Y | The server starts in the background. |
Common Profile config errors
Errors related to profile configuration manual edits.| Situation | Error |
|---|---|
Server profile sets api_url | Server profiles must not set api_url — it is auto-derived from port. |
Client profile is missing api_url | Client profiles require an absolute api_url. |
Client profile is missing api_key | Client profiles require an api_key. |
Client profile sets server-only fields (port, data_dir, open_browser, bind_address, require_cli_api_key) | Client profiles must contain only client fields. |
bind_address is non-loopback (e.g. 0.0.0.0) and require_cli_api_key: false | Public exposure without a key is rejected — set require_cli_api_key: true (or unset it; the validator forces it). |
Server profile has require_cli_api_key: true but no api_key | Warning (not an error). The local CLI will fail with auth_cli_key_required until you provide a key — either set it in the profile or pass --api-key per command. |
Hiro Developers Only
Working on the Task Manager source, you typically want a dev profile that uses--dev (port 3002, dev CORS, no built dist/) without overwriting your installed default profile.
Run a dev profile
dev profile is a regular profile name with no special meaning — it just keeps your dev work in ~/.taskmanager/profiles/dev/ so it can’t collide with an installed main profile.
--profile dev in commands
The repo’s AGENTS.md instructs agents and humans to use --profile dev for every command in the source tree:
hirotaskmanager is unaffected.
Related
- Quickstart — same-machine path.
- Profiles — schema, roles, default-profile pointer.
- Server operations —
server start/stop/statusandserver api-key …. - CLI access policy — what the CLI principal can and cannot do.
- Errors & exit codes —
auth_cli_key_required,invalid_config, and friends.
