ITADN
makethisbetter/cli · 文件
文件最后提交记录最后更新时间
README.md

Make This Better

makethisbetter

User feedback in your terminal. Your agent reads it, fixes it, ships it.

makethisbetter.dev · release license go version


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 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 install names the binary cli (from the module path). The mv gives you makethisbetter.

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 pick inside 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
FlagValues
--statusreceived, in_progress, pending_release, closed
--labelAny AI-selected Project label name from the system pool
--typeDeprecated compatibility alias for --label
--prioritycritical, high, medium, low
--sortpriority, created, updated
--projectProject handle (required)
--limitMaximum feedback items to return, 1 to 200 (default: 50)
--archivedList archived Feedback; cannot be combined with --status
--jsonJSON 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"
}
FieldDefaultDescription
api_token--Set by makethisbetter login
api_urlhttps://makethisbetter.dev/api/v1API 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 ./...

License

MIT