Skip to content

Personal Assistant (:pa)

:pa is bnerd's planning-and-execution mode: an AI chief of staff that loads your mission control repository (team capacity, clients, deployments, scheduling, recurring ops, decisions) and OpenProject (tickets, time entries, relations, watchers, notifications), runs structured rituals (morning standup, end-of-day debrief, weekly orchestrator), and walks you through your day's tickets one at a time.

Launch it as a TUI mode (bnerd x:pa) or directly via the convenience shortcut:

bnerd pa

What it does

  • Standup: each morning, proposes a 3–7 item priority stack derived from your week plan, today's queue, recurring duties, and open OpenProject work packages assigned to you. You confirm or edit; the stack lands in .bnerd/pa/scheduling/today.md.
  • Walk you through the day: surface the next ticket, you work on it, you say done (optionally with a one-liner), and the AI logs time, closes the work package, posts a short audit-quality comment, ticks the box in today.md, and surfaces the next item — all in a single confirmation.
  • Replan on demand: say replan (optionally with new context) and the AI rewrites the unchecked tail of today.md, preserving everything already done.
  • Weekly orchestrator: each Monday (or on demand via weekly), proposes the week's current.md based on team capacity, active commitments, recurring ops, and the strategic roadmap.
  • Debrief: end-of-day, summarises what you closed, hours logged, what slipped to tomorrow.
  • Co-edit the mission repo itself: ask the assistant to bump a team member's capacity, draft a new ADR-style decision under decisions/, refresh a client brief, or jot a recurring-ops note. mission_write_file and mission_patch_file are sandboxed to the mission repo root (paths outside the repo are rejected) and confirm-gated like every other write. The two scheduling files (today.md, current.md) keep going through the typed mission_propose_* tools so their YAML schema and auto-archive logic stay in the loop.

The mission repo schema is documented at https://git.bnerd.net/cloud/mission (or wherever your mission repo lives). bnerd doesn't define the schema; it consumes it.

Two sources of truth, no duplication

  • Strategic state lives in the mission repo (mission_* AI tools, bnerd mission CLI). Markdown + YAML on disk: company/, tools/, decisions/, .bnerd/pa/team/*, .bnerd/pa/clients/*, .bnerd/pa/deployments/*, .bnerd/pa/scheduling/*, .bnerd/pa/ops/recurring.md.
  • Operational state lives in OpenProject (op_* AI tools). Tickets, time entries, relations.

:pa reflects work back into both: the strategic stack as today.md, and every action into OpenProject as time entries / status changes / journal comments.

Read this next

Out of scope

:pa doesn't ship code or change infrastructure. The tool inventory is deliberately narrow: mission_ (read + sandboxed writes inside the mission repo) + op_ + Slack triage (when enabled) + read-only filesystem + web + think + question. No shell, no kube, no compute/network/dns/billing, and no writes to anything outside the mission repo. If Bernd needs to ship something, switch to :code or :chat.

Mail notifications on ticket close are deferred to a follow-up; the audit log at ~/.bnerd/openproject-audit.jsonl and the via bnerd.ai content-tagging convention cover the v1 traceability story. Slack inbox triage is opt-in — see the Slack guide for setup.