CLI
Drive feedback, roadmap, and changelogs from the terminal — interactive for humans, scriptable for agents.
The oneport CLI puts your whole workspace in the terminal. It's built to be
equally good for humans (interactive, guided) and AI agents like Claude
Code, Cursor, or Codex (scriptable, JSON-first, never blocks on a prompt).
Install
npm install -g oneport
# or run without installing
npx oneport loginLog in
oneport login # paste your API key, then pick a workspaceCreate an API key in Dashboard → Agents (details). Any command that needs auth prompts you to log in first when run interactively, or exits with a clear error when run in a script.
oneport whoami # who am I, which workspace, which API
oneport workspace list # workspaces this key can access
oneport use <slug> # switch the active workspace anytimeCommands
posts list | get | create | update | search | merge | unmerge
| comment | comments | vote | unvote
boards list | create
roadmap
changelog list | create | update
ship <postId> --title --content # mark shipped + publish a changelog
webhooks list | create | delete
domain get | set | remove
settings get | set | logo set|remove
context # brand voice + style exemplars (for agents)
api <METHOD> <path> # raw authenticated request — full coverageRun oneport <command> --help for flags. The raw api command reaches 100% of
the REST API and fills {slug} from your active workspace:
oneport api GET '/v1/workspaces/{slug}/posts' --query 'sort=top'
oneport api POST '/v1/workspaces/{slug}/posts' \
--data '{"boardSlug":"features","title":"Hi","content":"from the API"}'For AI agents
The CLI is designed to be driven non-interactively:
- Auth from the environment — set
ONEPORT_API_KEY(and optionallyONEPORT_WORKSPACE); nologinstep needed. These are the same variables the MCP server uses. --jsonprints raw API JSON to stdout; all status, progress, and prompts go to stderr, sooneport posts list --json | jqis always clean.- Never blocks — when output isn't a TTY (or with
--no-input, orCI=true) the CLI fails fast with an actionable message instead of prompting. - Stable exit codes:
0ok ·1runtime error ·2usage ·3auth required ·4not found.
export ONEPORT_API_KEY=your-key
export ONEPORT_WORKSPACE=acme
oneport posts list --json | jq '.[].title'
oneport context --json # fetch brand voice before drafting a changelogConfiguration
Resolution order is flag → environment → config file → prompt (the prompt only appears in an interactive terminal).
| Setting | Flag | Environment | Config key |
|---|---|---|---|
| API key | oneport login --api-key | ONEPORT_API_KEY | apiKey |
| Workspace | --workspace, -w | ONEPORT_WORKSPACE | workspace |
| API URL | --api-url | ONEPORT_URL (or ONEPORT_API_URL) | apiUrl |
Credentials are stored at ~/.config/oneport/config.json (mode 0600; honors
$XDG_CONFIG_HOME, override with ONEPORT_CONFIG_DIR). Color honors NO_COLOR
and turns off automatically when output isn't a terminal.
Prefer MCP?
Coding agents can also connect over the Model Context Protocol — see Connect an agent. The CLI, MCP server, and SDK all speak the same REST API; pick whichever fits your workflow.