v1.0.1

Don't rely
on memory.

A checklist runner for the terminal and browser. Write YAML, step through items one at a time, keep history. Loosely inspired by how pilots think about procedures.

curl -sSL https://raw.githubusercontent.com/benlutz/preflt/main/install.sh | sh
preflt run deploy
$ preflt run deploy
 
deploy — Pre-deployment checklist
────────────────────────────────────
 
▸ CODE
 
    All tests passing?
    What version?  v2.4.1
 
▸ DEPLOY
 
    Env variables set in prod?
    Rollback plan documented?
     Know the exact steps to revert
 
────────────────────────────────────
[enter] confirm   [n] n/a   [q] quit 

Not a
to-do app.

The idea borrows from aviation: crews run checklists not because they forget things, but because memory isn't reliable under pressure. That principle applies just as well to a deploy, an incident, or a weekly ops review.

preflt brings that to the command line — nothing more than that. Items are confirmed one at a time, progress survives crashes, and every run leaves a log. No half-remembered steps. No "I think I did that."

Everything a runbook needs.

Phases
Group items under named headings. Each phase appears as a divider in both the TUI and web UI.
Resume
Progress is saved after every confirmed item. Kill the process, restart — pick up exactly where you left off.
Conditions
Items can branch on yes/no answers — trigger a different checklist, skip ahead, or abort and hand off immediately.
Chaining
A checklist can trigger the next one automatically on completion. Chains share a log ID with loop protection built in.
Automations
Run shell commands or POST to a webhook on any item confirmation or on checklist completion. Errors are logged, never blocking.
Scheduling
Register daily, weekly, or monthly schedules. The startup screen shows what's due when you open your terminal.
History
Every run is logged with timestamps, duration, and per-item values. preflt history <name> shows the last 10.
Emergency mode
Set type: emergency to disable N/A and skipping. Every item must be explicitly confirmed — no exceptions.

Write YAML.
Run anything.

Checklists live in ~/.preflt/ as plain YAML files. The schema is small and readable — phases, items, types, and optional conditions.

  • Items are do (confirm) or check (capture a value)
  • Add a note for context shown during that item
  • Mark items na_allowed: true for optional steps
  • Conditions branch on yes/no without extra code
  • Fire shell or webhook automations per-item or on completion
  • Set trigger_checklist to chain into the next workflow
~/.preflt/deploy.yaml yaml
name: deploy
description: Pre-deployment checklist

phases:
  - name: CODE
    items:
      - id: tests
        label: All tests passing?
        type: do

      - id: version
        label: What version are we deploying?
        type: check

  - name: DEPLOY
    items:
      - id: env-vars
        label: Environment variables set in prod?
        type: do

      - id: rollback
        label: Rollback plan documented?
        note: Know the exact steps to revert
        type: do
        on_complete:
          - shell: echo "ready to ship"
          - webhook: https://hooks.example.com/deploy

trigger_checklist: post-deploy
# starts post-deploy automatically on completion

Terminal or browser — same state.

$ preflt run deploy

Terminal TUI

A keyboard-driven interface built with Bubbletea. Steps through each item one at a time — no list to scroll, no decisions to make. Just the current item and what to do.

  • Full keyboard control — confirm, N/A, quit to save
  • Text entry prompt for check-type items
  • Yes/no screen for condition items
  • Progress survives process kills — always resumable
🌐 $ preflt web deploy

Browser UI

Starts a local server at localhost:8080 and opens the checklist in your browser. Ideal for screen sharing, a second monitor, or remote sessions over SSH port-forward.

  • Full checklist visible at a glance with progress overview
  • Confirm, N/A, and text input — all from the browser
  • Works headlessly — no display required on the host
  • Checklist chains continue without restarting the server

Both interfaces write to the same run state. Start in the terminal, switch to the browser, continue from the same item. The state file on disk is the single source of truth.

Up in 30 seconds.

Detects your OS and architecture automatically. No Go installation required.

macOS / Linux — recommended
$ curl -sSL https://raw.githubusercontent.com/benlutz/preflt/main/install.sh | sh
or
Go install (requires Go 1.21+)
$ go install github.com/benlutz/preflt/cmd/preflt@latest

After install, create your first checklist at ~/.preflt/deploy.yaml
then run preflt run deploy — or just preflt to see what's due today.