culture-library
Culture's library of your own content and media: recordings, books, newspapers, articles, EPUBs, PDFs, docs and more. One catalog to ingest, index, search and serve it all, published at library.culture.dev.
culture-library is an AgentCulture mesh
agent: a Python package with an agent-first CLI, a mesh identity, and the
canonical skill kit.
Status
Early scaffold. This repo was created from
culture-agent-template
and currently ships only the sibling-pattern baseline described below. The
library itself — ingesting media, indexing, search, and serving at
library.culture.dev — is planned and not yet implemented.
What's here today
- An agent-first CLI cited from teken
(
afi-cli). The runtime package has no third-party dependencies. - A mesh identity:
culture.yaml(suffix: culture-library,backend: claude) plus the matching resident prompt file,CLAUDE.md. - Four harness prompt files, one per agent harness (see Prompt files by harness).
- The guildmaster skill kit under
.claude/skills/, vendored cite-don't-import. Seedocs/skill-sources.md. - A build + deploy baseline: pytest, lint, the agent-first rubric gate, a per-harness smoke check, and PyPI Trusted Publishing in GitHub Actions.
Quickstart
uv sync
uv run pytest -n auto # run the test suite
uv run culture-library whoami # identity from culture.yaml
uv run culture-library learn # self-teaching prompt (add --json)
uv run culture-library doctor # agent-identity invariants
uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
CLI
| Verb | What it does |
|---|---|
whoami |
Report this agent's nick, version, backend, and model from culture.yaml. |
learn |
Print a structured self-teaching prompt. |
explain <path> |
Markdown docs for any noun/verb path. |
overview |
Read-only descriptive snapshot of the agent. |
doctor |
Check the agent-identity invariants (prompt-file-present, backend-consistency). |
cli overview |
Describe the CLI surface itself. |
Every command supports --json. Results go to stdout, errors/diagnostics to
stderr (never mixed). Exit codes: 0 success, 1 user error, 2 environment
error, 3+ reserved. Library verbs (ingest, search, serve, …) will be added as
new noun groups on the same contract.
Roadmap
- Ingest: bring your own recordings, books, newspapers, articles, EPUBs, PDFs and docs into one catalog.
- Index & search across everything in the catalog.
- Serve the catalog, published at library.culture.dev.
The design is not settled yet. This list restates the project's goal; it does not describe a committed design.
Prompt files by harness
Four harnesses, four root files, no shared base — each file is read by exactly one harness:
| Harness | File(s) |
|---|---|
| Claude Code | CLAUDE.md |
| Pi / associate | AGENTS.override.md + .pi/SYSTEM.md |
| colleague | AGENTS.colleague.md |
| Qwen Code | QWEN.md |
CLAUDE.md is the fullest write-up of the repo's conventions; read it first.
AGENTS.override.md stops Pi inheriting CLAUDE.md, and .pi/SYSTEM.md
gives Pi the non-coding associate identity (read/find/summarize only).
There is intentionally no AGENTS.md at the root: it would shadow the Pi
and colleague prompt cascades, and the CI smoke check fails if one appears.
Two selections, not one
- The interactive harness is whichever binary you run (
claude,pi,colleague,qwen). All four are live over the same clone at once, and choosing one never requires editing a file. Seedocs/automation-contract.md. - The mesh resident is the single
backendinculture.yaml. It is what the Culture daemon starts and whatsteward doctorchecks, and onlyguild harness use <name>changes it.
See docs/harness-selection.md for the full
writeup.
Development
- Every PR bumps the version (the
version-bumpskill updatespyproject.tomlandCHANGELOG.md). Theversion-checkCI job fails the PR otherwise. - Lint: black, isort, flake8 (line length 100), bandit, markdownlint, and
scripts/scan-secrets.py. SeeCLAUDE.mdfor the exact commands. - Deploy: pushing to
mainpublishes to PyPI via Trusted Publishing, and PRs publish a.devNbuild to TestPyPI (.github/workflows/publish.yml).
The gate section
culture.yaml carries a top-level gate section that declares how to set up
and test this repo, so tooling (for example a PR-fixer that re-runs the
checks before pushing) needs no per-repo knowledge:
gate:
setup:
- [uv, sync]
test:
- [uv, run, pytest, -n, auto]
setup and test are each a list of commands, and each command is an argv
list (never a shell string), run in order from the repo root. The values are
configuration only; no tool supplies a default. Culture's loader ignores
unknown top-level keys, so the section is safe alongside agents.
License
Apache 2.0 — see LICENSE.
Metadata
Release files for culture-library 0.10.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| culture_library-0.10.1.tar.gz | 238.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| culture_library-0.10.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 263.8 kB
Release files / culture_library-0.10.1.tar.gz
| Download URL | culture_library-0.10.1.tar.gz |
|---|---|
| Size | 238.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4427d31433c4686ad13cd1fa7e6a2a0e30cd00c98975cf11f019b5fc290016a6
|
|
BLAKE2b-256 checksum How to use checksums |
7667179a18229dbb72ec402caf6ee91fadc20b0610763c6e394b0b0c3fddd4c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / culture_library-0.10.1-py3-none-any.whl
| Download URL | culture_library-0.10.1-py3-none-any.whl |
|---|---|
| Size | 25.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ffdab90538442cd2515f86d4120e54f6cd7f9813ba08e4dd02475b57a96cae4b
|
|
BLAKE2b-256 checksum How to use checksums |
d9d116e0bee60bdd6b551394d58b2b0ab1fb6d6b4322a5b8203a8a9a84d9c0a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for culture-library 0.10.1
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.