Skip to main content

Accountability engine for founders — stable core CLI with beta integrations for sync, bot, and remote MCP

Project description

pester

CI PyPI Python License Ruff

An accountability engine for founders. Markdown in. Decisions out.

Demo

The Problem

Your meeting notes are in Notion. Your action items are in Linear. Your decisions are in Google Docs. Your transcripts are in Otter. Every tool has a piece of the picture. None of them have the whole thing.

You spend more time searching for context than making decisions. And when something falls through the cracks, you don't find out until the board meeting.

The Way Out

pester turns a folder of markdown files into a structured operating system for running a company. You write in markdown. pester reads your vault and tells you exactly where things stand: who owes what by when, what's overdue, what's stale, and what needs your attention.

The founder's job is accountability. Not strategy decks. Not culture docs. Knowing who owes what by when, and whether it's happening. pester makes that trivially easy.

Philosophy

Why markdown. Markdown survives every tool migration. Your Notion export is markdown. Your Obsidian vault is markdown. Every SaaS product will eventually die. Your .md files won't.

Why CLI. CLIs compose. Pipe pester actions --overdue into whatever you want. AI tools speak CLI natively. And it's fast.

Why accountability. Because that's the job. Everything else is noise unless it feeds into the loop of: who owes what, by when, is it happening.

Quick Start

# Install
pip install pester

# Create a new vault
pester init my-vault
cd my-vault

# Track an action
pester actions add --owner stan --due 2026-03-25 --desc "Ship v1"

# Check vault health
pester health

# View dashboard
pester dashboard

Or try with sample data: cd examples/sample-vault && pester health

Status for 1.0.0: the core CLI and PyPI package are the stable surface. Google Drive sync, Telegram sync, bot/daemon automation, and remote self-hosted MCP are beta surfaces for this soft launch. The web Custom Connector is not supported yet.

Features

  • Action Tracking — Extract and track action items from meetings, messages, and documents. AI + regex hybrid extraction with automatic deduplication. See what's overdue at a glance.
  • Semantic Search — RAG-powered search using ONNX E5 multilingual embeddings and ChromaDB. Find anything by meaning, not just keywords.
  • Health Checks — Detect stale journals, orphaned documents, broken wikilinks, and overdue actions across your entire vault.
  • Dashboard — HTML dashboard with auto-refresh, terminal output, or a local web server. Full visibility into vault status.
  • Multi-Source Sync (Beta) — Pull content from Google Drive and Telegram into your vault automatically.
  • Background Daemon (Beta) — File watcher with auto-extraction, scheduled briefings/digests, and escalation alerts. Runs as a macOS launchd service.
  • Escalation Engine — Automatically escalates overdue actions through warning, critical, and blocked levels with smart suppression.
  • Interactive Bot Agent (Beta) — DM the Telegram bot to manage tasks, search the vault, and get health reports. OpenAI and Anthropic function calling with persistent conversation history and access control.
  • Coaching System (Beta) — Copilot (directive) and provocateur (reflective) modes with automatic time-of-day switching. Scheduled daily, weekly, monthly, and quarterly coaching prompts.
  • Goal Tracking — Track OKRs and milestones in goals/ with progress computed from tagged actions. Energy budget and capacity enforcement.
  • Voice Transcription (Beta) — Voice, audio, and video note messages transcribed via Groq Whisper and processed as text by the bot agent.
  • LLM Provider Abstraction — Swap between OpenAI and Anthropic for both bot chat and action extraction. Provider-agnostic tool format with automatic model fallback.
  • MCP Integration — Expose your vault to Claude Code via MCP tools for AI-assisted knowledge work. Local stdio is supported today; remote streamable-http deployments are beta.

Use with Claude Code

pester is designed to work as an AI agent's accountability backend. Install the MCP extra and connect Claude Code to your vault:

Stable today: local stdio MCP with Claude Code / Claude Desktop. Beta: remote streamable-http MCP behind bearer auth. The web Custom Connector is still coming soon pending OAuth support.

pip install pester[mcp]
pester mcp  # starts the MCP server

Add to your project's .mcp.json:

{
  "mcpServers": {
    "pester": {
      "command": "pester",
      "args": ["--vault", "/path/to/your/vault", "mcp"]
    }
  }
}

Then ask Claude: "What actions are overdue?", "Add an action for stan to review the pitch deck by Friday", or "Give me a standup report." Claude calls structured vault tools, not grep. 17 tools available: actions, search, health, goals, standup, briefing, and more.

How It Compares

Feature pester Notion Obsidian Linear
Accountability tracking Built-in (actions, owners, deadlines) Manual databases Plugin-dependent Issues only
Markdown-native Yes, files on disk Proprietary format Yes No
CLI-first Yes, composable No No No
Semantic search Built-in (E5 + ChromaDB) Built-in Plugin Built-in
AI extraction Hybrid LLM + regex AI add-ons Plugin No
Self-hosted Yes, your filesystem Cloud Local files Cloud
Free / OSS MIT, free forever Freemium Freemium + paid sync Paid
Background automation Daemon with escalation Automations No Automations
AI agent integration 17 MCP tools No native MCP Agent skills (new) No

