Try it yourself

Try Interactive AI Presenter

The recording uses Codex. Configure an external agent with local CLI execution and file-reading access, then use this workflow and prompt. Compatibility with every agent or model is not guaranteed.

1. Prepare the GUI and CLI

Install Quick Presenter v2.5.0 for your OS and use the GUI and CLI from the same package. It is available from Microsoft Store for Windows, Mac App Store, as a macOS DMG, and as a Debian package. The export interface introduced in v2.0.0 remains compatible through Control Protocol v1.

Mac App Store v2.5.0 includes /Applications/Quick Presenter.app/Contents/Helpers/ControlCLI.app/Contents/MacOS/qp (Apple silicon, M1 or later; macOS 14.4 or later). The Developer ID / DMG app uses /Applications/Quick Presenter.app/Contents/MacOS/qp; Windows Store uses the qp.exe execution alias; Debian uses /usr/bin/qp. Keep the macOS CLI inside its installed app. Commands below assume qp is on PATH; follow the installation guide to create a user-local link, or replace qp with the quoted full path.

Downloads by OS · CLI installation

2. Open the sample and read the whole deck

Save the sample below as interactive-ai-sample.pdf in your working directory. It is the 12-page notes-bearing docs/samples/quick-presenter-demo.pdf from the v2.0.0 release. Use GUI and CLI from the same package and share XDG_RUNTIME_DIR if set.

Download the sample PDF with notes

On Mac App Store, qp open starts the GUI if needed. For a PDF not previously authorized, select the exact requested file in the native picker within 120 seconds. Cancellation or choosing a different file preserves the active presentation. Later opens reuse saved read-only access.

qp --version --json
qp open interactive-ai-sample.pdf --json
qp status --json
qp export --json > deck-context.json
qp context --full --json

Before export, check opening: false, render_state: "ready", and notes_state: "ready" in status. If you get NOTES_LOADING, wait for readiness and retry the read. Do not pass empty failure output to your agent. Export returns an array of every page’s text and notes without navigating.

With Python 3, the following check reports whether each exported page has notes. An empty note means no notes on that page. Export does not include images, diagram interpretation, or OCR.

python3 - <<'PYCODE'
import json
from pathlib import Path
pages = json.loads(Path("deck-context.json").read_text())
print("Pages:", len(pages))
for entry in pages:
    page = entry["current"]
    print(page["page"], "notes:", bool(page["notes"].strip()))
PYCODE

3. Ask a question, then request a return

Try: “Why did you choose Rust instead of Electron?” Let the agent select a relevant page from the whole export and use qp goto N --json only when helpful. N is the one-based page chosen from the material. Ask “Return to where we left off” to restore the saved page after checking the document and session still match. Neither a page jump nor automatic restoration is required for every answer.

Each entry uses current.page, current.text, and current.notes. presentation.page is the displayed page when export started, not each exported page number.

4. Copy this agent prompt

Give this to an agent configured to execute the local CLI. Configure the PDF path and qp executable for your environment.

You are an external interactive presenter for Quick Presenter.
Use the configured qp CLI; do not simulate application actions.
1. Read qp status --json and save session_id, document_revision, and page.
2. Read qp export --json once for the whole deck. Use current.page,
   current.text, and current.notes in each entry. presentation.page is the
   initial live page, not the exported page number. Confirm notes are available.
3. Answer the user's questions using this deck. Distinguish source facts from
   your interpretation. Say when the deck does not support an answer.
4. Select a relevant page from the exported material. Use qp goto N --json
   only when showing that page helps. Confirm state with qp status --json.
5. Return to the saved page only when the user asks. Check that session_id and
   document_revision still match before restoring. Do not reopen an old PDF or
   restore a page into a different document. Confirm the result.
6. Refresh the export if the document changes. If notes are loading, wait for
   notes_state ready and retry the read. Report failures; check status before
   retrying an action whose outcome is uncertain. Do not invent successful
   actions, missing notes, image contents, or claims absent from the deck.
Do not narrate automatically or advance continuously unless explicitly asked.

Back to the demo