notra and installs a notra binary. It wraps the public API (through the official TypeScript SDK) so you can script your workspace: posts, brand identities, integrations, schedules, and the full GEO surface (projects, prompts, competitors, scans, visibility, content briefs, agent readiness, AI traffic).
Source: github.com/usenotra/notra-cli.
Install
npx notra <command> or bunx notra <command>.
Verify the install:
Authentication
There are two ways to authenticate. Use the browser login when a person is at the keyboard, and an API key when the CLI runs unattended.Sign in with your browser (recommended)
notra auth login --json streams newline-delimited JSON with one object per line: a pending event that carries the verification URL and code, followed by either a ready event or an error event.
Sign out and remove the stored tokens:
Use an API key (headless and CI)
An API key bypasses the login entirely. Create one under API Keys in the dashboard with the scopes the job needs (see Authentication), then pass it in one of three ways:notra init does the same thing interactively: it prompts for the key, or accepts --api-key directly.
Configuration
The local config file lives at the OS-standard config path (on macOS:~/Library/Preferences/notra-cli-nodejs/config.json). It is created with owner-only permissions.
api-key and base-url. Environment variables override stored values:
Output
Commands print formatted tables in a terminal and switch to JSON automatically when stdout is redirected or piped. Explicit output flags win over that automatic choice:--json always prints JSON, and notra posts get <postId> --markdown always prints Markdown.
Quickstart
notra <topic> --help to see every command and flag for a topic.
Posts
List with filters
--status and --content-type accept comma-separated lists. --sort is asc or desc by creation date.
Generate content
--content-type is one of changelog, blog_post, linkedin_post, or twitter_post. --lookback is one of current_day, yesterday, last_7_days, last_14_days, or last_30_days. --github-integration and --linear-integration are repeatable. --wait polls until the job finishes (--poll-interval seconds, --timeout-mins minutes); drop it to get the jobId back immediately and check later with notra posts status <jobId> --watch.
Update content
--status is draft or published.
Delete
Brand identities
Generate from a website
Update settings
Conversational, Professional, Casual, Formal. Pass --custom-tone for a free-text tone instead. --company-name and --company-description accept an empty string to clear the value.
Integrations
Connect a repository
--branch defaults to the repository’s default branch. A token is only required for private repositories that do not have the Notra GitHub App installed.
Schedules
Manage the cron-based schedules described in Scheduled Automation.Create a schedule
--day-of-week (0-6, Sunday is 0); for monthly schedules pass --day-of-month (1-31). --output-type is one of changelog, blog_post, linkedin_post, or twitter_post; image schedules are not available from the CLI yet, so create those in the dashboard or through POST /v1/schedules. --repository is repeatable. Add --brand-voice <brandIdentityId> to pin a brand identity and --auto-publish to publish changelogs and blog posts instead of saving drafts. Times are in UTC.
From a JSON file
POST /v1/schedules request shape. When --config-file is set, all other flags are ignored.
GEO
GEO commands are scoped to a project. Runnotra geo projects list first to find the project ID, then pass it as the first argument to the other commands. Project-scoped commands need a plan that includes GEO.
Examples:
Global flags
These work on every command:
Destructive commands (
delete, remove, rotate-token) ask for confirmation unless you pass -y or --yes.