{"_id":"@postnitro/cli","_rev":"7-a4aed8c238246e9451343059c4562337","name":"@postnitro/cli","dist-tags":{"latest":"1.5.0"},"versions":{"0.1.0":{"name":"@postnitro/cli","version":"0.1.0","keywords":["postnitro","cli","ai-agent","carousel","social-media"],"author":{"name":"Muneeb Awan","email":"muneeb@postnitro.ai"},"license":"MIT","_id":"@postnitro/cli@0.1.0","maintainers":[{"name":"postnitro","email":"support@postnitro.ai"}],"homepage":"https://github.com/postnitro/postnitro-agent#readme","bugs":{"url":"https://github.com/postnitro/postnitro-agent/issues"},"bin":{"postnitro":"dist/index.js"},"dist":{"shasum":"85ec81a8a9c67e946ac88abe5d6849f4c6ed8290","tarball":"https://registry.npmjs.org/@postnitro/cli/-/cli-0.1.0.tgz","fileCount":55,"integrity":"sha512-O2iNsl2SKd9ImPzy28M/q0l4GfyJshs8ijs8FRCcG9tVCkf1cDFz8QlpUg7KTHT6zQG65SqAKWSrrIxLh6SAZw==","signatures":[{"sig":"MEYCIQCRFFKLT3YtcbrSQ0osTrP/dSotU8iSJYpzbGsvnsUvCgIhALOBBmY/Vd4FhLWdNVu+RQtvZAfISi26xEzKdGNAkgNQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156157},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"7e7bc59e147bd3d5d241ae9510bd29e791224cce","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"postnitro","email":"support@postnitro.ai"},"repository":{"url":"git+https://github.com/postnitro/postnitro-agent.git","type":"git"},"_npmVersion":"10.8.2","description":"Command-line interface for AI agents and scripts to generate and manage PostNitro content via the PostNitro Embed API.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.0_1783107534680_0.7479693543197825","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@postnitro/cli","version":"1.0.1","keywords":["postnitro","cli","ai-agent","carousel","social-media"],"author":{"name":"Muneeb Awan","email":"muneeb@postnitro.ai"},"license":"MIT","_id":"@postnitro/cli@1.0.1","maintainers":[{"name":"postnitro","email":"support@postnitro.ai"}],"homepage":"https://github.com/postnitro/postnitro-agent#readme","bugs":{"url":"https://github.com/postnitro/postnitro-agent/issues"},"bin":{"postnitro":"dist/index.js"},"dist":{"shasum":"5f9ab2753b7df91dd992f270136d90d285b27352","tarball":"https://registry.npmjs.org/@postnitro/cli/-/cli-1.0.1.tgz","fileCount":55,"integrity":"sha512-cysl+l2jTspszaDnRnMFH1EiaP52WnACY9IQxWRlNHZ1vlkrwUGjScgtZ0zmemmzz/C2s2V2QsI0pD6dwif6rg==","signatures":[{"sig":"MEYCIQCE0RPhJRrFlwRTEY+okOIi7MjUEwhD2Ox4Vp/XdX+R3gIhAJxnPNDVrXHkeJAKZJYLLzRGrPHIcf+zND2ZuWViOeRA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152105},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"57f6cd96095f88239c27c5fc23ec9a899bb7685b","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"postnitro","email":"support@postnitro.ai"},"repository":{"url":"git+https://github.com/postnitro/postnitro-agent.git","type":"git"},"_npmVersion":"10.8.2","description":"Command-line interface for AI agents and scripts to generate and manage PostNitro content via the PostNitro Embed API.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.0.1_1783332857354_0.8404183992137555","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@postnitro/cli","version":"1.1.0","keywords":["postnitro","cli","ai-agent","carousel","social-media"],"author":{"name":"Muneeb Awan","email":"muneeb@postnitro.ai"},"license":"MIT","_id":"@postnitro/cli@1.1.0","maintainers":[{"name":"postnitro","email":"support@postnitro.ai"}],"homepage":"https://github.com/postnitro/postnitro-agent#readme","bugs":{"url":"https://github.com/postnitro/postnitro-agent/issues"},"bin":{"postnitro":"dist/index.js"},"dist":{"shasum":"784ffa8a2f050dcbfd921364b4ae2a6c154f9f73","tarball":"https://registry.npmjs.org/@postnitro/cli/-/cli-1.1.0.tgz","fileCount":61,"integrity":"sha512-+6qloOeOm4t/OQGwYMOv6C/cJ5PJ6WSSNDY8ZXbxrzlkGpLe4tqD/OB4ucJySjBvG3W9TgNx73959ILVYZj92Q==","signatures":[{"sig":"MEYCIQC+YaiI68TbaF289lhGxRgTMW20n7AOqd/F+Blf5Ldn8AIhAMypbShbe/ygYjTyNlKLF1cF4a+QKcB4Gvt7Ka3sQhBy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":176028},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"a3dc0ee58febb2114bfbe0fdf3f019d862e5fad0","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"postnitro","email":"support@postnitro.ai"},"repository":{"url":"git+https://github.com/postnitro/postnitro-agent.git","type":"git"},"_npmVersion":"10.8.2","description":"Command-line interface for AI agents and scripts to generate and manage PostNitro content via the PostNitro Embed API.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.1.0_1783956680170_0.467955765521223","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@postnitro/cli","version":"1.2.0","keywords":["postnitro","cli","ai-agent","carousel","social-media"],"author":{"name":"Muneeb Awan","email":"muneeb@postnitro.ai"},"license":"MIT","_id":"@postnitro/cli@1.2.0","maintainers":[{"name":"postnitro","email":"support@postnitro.ai"}],"homepage":"https://github.com/postnitro/postnitro-agent#readme","bugs":{"url":"https://github.com/postnitro/postnitro-agent/issues"},"bin":{"postnitro":"dist/index.js"},"dist":{"shasum":"ce2f6b7017e2b1118308da151798cc94a3b390ef","tarball":"https://registry.npmjs.org/@postnitro/cli/-/cli-1.2.0.tgz","fileCount":67,"integrity":"sha512-14yVO+vJBonSYLVJAB5IsnzXm9kDCGbWU5m2k/5X4hV0bjKGRyrzEmg5ZDKvEjj9oli+1NrgWEnqFjjtcsArJg==","signatures":[{"sig":"MEUCIBnb5TD7AbedUcnX/WloIF3QD+D5uncDUZ8vwkt5AkbtAiEA1HVU3w5A8rWOI+SHpC4frRMOGZoM88w/pCypNHH2j2U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@postnitro%2fcli@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204217},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"9b21e502d7bfc8a98b671fb85710c9c04b61a157","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b72f14c-779d-409b-b737-fa6b3534629d"}},"repository":{"url":"git+https://github.com/postnitro/postnitro-agent.git","type":"git"},"_npmVersion":"12.0.1","description":"Command-line interface for AI agents and scripts to generate and manage PostNitro content via the PostNitro Embed API.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.2.0_1784287892884_0.30691449754456723","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@postnitro/cli","version":"1.3.0","keywords":["postnitro","cli","ai-agent","carousel","social-media"],"author":{"name":"Muneeb Awan","email":"muneeb@postnitro.ai"},"license":"MIT","_id":"@postnitro/cli@1.3.0","maintainers":[{"name":"postnitro","email":"support@postnitro.ai"}],"homepage":"https://github.com/postnitro/postnitro-agent#readme","bugs":{"url":"https://github.com/postnitro/postnitro-agent/issues"},"bin":{"postnitro":"dist/index.js"},"dist":{"shasum":"63b2095c183bc025adaf829e3d652b3c9df62e70","tarball":"https://registry.npmjs.org/@postnitro/cli/-/cli-1.3.0.tgz","fileCount":73,"integrity":"sha512-xXa4NYPkiV7tFm+UfAcfBNIv+qCHRqww3o+qFMpaQ0zDOOoImnx+PQsNn1f5PCNA10Trt06Rwm5FBV5KvivB6A==","signatures":[{"sig":"MEUCIQCikYiFpmB47NeRumV4MaJJRKFspfUvkYlat8nEyl07ngIgRRM6LVzs3pCM8UoVe/K37xbJC1yxN3/hpdGz7ADWZxQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@postnitro%2fcli@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":248178},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"9ce533a9105be13178fdc4b318b5895afb1cf25e","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:0b72f14c-779d-409b-b737-fa6b3534629d"}},"repository":{"url":"git+https://github.com/postnitro/postnitro-agent.git","type":"git"},"_npmVersion":"12.0.2","description":"Command-line interface for AI agents and scripts to generate and manage PostNitro content via the PostNitro Embed API.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.3.0_1787090887871_0.5729630764951361","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@postnitro/cli","version":"1.4.1","keywords":["postnitro","cli","ai-agent","carousel","social-media"],"author":{"name":"Muneeb Awan","email":"muneeb@postnitro.ai"},"license":"MIT","_id":"@postnitro/cli@1.4.1","maintainers":[{"name":"postnitro","email":"support@postnitro.ai"}],"homepage":"https://github.com/postnitro/postnitro-agent#readme","bugs":{"url":"https://github.com/postnitro/postnitro-agent/issues"},"bin":{"postnitro":"dist/index.js"},"dist":{"shasum":"5f494aa31cceef8b5225a4293922b071ce0f36ad","tarball":"https://registry.npmjs.org/@postnitro/cli/-/cli-1.4.1.tgz","fileCount":73,"integrity":"sha512-VcmYU7ESTh8E45FZrN61Jx5/TXdxGUkPWFTrZ5A7RSsvvEks7qmVT32raRNRJ/6+z6YJV+miF638+eqT2yHYaw==","signatures":[{"sig":"MEUCIBQOqc5X2EDjE4yn8djHF7OZmtCREG1N4S3GD/mL50afAiEAkD+MzHeHDZrdmp3/wMNZM2exSr8Dp0hu3LWEczvKp54=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHkES6RZJOP42EmG2MhrJmyRqx5R4KRIHoZvTXSagWi8AiEAw6vJyPgCvrDkVUuaudJvhwU4V5mMwckagrcf2JpOjVM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@postnitro%2fcli@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":251995},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"865bc4880448740a777c1e3593f37592d4c8a832","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"0b72f14c-779d-409b-b737-fa6b3534629d"}},"repository":{"url":"git+https://github.com/postnitro/postnitro-agent.git","type":"git"},"_npmVersion":"12.1.0","description":"Command-line interface for AI agents and scripts to generate and manage PostNitro content via the PostNitro Embed API.","directories":{},"_nodeVersion":"24.21.0","dependencies":{"commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.4.1_1790672790242_0.7629540115410867","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"_id":"@postnitro/cli@1.5.0","bin":{"postnitro":"dist/index.js"},"bugs":{"url":"https://github.com/postnitro/postnitro-agent/issues"},"dist":{"shasum":"56e2627bdf007c9c64bf5f4a02e2a2e01ca138b7","tarball":"https://registry.npmjs.org/@postnitro/cli/-/cli-1.5.0.tgz","fileCount":73,"integrity":"sha512-Ykbpv/pdQNCiWPglxtkDB9VmzkHOSuhUY6rxVnsolHdBn3Imjh4putGa+LG/oAQNMwzQ+T8WmSvCAP34gsV78Q==","signatures":[{"sig":"MEQCIBLjosx9UsRKPADG8wX+UMaHzRTpcfIfaO9gbURuK/HWAiBhsnIz1VLHuvMZrVHHpd8eDgeFZYvYTUR7jHnVwHdAew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCNFY6vhP6SnO4F/q6OQa7wag+Fm4KgwYCbyPFsZNdKtgIgeXVlf14xP/bD+/JQneolcZr/l2jQxX5MLHirrZbMgK0="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@postnitro%2fcli@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":256551},"main":"dist/index.js","name":"@postnitro/cli","type":"module","types":"./dist/index.d.ts","author":{"name":"Muneeb Awan","email":"muneeb@postnitro.ai"},"engines":{"node":">=18"},"gitHead":"6a441309835aa0956f8d4813e041ba64fda53388","license":"MIT","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"version":"1.5.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"0b72f14c-779d-409b-b737-fa6b3534629d"}},"homepage":"https://github.com/postnitro/postnitro-agent#readme","keywords":["postnitro","cli","ai-agent","carousel","social-media"],"repository":{"url":"git+https://github.com/postnitro/postnitro-agent.git","type":"git"},"_npmVersion":"12.2.0","description":"Command-line interface for AI agents and scripts to generate and manage PostNitro content via the PostNitro Embed API.","directories":{},"maintainers":[{"name":"postnitro","email":"support@postnitro.ai"}],"_nodeVersion":"24.21.0","dependencies":{"commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_1.5.0_1791402441643_0.8200164314989489"}}},"time":{"created":"2026-07-03T19:38:54.497Z","modified":"2026-10-07T19:47:22.090Z","0.1.0":"2026-07-03T19:38:54.820Z","1.0.1":"2026-07-06T10:14:17.501Z","1.1.0":"2026-07-13T15:31:20.304Z","1.2.0":"2026-07-17T11:31:33.033Z","1.3.0":"2026-08-18T22:08:08.114Z","1.4.1":"2026-09-29T09:06:30.323Z","1.5.0":"2026-10-07T19:47:21.755Z"},"bugs":{"url":"https://github.com/postnitro/postnitro-agent/issues"},"author":{"name":"Muneeb Awan","email":"muneeb@postnitro.ai"},"license":"MIT","homepage":"https://github.com/postnitro/postnitro-agent#readme","keywords":["postnitro","cli","ai-agent","carousel","social-media"],"repository":{"url":"git+https://github.com/postnitro/postnitro-agent.git","type":"git"},"description":"Command-line interface for AI agents and scripts to generate and manage PostNitro content via the PostNitro Embed API.","maintainers":[{"name":"postnitro","email":"support@postnitro.ai"}],"readme":"## Install as a skill\n\n```bash\nnpx skills add postnitro/postnitro-agent\n```\n\nThis installs the PostNitro skill for your AI coding agent. For **Claude Code** specifically, you can instead add it as a plugin:\n\n```bash\n# in Claude Code\n/plugin marketplace add postnitro/postnitro-agent\n/plugin install postnitro@postnitro-agent\n```\n\nThe skill is defined in [`SKILL.md`](SKILL.md) at the repo root (with a copy under [`skills/postnitro/`](skills/postnitro/SKILL.md)); the Claude Code plugin manifests live in [`.claude-plugin/`](.claude-plugin/).\n\n---\n\n# PostNitro CLI\n\n**Create and schedule on-brand social posts — carousels and single images — from the command line.** Built for AI agents and scripts: turn a topic, article, or X thread — or your own content — into a published LinkedIn, Instagram, TikTok, Threads, Facebook Page, or Pinterest post.\n\nPostNitro creates on-brand carousels and single-image posts and schedules them to your social accounts; this CLI is a command-line interface to the [PostNitro Embed API](https://postnitro.ai). Every command prints JSON on stdout (exit 0) or stderr (exit 1) — no colors, tables, or prompts to strip.\n\n---\n\n## Installation\n\n### From npm (recommended)\n\n```bash\nnpm install -g @postnitro/cli\npostnitro --help\n```\n\n### Local development\n\n```bash\nnpm install\nnpm run build\nnode dist/index.js --help\n# or run from source without building (note the `--` before CLI args):\nnpm run dev -- --help\n```\n\n---\n\n## Authentication\n\nGet an API key from **PostNitro → Profile → Embed → Generate API Key**. Provide it in any of these ways (in order of precedence):\n\n1. `--api-key <key>` flag on any command\n2. `POSTNITRO_API_KEY` environment variable\n3. Saved config: `postnitro auth set-key <key>` (stored in `~/.postnitro-cli/config.json`)\n\n```bash\n# Save a key (persists to ~/.postnitro-cli/config.json)\npostnitro auth set-key pn-xxxxxxxxxxxx\n\n# Check current auth status\npostnitro auth status\n\n# Remove the stored key\npostnitro auth clear\n```\n\n---\n\n## Commands\n\n### Discovery & Settings\n\n**List templates, brands, and AI presets**\n```bash\npostnitro template list [--page <n>] [--limit <n>]\npostnitro brand list [--page <n>] [--limit <n>]\npostnitro brand get <id>\npostnitro preset list [--page <n>] [--limit <n>]\n```\n\nUse these to discover the IDs you'll pass to `generate` / `import` / `schedule`.\n\n**List connected social accounts**\n```bash\npostnitro social list\npostnitro social get <id>\n```\n\nReturns social-account IDs (needed for `--selected-accounts` when scheduling), platforms, handles, and token status.\n\n**Save workspace defaults**\n```bash\npostnitro defaults set --template-id <id> --brand-id <id> --preset-id <id> --response-type PDF\npostnitro defaults get\n```\n\nResolution order for each field: **explicit flag → saved default → auto-select** (auto-selects when your workspace has exactly one candidate). Saves you from repeating IDs on every call.\n\n---\n\n### Creating Carousels\n\n**See the required slide shape**\n```bash\npostnitro carousel import-template\n```\n\n**Generate with AI**\n```bash\n# From a topic\npostnitro carousel generate --context \"5 tips for remote work\" --type text --wait\n\n# From an article URL\npostnitro carousel generate --context \"https://example.com/post\" --type article --wait\n\n# From an X (Twitter) post URL\npostnitro carousel generate --context \"https://x.com/user/status/123\" --type x --wait\n```\n\n**Import your own slides**\n```bash\n# From a file\npostnitro carousel import --file ./slides.json --wait\n\n# Inline JSON (overrides --file)\npostnitro carousel import --slides '{\"slides\":[{\"type\":\"starting_slide\",\"heading\":\"...\"}, ...]}' --wait\n```\n\nThe slides value can be a bare array or `{ \"slides\": [...] }`. Complete examples:\n[examples/import-slides.json](examples/import-slides.json), [examples/cli-launch-slides.json](examples/cli-launch-slides.json).\n\n**Options (generate / import):**\n- `--context <text>` — topic, article URL, or X URL (generate only, **required**)\n- `--type text|article|x` — how `--context` is interpreted (generate only, default `text`)\n- `--instructions <text>` — extra guidance for the AI (generate only)\n- `--slides <json>` / `--file <path>` — slide content (import only)\n- `--template-id <id>` / `--brand-id <id>` / `--preset-id <id>` — override saved defaults (`--preset-id` is generate only)\n- `--response-type PDF|PNG|DESIGN` — output format (default `PDF`). `DESIGN` skips rendering and only creates the editable design (no file), returning just `designId` + `editorUrl` — faster when you only need to schedule or edit.\n- `--generate-images` — opt in to AI image generation (images are generated and baked into the design before rendering). Also implied by any of the flags below.\n  - `--image-context <text>` — **required when generating images**: a short visual brief guiding the image prompts\n  - `--image-placement auto|background|in-line` — where images go (default `auto`, AI decides per slide)\n  - `--image-strategy strategic|all` — which slides get images (`strategic` ≈ 50%, default; `all` = every eligible slide)\n  - Best-effort: a completed post may still skip images (free plan / over AI-image quota); with `--wait` the result includes an `imageGeneration` step so you can see why. AI images use the org's separate AI-image quota, not the post's slide credits.\n- `--requestor-id <id>` — optional custom tracking ID\n- `--wait` — poll until completion and return the final output in one call\n\n---\n\n### Creating Single-Image Posts\n\nFor a single image (not a multi-slide carousel), use the `image` command group — it mirrors `carousel` but produces one image:\n\n```bash\n# See the required slide shape\npostnitro image import-template\n\n# Generate with AI\npostnitro image generate --context \"Announce our new scheduling feature\" --wait\n\n# Import your own content — a SINGLE slide object (not an array)\npostnitro image import --slide '{\"heading\":\"Welcome!\",\"sub_heading\":\"Subtitle\",\"cta_button\":\"Learn more\"}' --wait\n\n# Status / output (mirror carousel)\npostnitro image status <embedPostId>\npostnitro image output <embedPostId>\n```\n\nUnlike `carousel import` (an array of typed slides), `image import` takes **one slide object** via `--slide` (or `--file`) with only these fields: `heading` (**required**), `sub_heading`, `description`, `cta_button`, `image`, `background_image`, plus `layoutType`/`layoutConfig` for the infographic layout (same schema as carousels — every column/item needs a caller-provided `id`). All other options — `--template-id`, `--brand-id`, `--response-type`, `--generate-images` (AI images), `--wait`, … — match the carousel commands. The output `editorUrl` opens in the image editor.\n\n---\n\n### Creating Video Posts\n\nThe `video` command group turns slides into a video — **each slide is a scene**, so `video import` takes the same slide array as `carousel import`:\n\n```bash\n# See the slide rules + render settings\npostnitro video import-template\n\n# Generate with AI, rendered to MP4\npostnitro video generate --context \"3 habits that make remote teams faster\" \\\n  --response-type MP4 --video-duration 30 --wait\n\n# Import your own scenes, with an audio track\nAUDIO=$(postnitro audio list | jq -r '.audios[0].id')\npostnitro video import --file ./scenes.json \\\n  --response-type MP4 --video-duration 30 --audio-id \"$AUDIO\" --wait\n\n# Design only — no render; finish it in the video maker\npostnitro video generate --context \"...\" --wait\n\n# Status / output (mirror carousel)\npostnitro video status <embedPostId>\npostnitro video output <embedPostId>\n```\n\n**Video-only options:**\n- `--response-type MP4|DESIGN` — a video accepts **nothing else** (`PDF`/`PNG` are rejected, and `MP4` is rejected for other post types). Defaults to `DESIGN`; a saved `PDF`/`PNG` default is treated as `DESIGN` and noted in `warnings`.\n- `--video-duration <seconds>` — the **whole video's** length, not per scene. At least 5, under 60. **Required** with `--response-type MP4`.\n- `--audio-id <id>` — an audio **ID** from `postnitro audio list`, never a URL. Omit for a silent video.\n\nRendering a video takes longer than a carousel — typically 15-45s with `--wait` and `MP4`, and longer for designs with animations or GIFs (which use the enhanced renderer). The duration and audio are reused automatically when the video is scheduled as a reel.\n\n---\n\n### Audio Tracks\n\nAudio for video posts and reels. **Uploading happens in the PostNitro app** — the CLI lists and deletes only:\n\n```bash\npostnitro audio list                     # ids to pass as --audio-id\npostnitro audio delete <audioId> --yes   # destructive\n```\n\n`audio list` returns `{ id, name, url, duration, artistName, source, createdAt }` per track. Use `id` for `--audio-id` (and for a reel's `postSettings.audioId`); `url` is only for previewing. A track's `duration` is independent of `--video-duration` — a longer track is cut off at the video's length.\n\n`audio delete` removes the record **and** the stored file, and is refused while a scheduled post still references the track. Videos already rendered to MP4 keep their audio, since it's baked into the file.\n\n---\n\n### Checking Status & Output\n\nGeneration is **asynchronous**. `--wait` handles polling for you; otherwise track it manually:\n\n```bash\npostnitro carousel status <embedPostId>   # generation progress + step logs\npostnitro carousel output <embedPostId>   # final files + designId + editorUrl (once COMPLETED)\n```\n\n> **`embedPostId` vs `designId`:** `generate`/`import` return an **`embedPostId`** (the job). To *schedule* the finished carousel you need its **`designId`** (from `carousel output` or the `--wait` result) — not the `embedPostId`.\n\n---\n\n### Scheduling\n\n**Create a scheduled post or draft**\n```bash\npostnitro schedule create \\\n  --status SCHEDULED \\\n  --scheduled-at \"2026-12-31T12:00:00Z\" \\\n  --design-id <designId> \\\n  --selected-accounts '[\"<socialAccountId>\"]' \\\n  --linkedin-post-settings '{\"postType\":\"document\",\"postTitle\":\"5–90 char title\"}' \\\n  --post-content '{\"common\":\"Caption with #hashtags\"}'\n```\n\n**Options:**\n- `--status DRAFT|SCHEDULED` — **required** (`SCHEDULED` publishes at the given time; `DRAFT` saves without publishing)\n- `--scheduled-at <iso>` — **required** future ISO-8601 datetime (use a trailing `Z`)\n- `--design-id <id>` — the carousel design to attach (from `carousel output`)\n- `--post-content <json>` — captions object keyed by platform (`common`, `linkedin`, `instagram`, `tiktok`, `facebook`, `threads`, `pinterest`)\n- `--selected-accounts <json>` — array of social-account IDs\n- `--instagram-post-settings` / `--tiktok-post-settings` / `--linkedin-post-settings` / `--threads-post-settings` / `--facebook-post-settings` / `--pinterest-post-settings` — per-platform settings (JSON)\n- `--post-settings <json>` — reel settings (`videoDuration`, `audioId`)\n- `--file <path>` — a JSON file with any of the above (inline flags override it)\n\nA post must have **either** a `--design-id` **or** non-empty `--post-content`. Hashtags are auto-extracted from captions.\n\n`--post-settings` carries a reel's video settings (`{\"videoDuration\":30,\"audioId\":\"...\"}`) and is **optional** — when omitted, the API fills each field from the settings the attached design was generated with, falling back to 30 seconds with no audio.\n\n`schedule list` takes an optional `--accounts <id,id>` filter. It filters **posts**, not the accounts inside them: a post targeting LinkedIn and Instagram is returned when you filter by either, and it still reports both. Unknown IDs match nothing rather than erroring.\n\n**Manage schedules**\n```bash\npostnitro schedule list --from \"2026-01-01\" --to \"2026-12-31\"\npostnitro schedule list --from \"2026-01-01\" --to \"2026-12-31\" --accounts \"<id>,<id>\"  # only posts hitting these accounts\npostnitro schedule get <id>\npostnitro schedule update <id> ...same flags as create...   # REPLACES state — send the full intended body\npostnitro schedule delete <id> --yes\n```\n\n---\n\n### One-shot: Create + Schedule\n\nTwo commands create and schedule in a single call: `generate-and-schedule` (AI-generated) and `import-and-schedule` (your own content). Both accept `--post-type CAROUSEL|IMAGE|VIDEO` (a video also takes `--video-duration`/`--audio-id`), the AI-image flags (`--generate-images` …), and all the scheduling options.\n\n```bash\n# AI-generated\npostnitro generate-and-schedule \\\n  --context \"How AI agents automate content\" \\\n  --type text \\\n  --status SCHEDULED \\\n  --scheduled-at \"2026-12-31T12:00:00Z\" \\\n  --selected-accounts '[\"<socialAccountId>\"]' \\\n  --linkedin-post-settings '{\"postType\":\"document\",\"postTitle\":\"How AI agents automate content\"}' \\\n  --post-content '{\"common\":\"New drop 🚀 #ai #automation\"}'\n\n# Your own content — --slides (carousel array) or --slide (single image); --slides-file for a file.\n# Note: --file here is the SCHEDULE body, so slide content comes from --slides / --slides-file.\npostnitro import-and-schedule \\\n  --slides '{\"slides\":[{\"type\":\"starting_slide\",\"heading\":\"...\"}, ...]}' \\\n  --status SCHEDULED \\\n  --scheduled-at \"2026-12-31T12:00:00Z\" \\\n  --selected-accounts '[\"<socialAccountId>\"]' \\\n  --post-content '{\"common\":\"...\"}'\n```\n\nCreates the design, waits for it, then schedules it — in one command. If creation succeeds but scheduling fails, the error includes the `designId` so you can retry scheduling **without re-creating** (and re-spending credits).\n\n---\n\n### Brand Kits\n\n```bash\n# Individual flags\npostnitro brand create --name \"PostNitro\" --handle \"@postnitroai\" --image \"https://.../logo.png\" [--company-detail]\n\n# Full object inline (overrides --file and the individual flags)\npostnitro brand create --data '{\"name\":\"PostNitro\",\"handle\":\"@postnitroai\",\"image\":\"https://.../logo.png\",\"isCompanyDetail\":true}'\n\n# Update (all fields required by the API — fetch current values with `brand get` first)\npostnitro brand update <id> ...same as create...\n```\n\nToggle what's rendered on slides with `--no-show-name`, `--no-show-handle`, `--no-show-image`.\n\n---\n\n## Platform-Specific Features\n\nSet per-platform behavior via the `--*-post-settings` flags when scheduling. Settings are conditionally required based on the platforms among your `--selected-accounts`.\n\n### LinkedIn\n```bash\n# PDF carousels are normally posted as documents (postTitle required, 5–90 chars)\npostnitro schedule create \\\n  --status SCHEDULED --scheduled-at \"2026-12-31T12:00:00Z\" \\\n  --design-id <designId> \\\n  --selected-accounts '[\"linkedin-account-id\"]' \\\n  --linkedin-post-settings '{\"postType\":\"document\",\"postTitle\":\"My carousel title\"}' \\\n  --post-content '{\"common\":\"LinkedIn caption #build\"}'\n```\n`postType`: `carousel | document | image | reel`.\n\n### Instagram\n```bash\npostnitro schedule create \\\n  --status SCHEDULED --scheduled-at \"2026-12-31T12:00:00Z\" \\\n  --design-id <designId> \\\n  --selected-accounts '[\"instagram-account-id\"]' \\\n  --instagram-post-settings '{\"postType\":\"carousel\",\"postAsStory\":false}' \\\n  --post-content '{\"instagram\":\"Caption #hashtag\"}'\n```\n\n### TikTok\n```bash\npostnitro schedule create \\\n  --status SCHEDULED --scheduled-at \"2026-12-31T12:00:00Z\" \\\n  --design-id <designId> \\\n  --selected-accounts '[\"tiktok-account-id\"]' \\\n  --tiktok-post-settings '{\"postType\":\"carousel\",\"privacyLevel\":\"PUBLIC_TO_EVERYONE\",\"canComment\":true,\"isBrandedContent\":false,\"isYourBrand\":false,\"isThirdPartyBrand\":false,\"isAIGeneratedContent\":true}' \\\n  --post-content '{\"tiktok\":\"Caption #fyp\"}'\n```\n\n### Threads\n```bash\npostnitro schedule create \\\n  --status SCHEDULED --scheduled-at \"2026-12-31T12:00:00Z\" \\\n  --design-id <designId> \\\n  --selected-accounts '[\"threads-account-id\"]' \\\n  --threads-post-settings '{\"postType\":\"carousel\"}' \\\n  --post-content '{\"threads\":\"Caption\"}'\n```\n\n### Facebook\n```bash\npostnitro schedule create \\\n  --status SCHEDULED --scheduled-at \"2026-12-31T12:00:00Z\" \\\n  --design-id <designId> \\\n  --selected-accounts '[\"facebook-page-account-id\"]' \\\n  --facebook-post-settings '{\"postType\":\"carousel\"}' \\\n  --post-content '{\"facebook\":\"Caption\"}'\n```\n\n`carousel` posts every slide as one multi-photo post. For swipeable link cards use `{\"postType\":\"link_carousel\",\"linkUrl\":\"https://example.com\",\"callToAction\":\"LEARN_MORE\"}` — see [PLATFORM_SETTINGS.md](PLATFORM_SETTINGS.md#facebook----facebook-post-settings).\n\n### Pinterest\n```bash\npostnitro schedule create \\\n  --status SCHEDULED --scheduled-at \"2026-12-31T12:00:00Z\" \\\n  --design-id <designId> \\\n  --selected-accounts '[\"pinterest-board-account-id\"]' \\\n  --pinterest-post-settings '{\"postType\":\"carousel\",\"title\":\"Pin title\",\"link\":\"https://example.com\"}' \\\n  --post-content '{\"pinterest\":\"Pin description\"}'\n```\n\nPinterest accounts are boards — each connected board is its own account. `carousel` publishes a carousel Pin (2–5 slides), `image` a single image Pin, `reel` a video Pin. `title` (max 100 chars) and `link` are optional; only the first 800 characters of the caption are published. 2:3 designs work best — see [PLATFORM_SETTINGS.md](PLATFORM_SETTINGS.md#pinterest----pinterest-post-settings).\n\n---\n\n## Features for AI Agents\n\n### Discovery workflow\nThe CLI enables dynamic discovery so agents don't need hardcoded IDs:\n\n1. **List resources** — `template list`, `brand list`, `preset list`, `social list`\n2. **Save defaults** — `defaults set` so later calls omit the IDs\n3. **Create** — `carousel generate` or `carousel import` (use `--wait`)\n4. **Capture the `designId`** — from the `--wait` result or `carousel output`\n5. **Schedule** — `schedule create --design-id ...` to the discovered social accounts\n\n### JSON mode\nPass complex bodies inline as JSON (agent-friendly) or from a file — inline wins:\n\n```bash\npostnitro carousel import --slides '{\"slides\":[ ... ]}'\npostnitro schedule create --post-content '{\"common\":\"...\"}' --selected-accounts '[\"id\"]' ...\npostnitro brand create --data '{\"name\":\"...\",\"handle\":\"@...\",\"image\":\"https://...\"}'\n# or, from a file:\npostnitro schedule create --file ./post.json\n```\n\n### All output is JSON\nEvery command outputs JSON for easy parsing:\n\n```bash\nDID=$(postnitro carousel import --file ./slides.json --wait | jq -r .designId)\nLINKEDIN=$(postnitro social list | jq -r 'first(.accounts[] | select(.platform==\"linkedin\").id)')\n```\n\n### Async with `--wait`\n`--wait` on `generate`/`import` polls until completion and returns the final output (including `designId`) in a single call — ideal for one-shot agent tool calls.\n\n---\n\n## Common Workflows\n\n### Generate → schedule to LinkedIn\n```bash\n#!/bin/bash\nDID=$(postnitro carousel generate --context \"5 remote work habits\" --type text --wait | jq -r .designId)\nLINKEDIN=$(postnitro social list | jq -r 'first(.accounts[] | select(.platform==\"linkedin\").id)')\n\npostnitro schedule create \\\n  --status SCHEDULED \\\n  --scheduled-at \"2026-12-31T13:00:00Z\" \\\n  --design-id \"$DID\" \\\n  --selected-accounts \"[\\\"$LINKEDIN\\\"]\" \\\n  --linkedin-post-settings '{\"postType\":\"document\",\"postTitle\":\"5 remote work habits\"}' \\\n  --post-content '{\"common\":\"New carousel 🚀 #remotework\"}'\n```\n\n### Import your own slides, then schedule\n```bash\n#!/bin/bash\nDID=$(postnitro carousel import --file ./examples/import-slides.json --wait | jq -r .designId)\npostnitro schedule create --status DRAFT --scheduled-at \"2026-12-31T13:00:00Z\" --design-id \"$DID\"\n```\n\n### Batch scheduling\n```bash\n#!/bin/bash\nDATES=(\"2026-02-14T09:00:00Z\" \"2026-02-15T09:00:00Z\" \"2026-02-16T09:00:00Z\")\nTOPICS=(\"Monday motivation 💪\" \"Tuesday tips 💡\" \"Wednesday wisdom 🧠\")\n\nfor i in \"${!DATES[@]}\"; do\n  postnitro generate-and-schedule \\\n    --context \"${TOPICS[$i]}\" --type text \\\n    --status SCHEDULED --scheduled-at \"${DATES[$i]}\" \\\n    --selected-accounts '[\"<socialAccountId>\"]' \\\n    --linkedin-post-settings '{\"postType\":\"document\",\"postTitle\":\"Daily post\"}'\ndone\n```\n\n---\n\n## Documentation\n\n**For AI agents:**\n- **[SKILL.md](SKILL.md)** — skill reference with patterns and the key gotchas\n\n**Deep-dive guides:**\n- **[QUICK_START.md](QUICK_START.md)** — zero to a scheduled carousel in minutes\n- **[HOW_TO_RUN.md](HOW_TO_RUN.md)** — install & run methods (npm, npx, skill, local dev)\n- **[PLATFORM_SETTINGS.md](PLATFORM_SETTINGS.md)** — LinkedIn/Instagram/TikTok/Threads/Facebook/Pinterest settings schemas\n- **[PROJECT_STRUCTURE.md](PROJECT_STRUCTURE.md)** — code architecture\n- **[FEATURES.md](FEATURES.md)** — full feature list\n- **[PUBLISHING.md](PUBLISHING.md)** — npm release guide\n\n**Examples:**\n- **[examples/EXAMPLES.md](examples/EXAMPLES.md)** — runnable recipes and file index\n- **[examples/basic-usage.sh](examples/basic-usage.sh)** — end-to-end workflow script\n- **[examples/](examples/)** — ready-to-use slide JSON files\n\n**Changes:**\n- **[CHANGELOG.md](CHANGELOG.md)** — release notes\n\nRun `postnitro <command> --help` or `postnitro <command> <subcommand> --help` for full flag details.\n\n---\n\n## API Endpoints\n\nThe CLI interacts with these PostNitro Embed API endpoints:\n\n| Endpoint | Method | Purpose |\n|----------|--------|---------|\n| `/post/initiate/generate` | POST | Start AI generation of a post (carousel or image) |\n| `/post/initiate/import` | POST | Start an import from your own content (carousel slides or a single image) |\n| `/post/status/:id` | GET | Check generation status + step logs |\n| `/post/output/:id` | GET | Get final output + `designId` |\n| `/template` | GET | List templates |\n| `/brand` | GET / POST | List / create brands |\n| `/brand/:id` | GET / PUT | Get / update a brand |\n| `/ai-preset` | GET | List AI presets |\n| `/social-account` | GET | List connected social accounts |\n| `/social-account/:id` | GET / DELETE | Get / disconnect a social account |\n| `/schedule` | GET / POST | List / create scheduled posts |\n| `/schedule/:id` | GET / PUT / DELETE | Get / update / delete a scheduled post |\n\n---\n\n## Environment Variables\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `POSTNITRO_API_KEY` | No* | - | Your PostNitro Embed API key |\n| `POSTNITRO_CONFIG_DIR` | No | `~/.postnitro-cli` | Where config/defaults are stored |\n\n*Either `--api-key`, `POSTNITRO_API_KEY`, or a saved key (`auth set-key`) is required.\n\n---\n\n## Error Handling\n\nFailures print JSON to **stderr** and exit non-zero:\n\n```json\n{ \"success\": false, \"error\": { \"message\": \"PostNitro API error (422): ...\", \"statusCode\": 422 } }\n```\n\n- **Exit code 0**: success\n- **Exit code 1**: error\n\n**Common errors:**\n\n| Error | Solution |\n|-------|----------|\n| `No API key found` | Pass `--api-key`, set `POSTNITRO_API_KEY`, or run `auth set-key` |\n| `Missing --brand-id ... multiple candidates` | Pass the ID or save one via `defaults set` |\n| `Scheduled at is in the past` | Use a **future** ISO-8601 datetime with trailing `Z` |\n| `--<flag> must be valid JSON` | Fix the inline JSON string |\n| `Slides must be an array with at least 3 entries` | Provide starting + body + ending slides |\n| `Refusing to delete ... without --yes` | Add `--yes` to confirm destructive actions |\n\n---\n\n## Development\n\n### Project structure\n\n```\nsrc/\n├── index.ts                    # CLI entry point (commander)\n├── commands/\n│   ├── auth.ts                 # API key management\n│   ├── defaults.ts             # Saved template/brand/preset defaults\n│   ├── template.ts             # Template listing\n│   ├── brand.ts                # Brand kit CRUD\n│   ├── preset.ts               # AI preset listing\n│   ├── carousel.ts             # carousel generate / import / status / output\n│   ├── image.ts                # image generate / import / status / output\n│   ├── social.ts               # Social account management\n│   ├── schedule.ts             # Scheduling CRUD\n│   ├── generate-and-schedule.ts# One-shot AI generate + schedule\n│   └── import-and-schedule.ts  # One-shot import + schedule\n└── lib/\n    ├── client.ts               # PostNitro API client\n    ├── config-store.ts         # Key + defaults resolution\n    ├── generation.ts           # Shared create-flow helpers (client, defaults, output, AI-image opts)\n    ├── slide-input.ts          # Shared slide/​image-slide JSON parsing\n    ├── schedule-input.ts       # Shared schedule JSON option parsing\n    ├── schedule-warnings.ts    # Soft validation warnings\n    ├── json-file.ts            # JSON file reader\n    ├── output.ts               # JSON stdout/stderr + error wrapper\n    └── types.ts                # Shared types\n```\n\n### Scripts\n\n```bash\nnpm run dev       # Run from source with tsx (use: npm run dev -- <args>)\nnpm run build     # Compile TypeScript to dist/\nnpm run start     # Run the built CLI (node dist/index.js)\n```\n\nThe build is a plain `tsc` compile; `bin.postnitro` points to `dist/index.js`, and `prepublishOnly` rebuilds before publish.\n\n---\n\n## Quick Reference\n\n```bash\n# Authentication\npostnitro auth set-key <key>                                          # Save API key\npostnitro auth status                                                 # Check auth\npostnitro auth clear                                                  # Remove key\nexport POSTNITRO_API_KEY=your_key                                     # Or use env var\n\n# Discovery\npostnitro template list                                               # List templates\npostnitro brand list                                                  # List brands\npostnitro preset list                                                 # List AI presets\npostnitro social list                                                 # List social accounts\npostnitro defaults set --template-id <id> --brand-id <id> --preset-id <id>\n\n# Create (carousel or image; add --generate-images --image-context \"...\" for AI images)\npostnitro carousel generate --context \"topic\" --type text --wait      # AI generate carousel\npostnitro carousel import --file ./slides.json --wait                 # Import carousel (slides array)\npostnitro image generate --context \"topic\" --wait                     # AI generate single image\npostnitro image import --slide '{\"heading\":\"...\"}' --wait             # Import single image (one object)\npostnitro video generate --context \"topic\" --response-type MP4 --video-duration 30 --wait   # AI generate video\npostnitro video import --file ./scenes.json --response-type MP4 --video-duration 30 --wait  # Import video (slides = scenes)\npostnitro audio list                                                  # Audio ids for --audio-id\npostnitro audio delete <audioId> --yes                                # Delete a track\npostnitro carousel status <embedPostId>                               # Check progress (also: image/video status)\npostnitro carousel output <embedPostId>                               # Get output + designId (also: image/video output)\n\n# Schedule\npostnitro schedule create --status SCHEDULED --scheduled-at \"<iso>\" --design-id <id> \\\n  --selected-accounts '[\"<id>\"]' --linkedin-post-settings '{\"postType\":\"document\",\"postTitle\":\"...\"}' \\\n  --post-content '{\"common\":\"caption\"}'\npostnitro schedule list --from \"<date>\" --to \"<date>\"                 # List (add --accounts \"<id>,<id>\" to filter)\npostnitro schedule get <id>                                           # Get one\npostnitro schedule delete <id> --yes                                  # Delete\n\n# One-shot: create + schedule (both take --post-type + AI-image flags)\npostnitro generate-and-schedule --context \"topic\" --status SCHEDULED --scheduled-at \"<iso>\" ...\npostnitro import-and-schedule --slides '{\"slides\":[...]}' --status SCHEDULED --scheduled-at \"<iso>\" ...   # or --slide for image\n\n# Help\npostnitro --help\npostnitro schedule create --help\n```\n\n---\n\n## License\n\nMIT\n\n---\n\n## Links\n\n- **Website:** [postnitro.ai](https://postnitro.ai)\n- **GitHub:** [postnitro/postnitro-agent](https://github.com/postnitro/postnitro-agent)\n","readmeFilename":"README.md"}