Skip to main content

poindexter

The open-source AI content pipeline from Glad Labs, as one installable package: the poindexter command-line client, the service layer it delegates to, the plugin registry, and the standalone brain watchdog daemon. The CLI, the worker, and the MCP servers all import the same poindexter.* modules — one schema, one client, zero drift.

Install

pip install poindexter
poindexter --help

Python 3.13. The package talks to a PostgreSQL database with the pgvector extension; poindexter setup writes ~/.poindexter/bootstrap.toml and runs the schema migrations against it.

The bare install is the CLI and the client library. The generation stacks are extras, so a machine that only operates the pipeline does not download them:

pip install "poindexter[pipeline,qa,rag]"   # a full pipeline node
Extra Pulls in Needed for
pipeline prefect, playwright, litellm running the content flow, screenshots, LLM routing
qa deepeval, ragas, datasets the LLM-judge QA rails
rag llama-index, langchain-community, langchain-ollama the RAG retrieval stack
rerank sentence-transformers (+ torch) the cross-encoder reranker

A command that needs an extra you did not install fails with a plain ModuleNotFoundError naming the package — never a silent degradation.

To run the whole stack (worker, brain daemon, Prefect, Grafana, ...) rather than the client alone, clone the repository and start the consumer compose file:

git clone https://github.com/Glad-Labs/poindexter
cd poindexter
docker compose -f docker-compose.consumer.yml up -d

Quick start

# 1. Point the CLI at a Postgres instance (pgvector enabled) and run migrations.
poindexter setup

# Non-interactive — takes an explicit DSN:
poindexter setup --db-url="postgresql://user:pass@host:5432/poindexter_brain"

# Re-run the sanity checks against an existing bootstrap.toml:
poindexter setup --check

# 2. Ask questions of the shared memory spine:
poindexter memory search "why gemma3"

# 3. Inspect the current pipeline task queue:
poindexter tasks list --limit 20

# 4. Read or change runtime app_settings:
poindexter settings list
poindexter settings set enable_pyroscope true

Every command respects -v / --verbose for client-side info logs and -h / --help for a per-subcommand usage summary.

Command groups

Group What it does
setup First-run wizard — writes ~/.poindexter/bootstrap.toml, runs migrations, seeds defaults.
memory Query, store, and stat the shared pgvector memory store.
tasks Browse and manage the content pipeline task queue.
posts Query and manage published / draft blog posts.
settings Read and write app_settings (DB-first config, no .env needed).
costs Pipeline spending and operational metrics.
doctor Aggregate every health probe into one report.
auth Manage OAuth 2.1 client credentials for the API and MCP servers.
vercel Vercel deployment status via the REST API (no Vercel CLI needed).
pro Operate the Poindexter Pro delivery chain.

Run poindexter --help for the full list (forty-odd groups) and any group with --help for its subcommands, e.g. poindexter memory --help.

Import root

Everything ships under one package:

from poindexter.services.site_config import SiteConfig
from poindexter.plugins.registry import get_taps
from poindexter.brain.bootstrap import resolve_database_url

The pre-1046 flat spellings (import services.x) are gone — there is exactly one module object per name, and nothing is installed at the top level except poindexter.

Configuration

poindexter reads its infrastructure secrets (mostly: a Postgres DSN) from ~/.poindexter/bootstrap.toml, which poindexter setup writes for you. Everything else — API keys, feature flags, quality thresholds, model pins — is stored in the app_settings table in Postgres and can be managed with poindexter settings.

There are no required environment variables. DATABASE_URL, if present, is accepted as a convenience override.

How versions work

The PyPI version tracks the upstream poindexter repository via release-please. Each release on main cuts a tag v<major>.<minor>.<patch>; that tag fires the publish workflow, which builds the wheel, installs it into a clean venv, runs poindexter --help, and only then ships it.

Breaking changes in the CLI show up in the repo's CHANGELOG.

Development / working from a clone

If you've cloned the upstream repo you don't need PyPI — everything is already wired up:

# From repo root:
cd src/cofounder_agent
poetry install --extras "pipeline qa rag"
poetry run poindexter --help

To build the distribution yourself (the manifest is src/cofounder_agent/pyproject.toml):

cd src/cofounder_agent
uv build                     # or: python -m build
pip install dist/poindexter-*.whl
poindexter --help

License

Apache 2.0. See LICENSE in the upstream repo.

Support

Release files for poindexter 0.147.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for poindexter 0.147.0
File Size Uploaded
poindexter-0.147.0.tar.gz 3.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for poindexter 0.147.0
File Interpreter ABI Platform
poindexter-0.147.0-py3-none-any.whl Python 3 none any Details

Total release size: 8.1 MB

Release files / poindexter-0.147.0.tar.gz

Download URL poindexter-0.147.0.tar.gz
Size 3.7 MB
Tags Source
SHA-256 checksum
How to use checksums
d039a5af5a8d61d2b8a28e3ae0f4b63b43f8f837fe67bd804bba94ed2829d1df
BLAKE2b-256 checksum
How to use checksums
5a457fab4e1ab6fb5fee3da5b8b3c227b8f7748621a707800ffc489f6c157da7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / poindexter-0.147.0-py3-none-any.whl

Download URL poindexter-0.147.0-py3-none-any.whl
Size 4.4 MB
Tags Python 3
SHA-256 checksum
How to use checksums
45b85ba1b427f1f59035c316f05a4a4db144bdd2cac8b8f0d54a7b13af83fe49
BLAKE2b-256 checksum
How to use checksums
15ad5ac87449fd5d19d1990b8bcaa5f5c3c4109fe3e7311258931e68bffbf226
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.147.0 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page