As of April 2026.

Installation

Extras status for 1.0.0: [drive], [telegram], [bot], [daemon], and remote [mcp] deployments are beta surfaces in this soft launch.

Command What you get
pip install pester Core CLI — actions, health, dashboard, init (~5MB)
pip install pester[search] + Semantic search with ChromaDB + ONNX E5 (~1.1GB with model)
pip install pester[drive] + Google Drive sync (beta)
pip install pester[telegram] + Telegram sync + notifications (Bot API, beta)
pip install pester[mcp] + MCP server for Claude Code (remote bearer-auth beta)
pip install pester[daemon] + Background daemon with file watching (beta)
pip install pester[llm] + LLM-powered action extraction (OpenAI + Anthropic)
pip install pester[bot] + Interactive Telegram bot agent (beta)
pip install pester[all] Everything
pip install pester[dev] + pytest, pytest-cov, ruff, build (for contributors)

Install from source:

git clone https://github.com/stansolo93/pester.git
cd pester
pip install -e ".[all,dev]"

Architecture

See docs/architecture.md for the full component diagram and storage layout.

CLI Reference
Command Description
pester init <path> Create a new vault from template
pester actions List all actions (default: open only)
pester actions add Add a new action item
pester actions done <slug> Mark an action as complete
pester actions extract Extract actions from meeting notes
pester health Run vault health checks
pester dashboard Generate HTML dashboard (opens in browser)
pester dashboard --terminal Print dashboard to terminal (ANSI)
pester dashboard --serve Start local dashboard server with auto-refresh
pester briefing <slug> Generate a briefing for a person or project
pester digest Generate a weekly digest
pester search <query> Semantic search across vault (requires [search])
pester index Build or update the search index
pester standup Generate standup notes (yesterday done + today planned)
pester status One-line vault health summary with health score
pester model download Download the embedding model
pester model status Check embedding model status
pester wikilinks validate Find broken wikilinks in vault
pester sync Sync from all configured sources
pester sync drive Sync from Google Drive (requires [drive])
pester sync telegram Sync from Telegram (requires [telegram])
pester mcp Start MCP server (requires [mcp])
pester config check Validate pester.yaml — catches unknown keys and invalid values
pester status One-line vault health summary (for terminal prompt integration)
pester daemon run Start the background daemon (file watcher + scheduler)
pester daemon status Check if the daemon is running
pester adopt [path] Onboard an existing vault (scan, map folders, generate config)
pester daemon install Install as a system service (macOS launchd or Linux systemd)
pester daemon uninstall Remove the system service (launchd or systemd)
pester diff-scope Output scope variables for CI/diff analysis

Global flags:

Flag Description
-v / --verbose Enable debug logging to stderr
-q / --quiet Suppress non-essential output

Configuration

pester is configured via pester.yaml at the root of your vault. See docs/vault-structure.md for the full schema reference.

vault:
  name: "Acme"
  language: en
  owner: "Your Name"

priorities:
  - name: "Q1 Launch"
    deadline: 2026-03-20

health:
  journal_stale_days: 3
  decision_review_days: 60

# Bot agent (requires: pip install pester[bot])
bot:
  enabled: true
  provider: openai          # or "anthropic"
  allowed_users: [123456789]

# LLM extraction (requires: pip install pester[llm])
llm:
  provider: openai
  model: gpt-5.4-mini

# Scheduled coaching prompts
scheduler:
  scheduled_prompts:
    morning_focus:
      time: "08:00"
      template: morning_focus

Documentation

Contributing

See CONTRIBUTING.md for development setup, testing, and PR process.

Security

See SECURITY.md for vulnerability reporting.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pester-1.0.1.tar.gz (440.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pester-1.0.1-py3-none-any.whl (198.9 kB view details)

Uploaded Python 3

File details

Details for the file pester-1.0.1.tar.gz.

File metadata

  • Download URL: pester-1.0.1.tar.gz
  • Upload date:
  • Size: 440.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pester-1.0.1.tar.gz
Algorithm Hash digest
SHA256 efeee28acffc17921fea1dafcad02e965d36b6eef1f8f044205b889410d38d32
MD5 1ccf4cb5b1e52ec81f94150ed132ab40
BLAKE2b-256 8246d2608cd0f5d563016bcce4d849ec55bbc0bf77f04c4dd1e659a0cf6c8caf

See more details on using hashes here.

File details

Details for the file pester-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: pester-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 198.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pester-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5e1760488de132c7345cd6dd3e1205ab9e72f693bb2a40372a8ce81f0cfc219f
MD5 a3c7afb1b30872bee6b8af012813316b
BLAKE2b-256 98522b939437921a935029210c5dad7d74905630db296b19565c449fd3d85c67

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page