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
- Bugs and feature requests: https://github.com/Glad-Labs/poindexter/issues
- Documentation: https://github.com/Glad-Labs/poindexter#readme
- Security: see SECURITY.md
Release files for poindexter 0.142.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| poindexter-0.142.0.tar.gz | 3.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| poindexter-0.142.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 7.9 MB
Release files / poindexter-0.142.0.tar.gz
| Download URL | poindexter-0.142.0.tar.gz |
|---|---|
| Size | 3.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1067cc339d05bcdf9735bc74f9479f7444b41a09a285bd3e475d2a9407c9706e
|
|
BLAKE2b-256 checksum How to use checksums |
2530fdd4657aefe0ed4a0bf75d19d8e46d06acf57cd21bbfc94efd6347487a18
|
| 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 20, 2026.
Transparency logRelease files / poindexter-0.142.0-py3-none-any.whl
| Download URL | poindexter-0.142.0-py3-none-any.whl |
|---|---|
| Size | 4.3 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
72bcae74ce5aae4c83ebcb088155084747b82afa805c97f435c772e11a58aaee
|
|
BLAKE2b-256 checksum How to use checksums |
f44c4785977cc9a904bc31aa359aea7aa1c80ef8f37062c9aca6e8fc1ae26800
|
| 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 20, 2026.
Transparency log