Open-source Payload CMS plugins for semantic search, RAG-powered chat, taxonomy management, and content rendering — extracted from Zetesis Portal, a production platform that turns organizational knowledge into accessible, AI-powered experiences.
ζήτησις (zḗtēsis) — inquiry. Zetesis builds systems that make company expertise searchable and conversational through semantic search, AI agents, and structured content. These packages are the open-source core of that work.
| Package | Description |
|---|---|
@zetesis/payload-indexer |
Collection sync & embedding pipeline — hooks into Payload lifecycle to extract, chunk, embed, and push documents to a search backend |
@zetesis/payload-typesense |
Typesense adapter with search endpoints, vector/hybrid search, and RAG chat integration |
@zetesis/payload-taxonomies |
Hierarchical taxonomies with breadcrumb navigation and relationship field builders |
@zetesis/payload-lexical-blocks-builder |
Lexical editor blocks builder & server-side renderer |
@zetesis/chat-agent |
Floating chat UI with streaming responses, session management, and agent selection |
The repo includes a full Dev Container setup with PostgreSQL, Typesense, and all tooling pre-configured.
-
Open the repo in VS Code / Cursor
-
Reopen in Container when prompted (or via the command palette)
-
Copy the env file and add your API keys:
cp apps/server/.env.example apps/server/.env # Edit .env and set OPENAI_API_KEY (required for embeddings) -
Start the dev server:
cd apps/server pnpm run dev -
Open localhost:3000 for the playground or localhost:3000/admin for the Payload admin panel.
-
Clone & install:
git clone https://github.com/Zetesis-Labs/PayloadAgents.git cd PayloadAgents pnpm install -
Start infrastructure (PostgreSQL + Typesense):
docker compose -f .devcontainer/docker-compose.yml up -d db typesense
-
Configure environment:
cp apps/server/.env.example apps/server/.env
Edit
apps/server/.envand set:Variable Required Description DATABASE_URLYes PostgreSQL connection string PAYLOAD_SECRETYes Secret for Payload auth TYPESENSE_API_KEYYes Typesense API key (default: xyzfor local dev)TYPESENSE_HOSTYes Typesense host (default: localhost)TYPESENSE_PORTYes Typesense port (default: 8108)OPENAI_API_KEYYes OpenAI key for generating embeddings -
Run:
cd apps/server pnpm run dev
PayloadAgents/
├── apps/
│ └── server/ # Payload CMS playground (Next.js)
├── packages/
│ ├── payload-indexer/
│ ├── payload-typesense/
│ ├── payload-taxonomies/
│ ├── payload-lexical-blocks-builder/
│ └── chat-agent/
├── .devcontainer/ # Dev Container (Docker Compose + Dockerfile)
└── docs/ # Architecture docs & decision records
# Dev server
cd apps/server && pnpm run dev
# Build all packages
pnpm build
# Type-check (solution-style)
pnpm tsc --noEmit
# Lint
pnpm lint
# Lint with autofix
pnpm lint:fix
# Test
pnpm testThis is a pnpm workspaces + Turborepo monorepo. Packages are compiled in type isolation — they don't depend on any app-level payload-types.ts, making them truly portable.
Key design decisions are documented in docs/architecture/:
- ESM only — all packages use
"type": "module" - Biome for linting and formatting
- Conventional commits in English
- Changeset required — run
pnpm changesetbefore opening a PR
MIT — see LICENSE for details.
Built by Zetesis