makethisbetter
User feedback in your terminal. Your agent reads it, fixes it, ships it.
The bridge between your users and your agent's todo list.
Users submit feedback through the widget. AI triages it on the platform. This CLI pulls it into your terminal where your coding agent can pick, implement, mark ready, and release deployed Feedback. The Reporter gets notified only after release.
User reports bug --> AI triage --> CLI pulls it --> Agent fixes it --> User notified
Install
npm (recommended)
npm install -g @makethisbetter/cli
Installs the precompiled binary for your platform (macOS/Linux/Windows, arm64/x64).
GitHub Releases
Download a prebuilt binary from GitHub Releases:
curl -f matters here: without it a wrong asset name writes GitHub's 404 page to
disk, and the next two commands cheerfully install it onto your PATH.
# macOS (Apple Silicon)
curl -fL https://github.com/makethisbetter/cli/releases/latest/download/makethisbetter-darwin-arm64 -o makethisbetter
chmod +x makethisbetter && sudo mv makethisbetter /usr/local/bin/
# Linux (x64)
curl -fL https://github.com/makethisbetter/cli/releases/latest/download/makethisbetter-linux-amd64 -o makethisbetter
chmod +x makethisbetter && sudo mv makethisbetter /usr/local/bin/
Assets: makethisbetter-{darwin,linux}-{amd64,arm64} and makethisbetter-windows-{amd64,arm64}.exe.
Go
go install github.com/makethisbetter/cli@latest
mv $(go env GOPATH)/bin/cli $(go env GOPATH)/bin/makethisbetter
go installnames the binarycli(from the module path). Themvgives youmakethisbetter.
Morning Routine
makethisbetter login # one-time OTP via email, no password
makethisbetter feedback list --project acme # what came in overnight?
makethisbetter feedback pick acme/FB-1 # claim it, get the full context
makethisbetter feedback pick acme/FB-1 --takeover # replace the current assignee
# ... your agent codes, tests, and commits with Feedback: acme/FB-1 ...
makethisbetter feedback ready acme/FB-1 --summary "Fixed Safari export downloads."
# ... after production deployment ...
makethisbetter feedback release --project acme --through <deployed-sha>
Your Agent Reads JSON, Not Tables
Every command supports --json for machine-readable output. Point your agent at it:
makethisbetter feedback list --project acme --status received --json
[
{
"id": "FB-1",
"reference": "acme/FB-1",
"number": 1,
"project_id": "acme",
"project_handle": "acme",
"status": "received",
"labels": ["Bug"],
"priority": "high",
"description": "The checkout button does nothing when I tap it on my phone.",
"ai_structured_summary": {
"board_summary": "Checkout button unresponsive on mobile",
"summary": "Mobile reporters cannot complete checkout from the product page."
},
"page_url": "https://example.com/checkout"
}
]
ai_structured_summary is the full AI triage object; only two of its keys are
shown above. Every field the API returns is passed through verbatim.
makethisbetter feedback show acme/FB-1 --json # full detail + AI triage
makethisbetter feedback show acme/FB-1 --md # server-rendered markdown, cheapest tokens for agents
makethisbetter feedback pick acme/FB-1 --json # claim + return context
For native tool integration (no shell parsing), see:
- MCP Server -- Claude Code and Cursor call tools directly
- Skills --
/makethisbetter list,/makethisbetter pickinside Claude Code
Commands
makethisbetter login
Authenticate via email OTP. No password. Saves token to ~/.makethisbetter/config.json.
makethisbetter login
# Enter email: you@example.com
# Check inbox for login code
# Enter code: 123456
# Logged in
For non-interactive environments, request and verify the code in separate invocations:
makethisbetter login --email you@example.com --send-only
# Check inbox for the verification code
makethisbetter login --otp 123456
The first command stores short-lived login state as pending-login.json next
to the CLI config file, with owner-only permissions. The second command uses
that state without sending another code, then removes it after a successful or
expired login.
makethisbetter info
Current account and auth status.
makethisbetter feedback list
makethisbetter feedback list --project acme
makethisbetter feedback list --project acme --status received --label Safari --priority high
makethisbetter feedback list --project acme --sort priority
makethisbetter feedback list --project acme --limit 100
makethisbetter feedback list --project acme --archived
makethisbetter feedback list --project acme --json
| Flag | Values |
|---|---|
--status | received, in_progress, pending_release, closed |
--label | Any AI-selected Project label name from the system pool |
--type | Deprecated compatibility alias for --label |
--priority | critical, high, medium, low |
--sort | priority, created, updated |
--project | Project handle (required) |
--limit | Maximum feedback items to return, 1 to 200 (default: 50) |
--archived | List archived Feedback; cannot be combined with --status |
--json | JSON output |
makethisbetter feedback show <handle/FB-n>
Full details including AI triage analysis. --md prints the server-rendered
markdown (single source of truth, ideal for agents); --json prints the raw
fields. The command transparently checks the archived collection when the
Feedback is no longer active.
makethisbetter feedback respond <handle/FB-n>
makethisbetter feedback respond acme/FB-1 --body-file ./response.txt
makethisbetter feedback respond acme/FB-1 --body-file ./response.txt --subject "Export help"
Sends one final One-way Reporter Notice and closes received Feedback as
responded. --body-file is required and accepts a UTF-8 file or - for
stdin; no inline-body or editor mode is provided. Omit --subject to generate
the subject in the Reporter Language, falling back to English when unsupported.
Success means the delivery was persisted and queued, not that email delivery
has completed. Output never echoes the message body.
Agents must only send final text supplied and confirmed by the user. They must not autonomously draft and send a Reporter Notice.
makethisbetter feedback archive <handle/FB-n> / restore
makethisbetter feedback archive acme/FB-1
makethisbetter feedback restore acme/FB-1
Archive hides one Unclaimed Feedback without changing its received status;
Restore returns it to active views. Both operations are retry-safe. Account
Owners/Admins and Active Pro Members can use them across the Account; Team
Members can use them only for Projects they are authorised to access.
makethisbetter feedback pick <handle/FB-n>
Claim a feedback item. Status becomes in_progress. Returns the full context so your agent knows what to fix. If another team member already owns it, the command returns a conflict; add --takeover to replace that assignee.
makethisbetter feedback decline <handle/FB-n>
makethisbetter feedback decline acme/FB-1
Closes as not_planned without sending a Reporter Update.
makethisbetter feedback duplicate <handle/FB-n>
makethisbetter feedback duplicate acme/FB-2 --canonical acme/FB-1
The Canonical Feedback must belong to the same Project.
makethisbetter feedback ready <handle/FB-n>
makethisbetter feedback ready acme/FB-1 --summary "Fixed Safari export downloads."
Requires a matching Feedback: acme/FB-1 commit trailer in the current reachable
Git history. Records the Resolution Summary and moves to pending_release
without notifying the Reporter.
makethisbetter feedback release --project <handle> --through <deployed-sha>
Run after a production deploy. The command refuses shallow Git history and
scans only trailers for the selected Project. It releases pending_release
Feedback whose latest trailer is reachable from the deployed commit. Released
Feedback becomes closed(shipped); the platform then generates and sends each
Reporter Update. Run the command once per Project when one repository deploys
multiple Projects.
makethisbetter feedback reopen <handle/FB-n>
Available to Account Owners/Admins, Active Pro Members, and assigned Team Members. Returns closed Feedback to received, clears the prior
outcome and assignee, and cancels unsent Reporter Updates from that cycle.
makethisbetter project list
makethisbetter project list
makethisbetter project list --json
makethisbetter project show <handle>
Project details, including the widget api_key and board_url. signing_secret is included for Account Owners/Admins and Active Pro Members; other roles see a (not available for this role) note instead.
makethisbetter project create <name>
makethisbetter project create "Acme" --handle acme --domain acme.com
--handle and --domain are both required. --domain is the bare hostname the
widget will run on (acme.com), not a URL and not a path.
Prints the new project, including its api_key and signing_secret. Available to Account Owners/Admins and Active Pro Members.
makethisbetter project update <handle>
makethisbetter project update acme --name "Acme Feedback" --domain feedback.acme.com --ai-context "B2B invoicing for accountants"
Updates one or more mutable Project fields. The handle is immutable. Available to Account Owners/Admins and Active Pro Members; Team Members cannot update Project settings.
Configuration
~/.makethisbetter/config.json
Set MAKETHISBETTER_CONFIG to use another path. The CLI and MCP server honor
the same override.
{
"api_token": "token_xxx",
"api_url": "https://makethisbetter.dev/api/v1"
}
| Field | Default | Description |
|---|---|---|
api_token | -- | Set by makethisbetter login |
api_url | https://makethisbetter.dev/api/v1 | API endpoint |
Self-Hosting
Point api_url at your own instance:
{
"api_token": "token_xxx",
"api_url": "https://feedback.yourcompany.com/api/v1"
}
The platform backend is not open source yet — self-hosting docs will come with it. The hosted service lives at makethisbetter.dev.
Development
go build -o makethisbetter .
go test ./...
go vet ./...