documentation
Getting started
Pilog is a global-hotkey scratchpad and a local inbox that turns rough notes into repo-aware GitHub issue drafts. This guide installs the app, connects it to GitHub and the Pi draft agent, and walks you through the loop from capture to publish.
Step 01
Download & install
Download
Open the .dmg, drag Pilog to Applications, and launch from Spotlight or Launchpad.
The first stable release hasn't shipped yet, so the card above offers the current preview build. Preview builds are feature-complete but unsigned, so your OS will show a security warning on first launch. See all preview downloads for older versions.
System requirements
- macOS 12 Monterey or later; Apple Silicon or Intel. Allow Pilog to use Keychain when prompted.
- Windows 10 or later. Git for Windows must be installed and on your PATH before linking a repository.
- Linux needs git from your distribution and a desktop keyring (GNOME Keyring or KWallet via libsecret) for credential storage. Headless sessions, minimal containers, and some WSL2 setups do not expose a keyring.
Step 02
First launch
The first time you open Pilog it walks through a short onboarding: confirm the global hotkey, sign in to GitHub, link a local repository, configure the Pi draft agent, capture a note, and generate your first draft. You can skip onboarding and return to any step from Settings.
- Confirm or rebind the global capture hotkey. Default is Ctrl⇧Space. The hotkey is registered against your OS, so it works whether or not Pilog has window focus.
- Connect GitHub (next step).
- Link one local repository (the folder on disk you intend to file issues against).
- Configure the Pi provider and model (further down this page).
- Capture a quick note with the hotkey to confirm the loop works end-to-end.
Step 03
Connect GitHub
Pilog signs into GitHub using the Device Flow. When you click Sign in, Pilog opens GitHub in your browser, you authorize the app, and the access token is stored in OS-backed credential storage (Keychain on macOS, DPAPI on Windows, the keyring on Linux). No personal access token is required.
The OAuth scope is the minimum needed to read repository metadata and create issues on your behalf. Sign out from Settings → Account at any time; the token is wiped from keychain immediately.
Step 04
Configure Pi
Pi is the local agent harness that reads your selected notes alongside the active repository and produces structured issue drafts. Pilog bundles the Pi runtime; you choose the provider and model. A cloud API is the default path; for inference that never leaves your machine, use a local model via Ollama (recommended) or another OpenAI-compatible local server.
Recommended: Anthropic as the provider and claude-sonnet-4-6 as the model. Sonnet 4.6 reasons well over rough developer prose, follows the issue-draft schema reliably, and stays inside the latency budget for an interactive review session.
In Pilog, open Settings → Provider & Model and:
- Pick Anthropic from the provider dropdown.
- Pick claude-sonnet-4-6 from the model dropdown.
- Paste your Anthropic API key. Get one at console.anthropic.com/settings/keys . Create a workspace if you don't have one, then Create Key. Keys start with sk-ant-….
- Click Configure Pi. The key is stored in OS-backed safe storage, separate from Pilog's SQLite database.
Already use the pi CLI on this machine? Click Import existing Pi config on the setup panel and Pilog will pick up provider credentials from ~/.pi/agent/auth.json without you re-entering anything.
Step 05
Your first note
Press Ctrl⇧Space from anywhere. A quiet markdown scratchpad opens; type the thought as it occurs to you. No fields, no repo selector, no priority picker. Save with CtrlS or simply close the window. The note lands in your inbox.
Notes are plain markdown. Links, code fences, lists, and inline backticks all render in the draft generator's context. You can edit, retitle, or delete a note from the inbox at any time.
Step 06
Generate drafts
Open the inbox (Ctrl1), select one or more notes belonging to the same linked repo, and press GD, or click Generate Drafts. Pi reads the notes alongside repository metadata, groups related ideas, and writes structured issue drafts with titles, bodies, suggested labels, affected files, and a confidence signal.
Every draft is visibly anchored to the notes that produced it. The reasoning summary is short by design; the raw source notes are never hidden behind an expander by default. If the agent grouped two notes you wanted to keep separate, you can split a draft and regenerate just that subset.
What gets sent
Shortcuts
Pilog is keyboard-first. Every triage and review action has a shortcut; the mouse is a courtesy. The few you'll learn first:
Global
- Ctrl⇧SpaceOpen the scratchpad anywhere
- Ctrl1Open Inbox
- Ctrl2Open Drafts
- CtrlKOpen command palette
Inbox & Drafts
- JMove to next item
- KMove to previous item
- GDGenerate drafts from selection
- Ctrl↵Publish the draft you’re reading
- EscStep back, clear selection, or close
Editor
- CtrlSSave the current note or draft
Ctrl is ⌘ on macOS, Ctrl on Windows and Linux. All shortcuts are rebindable from Settings → Shortcuts.
Pi, in depth
Anthropic + Claude Sonnet 4.6 is the recommended setup, but Pi is a model-agnostic harness. You can switch providers at any time from Settings without re-onboarding.
Model catalog
Settings exposes the full Pi model registry bundled with Pilog. Browse pricing and context windows at pi.dev/models, then use the same provider and model id here. Default for drafts: Anthropic claude-sonnet-4-6.
- Direct APIs: Anthropic, OpenAI, Google (Gemini), DeepSeek, xAI, Mistral, Groq, and others.
- Gateways: OpenRouter, Vercel AI Gateway, Amazon Bedrock, Google Vertex, Azure OpenAI, Cloudflare AI Gateway.
- Coding-agent sign-in: GitHub Copilot, OpenAI Codex, OpenCode, Kimi Coding (OAuth where supported).
- Custom & local: Ollama, LM Studio, vLLM, or OpenAI-compatible endpoints via ~/.pi/agent/models.json. See Local models (Ollama) below. Results vary with smaller models.
Local models (Ollama)
Pilog is local-first for your journal: notes, drafts, and run history stay in SQLite on your machine. Generate Drafts is the step that can leave it, unless Pi talks to a model running locally. Ollama is the recommended path; LM Studio and other OpenAI-compatible servers use the same models.json pattern with a different baseUrl.
- Install Ollama and confirm it is running (the menu-bar app on macOS, or ollama serve on Linux).
- Pull a coding-oriented model. For example:Larger models draft more reliably; smaller ones are faster on modest hardware.$
ollama pull qwen2.5-coder:7b - Create or edit ~/.pi/agent/models.json so Pi can reach Ollama (use the model tag you pulled):Ollama ignores apiKey; Pi requires the field. Full options are in Pi's custom-models docs.
{ "providers": { "ollama": { "baseUrl": "http://localhost:11434/v1", "api": "openai-completions", "apiKey": "ollama", "models": [{ "id": "qwen2.5-coder:7b" }] } } } - In Pilog, open Settings → Provider & Model. Choose ollama and your model. Paste ollama (or any placeholder) into the API key field and click Configure Pi. Pilog stores it in OS-backed safe storage; Ollama does not validate it.
- Generate a test draft. Traffic stays on localhost. Publishing to GitHub still requires network access and remains a separate, explicit step.
If Ollama does not appear
Getting credentials
Which key or sign-in you need depends on the provider you pick. The onboarding path below uses Anthropic; for any other provider, open pi.dev/models and use that vendor's console (or OAuth, for coding-agent providers).
- Anthropic (recommended): console.anthropic.com/settings/keys → Create Key. Add credit at Billing. Typical draft generation costs a few cents per run.
- OpenAI: platform.openai.com/api-keys → Create new secret key.
- Google (Gemini): aistudio.google.com/apikey.
- OpenRouter: openrouter.ai/keys. One key reaches many catalog models.
API keys are stored in OS-backed safe storage, never in Pilog's SQLite database and never written to logs.
Switching models
Open Settings → Provider & Model, change the selection, and click Change…. The change applies to new draft generations; runs in the agent run history retain the model they were generated with so the audit trail stays honest.
Review & publish
Drafts land in the Drafts view (Ctrl2) unpublished. Read each one, edit the title or body inline, accept the suggested labels or pick your own, and press Ctrl↵ to publish to GitHub. Pilog writes the issue and keeps a local publish-log entry linking the draft, the source notes, and the resulting issue URL.
Auto-publish exists for power users but is off by default, scoped per-linked-repo, and logged. Auto-publish never applies retroactively; only new drafts generated after the toggle is enabled are eligible.
Privacy & local-first
Pilog is local-first by stance, not as a fallback. Your journal (notes, drafts, repo metadata, and the full agent run history) lives in local SQLite. Secrets (GitHub OAuth tokens and Pi provider keys) live in OS credential storage: Keychain on macOS, DPAPI on Windows, the desktop keyring on Linux.
Fully local means two things: journal data on disk (always), and draft inference on your machine (only when Pi uses a local model such as Ollama. See Local models (Ollama)). The default onboarding path uses a cloud API; that is still BYOK and explicit, but Generate sends context to the vendor.
Data leaves your machine in exactly two situations, both under your control:
- Generate Drafts sends the selected notes and a bounded slice of repository context to your configured Pi provider (localhost with Ollama, otherwise the provider's API. Drafts and run history are saved locally either way.
- Publish sends the specific draft you're publishing to GitHub as a new issue. Local drafts stay on your machine until you publish them.
There is no telemetry, no usage analytics, and no automatic crash reporting. The publish log makes GitHub writes auditable.
Troubleshooting
The hotkey doesn’t open the scratchpad
Pi setup says “missing credential” after I pasted a key
Generate Drafts is disabled
Linux: secure storage is unavailable
The Windows installer triggers a SmartScreen warning
Still stuck? Open an issue on GitHub.