Hire real humans from the terminal — autonomous TaskRabbit checkout with a verified undo, plus Magic remote errands, in one agent-native binary.
goat unifies two human networks behind a common task model: TaskRabbit for in-person local labor and Magic for remote errands. Its headline is hands-off checkout on TaskRabbit against the card on file — searched, ranked by honest all-in price and review quality, and booked with no prompt — made safe by a spend cap and a cancel command that verifies the cancellation actually landed.
Authentication
TaskRabbit auth is cookie replay from a logged-in Chrome session: run human-goat-pp-cli auth login --chrome to lift the session + XSRF-TOKEN cookies. Never a programmatic password login (the login form is reCAPTCHA-gated). Magic uses an x-api-key read from $MAGIC_API_KEY or ~/.magic/api_key.
Quick Start
# check both backends and resolve the account metro before doing anything
human-goat-pp-cli doctor --dry-run
# see the task templates available in your metro
human-goat-pp-cli categories list --agent
# find the best-value available Tasker with all-in pricing
human-goat-pp-cli best "help moving" --on saturday --min-rating 4.9 --agent
# render the confirm summary without booking; drop --dry-run to check out for real
human-goat-pp-cli hire "help moving" --on saturday --min-rating 4.9 --max-total 200 --dry-run --lat 47.6062 --lng -122.3321
Unique Features
These capabilities aren't available in any other tool for this API.
Hands-off hiring
-
hire — Say the job and the date; goat searches, ranks by review quality and honest all-in price, and checks out against the card on file with no prompt.
Reach for this when the user wants a task done, not a Tasker shortlist to review.
human-goat-pp-cli hire "help moving" --on 2026-07-11 --min-rating 4.8 --max-total 200 --agent --lat 47.6062 --lng -122.3321
-
cancel — Cancels a booking and confirms it landed by re-reading status, reporting whether it was inside the free window and any fee.
This is the undo that makes autonomous checkout tolerable; always available after a hire.
human-goat-pp-cli cancel task_abc123 --agent
-
hire — Refuses to check out when the computed all-in total exceeds a configurable ceiling, printing the total and the cap.
Use --max-total (or the config default) to cap autonomous spend before any booking is placed.
human-goat-pp-cli hire movers --on saturday --min-rating 4.9 --max-total 150 --lat 47.6062 --lng -122.3321
Honest pricing
-
best — Folds TaskRabbit's hidden service (~15%) and trust-and-support (5-15%) fees into the displayed hourly rate, honoring the CA/MA service-fee-only rule.
Every price surface (search, compare, best, hire, spend) shows the real all-in rate, not the teaser.
human-goat-pp-cli best "help moving" --on saturday --min-rating 4.9 --agent
-
watch — Polls recommendations for a category and date (optionally a favorite or a rate ceiling) and alerts when a match opens.
Use when nothing good is available now and you want the first qualifying slot.
human-goat-pp-cli watch movers --on saturday --max-rate 60
One surface, two human networks
-
dispatch — Routes a plain-language task to Magic (remote-doable) or TaskRabbit (in-person) by task shape, with a --via override.
Say what you want done and let goat pick the human network; force it with --via taskrabbit|magic.
human-goat-pp-cli dispatch "call the dentist and reschedule my cleaning"
-
spend — SQL over local booking, invoice, and Magic-task history by category, tasker, source, or month, using true effective all-in $/hr for TaskRabbit.
Answers where the money went across both human networks with fees folded in.
human-goat-pp-cli spend --by source --agent
-
status — One list of every in-flight task across TaskRabbit bookings and Magic requests, joined on the common task model and sorted by state.
Use for a cross-source view of everything in flight; use 'tasks list' for TR-only and 'track ' for one Magic request.
human-goat-pp-cli status --open --agent
Recipes
Autonomous hire with a spend cap
human-goat-pp-cli hire "help moving" --on 2026-07-11 --min-rating 4.8 --max-total 200 --agent --lat 47.6062 --lng -122.3321
Searches, ranks by all-in price x reviews, checks out under the cap, and prints the booking id, Tasker, time, and total with no prompt.
Undo a booking and verify
human-goat-pp-cli cancel task_abc123 --agent
Cancels, re-reads status, and reports cancelled plus whether it was inside the free window and any fee.
Dispatch a remote errand
human-goat-pp-cli call 5209076052 "when does the jewelry store open"
Sends a phone-call task to Magic and returns a request id to track; the answer comes back in the conversation.
Narrow a verbose payload for an agent
human-goat-pp-cli taskers favorites --agent --select items.name,items.all_in_rate,items.rating
Returns only the fields an agent needs from a deeply nested Tasker list instead of the full payload.
Where did the money go
human-goat-pp-cli spend --by source --agent
Splits TaskRabbit vs Magic totals from the local store, with TaskRabbit rows using true all-in effective rate.
Usage
Run human-goat-pp-cli --help for the full command reference and flag list.
Paths & environment variables
This CLI separates local files into four path kinds:
| Kind | Contents |
|---|
config | User-editable settings such as config.toml and saved profiles |
data | Durable local data: credentials.toml, data.db, cookies, browser-session proof files, and other auth sidecars |
state | Runtime state such as persisted queries, jobs, and teach.log |
cache | Regenerable HTTP/cache files |
Each kind resolves independently. The ladder is:
- Per-kind env var:
HUMAN_GOAT_CONFIG_DIR, HUMAN_GOAT_DATA_DIR, HUMAN_GOAT_STATE_DIR, or HUMAN_GOAT_CACHE_DIR
--home <dir> for this invocation
HUMAN_GOAT_HOME for a flat relocated root
- XDG env vars:
XDG_CONFIG_HOME, XDG_DATA_HOME, XDG_STATE_HOME, XDG_CACHE_HOME
- Platform defaults matching existing installs
For containers and agent sandboxes, prefer a single relocated root:
export HUMAN_GOAT_HOME=/srv/human-goat
human-goat-pp-cli doctor
Under HUMAN_GOAT_HOME=/srv/human-goat, the four dirs resolve to /srv/human-goat/config, /srv/human-goat/data, /srv/human-goat/state, and /srv/human-goat/cache.
MCP servers do not receive CLI flags from the host. Put relocation in the host env block:
{
"mcpServers": {
"human-goat": {
"command": "human-goat-pp-mcp",
"env": {
"HUMAN_GOAT_HOME": "/srv/human-goat"
}
}
}
}
Precedence matters in fleets: an ambient per-kind variable such as HUMAN_GOAT_DATA_DIR overrides an explicit --home for that kind. Use HUMAN_GOAT_HOME or the per-kind variables for durable fleet relocation; treat --home as the weaker per-invocation lever.
Relocation is one-way. Unsetting HUMAN_GOAT_HOME does not move files back to platform defaults, and doctor cannot find credentials left under a former root. Move the files manually before unsetting relocation variables.
Existing installs keep working because the platform-default rung matches the legacy layout. On the first auth write, stored secrets leave config.toml and are consolidated into credentials.toml under the data directory. Run human-goat-pp-cli doctor --fail-on warn to check path and credential-location warnings in automation.
Commands
account
The logged-in TaskRabbit client account profile
human-goat-pp-cli account - Get the authenticated account profile
categories
TaskRabbit task categories and templates for the account metro
human-goat-pp-cli categories - List task templates for the account metro (title, category_name, category_id, default_template_id, top_category)
invoices
Invoice and payment-history flags
human-goat-pp-cli invoices - Whether the account has submitted invoices (payment-history presence flag)
system
TaskRabbit account bootstrap, metro, and dashboard reachability
human-goat-pp-cli system bootstrap - Account bootstrap — metro (id, name, country), payment_method_types, stream_api_key. Used by doctor to resolve the account metro.
human-goat-pp-cli system dashboard-counts - Dashboard tab counts (open tasks, messages, etc.)
taskers
Favorite, past, and suggested TaskRabbit Taskers
human-goat-pp-cli taskers favorites - List your favorited Taskers (poster=client, rabbit=tasker)
human-goat-pp-cli taskers past - List Taskers you have hired before
human-goat-pp-cli taskers suggestions - Tasker suggestions for the account metro
Self-learning loop
This CLI caches per-question discovery so repeat queries skip the walk and structurally similar queries get answered via entity substitution. The loop also self-captures: every invocation is journaled locally, and failed-flag corrections plus fresh teaches surface as candidates on the next recall for confirm/reject judgment. Agents call recall before discovery and fire teach & after answering. See the ## Automatic learning section in SKILL.md for the full protocol.
human-goat-pp-cli recall <query> - Look up cached resources for a query before running discovery
human-goat-pp-cli teach - Record a query -> resource mapping (silent on success, safe to background with &)
human-goat-pp-cli learnings list - Inspect taught rows
human-goat-pp-cli learnings forget <query> - Undo a teach
human-goat-pp-cli learnings candidates - List auto-captured candidates awaiting confirm/reject
human-goat-pp-cli learnings stats - Local loop metrics: recall hit rate, teach-to-reuse, playbook resolution, candidate counts
human-goat-pp-cli teach-pattern - Install a query/resource template up front
human-goat-pp-cli teach-lookup - Add an entity mapping (e.g. country code, team alias) for pattern substitution
Pass --no-learn or set HUMAN_GOAT_NO_LEARN=true to disable the loop for deterministic flows.
The local store's schema version stamp is one-way: once this version of human-goat-pp-cli opens the database, older binaries refuse it with a version error — upgrade the binary rather than downgrading.
Output Formats
# Human-readable table (default in terminal, JSON when piped)
human-goat-pp-cli account
# JSON for scripting and agents
human-goat-pp-cli account --json
# Filter to specific fields
human-goat-pp-cli account --json --select id,name,status
# Dry run — show the request without sending
human-goat-pp-cli account --dry-run
# Agent mode — JSON + compact + no prompts in one flag
human-goat-pp-cli account --agent
Agent Usage
This CLI is designed for AI agent consumption:
- Non-interactive - never prompts, every input is a flag
- Pipeable -
--json output to stdout, errors to stderr
- Filterable -
--select id,name returns only fields you need
- Previewable -
--dry-run shows the request without sending
- Read-only by default - this CLI does not create, update, delete, publish, send, or mutate remote resources
- Offline-friendly - sync/search commands can use the local SQLite store when available
- Agent-safe by default - no colors or formatting unless
--human-friendly is set
Exit codes: 0 success, 2 usage error, 3 not found, 4 auth error, 5 API error, 7 rate limited, 10 config error.
Health Check
human-goat-pp-cli doctor
Verifies configuration, credentials, and connectivity to the API.
Configuration
Run human-goat-pp-cli doctor to see the resolved config, data, state, and cache directories. The platform-default config path is ~/.config/human-goat/config.toml; --home, HUMAN_GOAT_HOME, and per-kind env vars can relocate it.
Static request headers can be configured under headers; per-command header overrides take precedence.
Troubleshooting
Authentication errors (exit code 4)
- Run
human-goat-pp-cli doctor to check credentials
Not found errors (exit code 3)
- Check the resource ID is correct
- Run the
list command to see available items
API-specific
- doctor reports TaskRabbit unauthenticated — run
human-goat-pp-cli auth login --chrome while logged into taskrabbit.com in Chrome
- hire refuses with a spend-cap message — raise --max-total or pick a cheaper Tasker; the printed all-in total exceeded the cap
- Magic task shows ONGOING forever — the human's answer arrives in the conversation, not result; read it with
track <id> which surfaces the conversation tail