@presentfast/cli
v1.2.0
Published
PresentFast command-line — publish HTML or Markdown presentations and view analytics from the terminal.
Maintainers
Readme
@presentfast/cli
Placeholder. The real CLI ships in Phase 3 (
AI_FIRST_ROADMAP.md§3 A2). This directory exists so the@presentfastnpm scope is reserved against the package name and so the futurecli/layout is locked in.
When Phase 3 lands, this package will be the pf (or presentfast) binary developers use to publish presentations from the terminal — also the audience needed by CI/CD pipelines and AI-agent fallback flows.
What will live here (Phase 3)
cli/
├── package.json
├── src/
│ ├── index.ts
│ ├── auth/ # OAuth client (shared logic with mcp-server)
│ └── commands/
│ ├── login.ts # browser OAuth + device flow fallback
│ ├── logout.ts
│ ├── publish.ts
│ ├── list.ts
│ ├── rename.ts
│ ├── delete.ts
│ └── analytics.ts
└── README.md ← you are hereV1 commands (Phase 3)
pf login # OAuth flow: opens browser, captures token automatically
pf login --device # RFC 8628 fallback for CI / SSH / headless
pf logout # POSTs /oauth/revoke, deletes local token
pf publish ./deck.html # upload + print share URL
pf publish ./deck.md # markdown converted server-side
pf list # list owner's projects
pf rename <id> "New Title"
pf delete <id> --yes
pf analytics <id> # print summary numbersShare links & gates
Manage gated share links for your presentations — password protection, email capture, domain allowlists, expiry dates, and per-recipient tracking. Requires owner or editor access; run pf login first.
pf links create <projectId> Create a share link (no gates by default)
pf links list <projectId> List all share links and their gates
pf links update <projectId> <linkId> Change gates on an existing link
pf links revoke <projectId> <linkId> Turn off a share link (keeps history)
pf links leads <projectId> <linkId> List email addresses captured by a link's email gatepf links create flags
| Flag | Description |
|------|-------------|
| --password <pw> | Require this password to view |
| --require-email | Ask the viewer for their email before viewing |
| --allowed-domains <csv> | Only allow these email domains, comma-separated (implies --require-email) |
| --expires <iso> | ISO 8601 date/time after which the link stops working |
| --label <text> | Internal label for the link |
| --recipient-email <email> | Personal link for this recipient (tracking) |
| --recipient-name <name> | Recipient name |
| --recipient-org <org> | Recipient organisation |
pf links update flags
Same as create, plus --no-password and --no-require-email to clear those gates. Pass an empty string to --allowed-domains "" or --expires "" to clear those fields.
Examples
# Create a password-protected, email-gated link
pf links create <projectId> --password hunter2 --require-email
# Restrict to a company domain (email gate auto-enabled)
pf links create <projectId> --allowed-domains acme.com --label "Acme Q3 deck"
# Create a personal link for a specific recipient
pf links create <projectId> --recipient-email [email protected] --recipient-name "Jane Smith"
# List all links for a project
pf links list <projectId>
# Remove the password from an existing link
pf links update <projectId> <linkId> --no-password
# View captured email leads
pf links leads <projectId> <linkId>
# Revoke a link
pf links revoke <projectId> <linkId>Team & collaboration
Invite collaborators to your presentations, manage their roles, and accept or decline your own invitations. Owner access is required for invite/role-change/remove; run pf login first.
pf members — manage a presentation's team
pf members list <projectId> List all members and their roles
pf members invite <projectId> <email> [--role] Invite someone by email (default role: viewer)
pf members set-role <projectId> <memberId> <role> Change a member's role
pf members remove <projectId> <memberId> Remove a collaboratorAvailable roles: editor, viewer, analyst.
pf invites — view and act on your own pending invitations
pf invites list List your pending invitations (shows token, role, project)
pf invites accept <token> Accept an invitation (grants you access)
pf invites decline <token> Decline an invitationExamples
# Invite a colleague as an editor
pf members invite <projectId> [email protected] --role editor
# List members to find their member IDs
pf members list <projectId>
# Change a member's role to viewer
pf members set-role <projectId> <memberId> viewer
# Remove a member
pf members remove <projectId> <memberId>
# See your own pending invitations
pf invites list
# Accept an invitation by its token
pf invites accept <token>
# Decline an invitation
pf invites decline <token>Phase 1 status
Phase 1 (A1a OAuth foundation) is complete — the server-side endpoints the CLI will call are live:
POST /api/oauth/authorize— consent flowPOST /api/oauth/token— code + refresh grantsPOST /api/oauth/revoke— RFC 7009 token revocationGET /.well-known/oauth-authorization-server— RFC 8414 discovery
Until Phase 3
This README is the entire package. The auth-flow library will be duplicated between cli/src/auth/ and mcp-server/src/auth/ until the codebase outgrows that — at which point we'll extract to a shared internal package.
