SagaSmithAI is a multi-repository AI-native TTRPG platform with both Apache-2.0 repositories and the publicly visible SagaSmith-Web, which uses its own repository license. Start by choosing the layer that owns the behavior:
- Agent identity, sessions, channels, and MCP client behavior belong in
SagaSmith-agent. - Hosted accounts, quotas, campaign rooms, Agent dispatch, browser UI, Forge, Module Studio, and multi-system orchestration belong to SagaSmith Web in
SagaSmith-Web; it must call domain MCPs instead of becoming a second game-state owner. - System-neutral persistence, branches, memory, actor knowledge, imports, and retrieval belong in
sagasmith-core. - Rules and pure settlement logic belong in the relevant domain monorepo's
packages/domain. - Agent-facing domain operations and storage ownership belong in that monorepo's
packages/mcp. - Procedural GM guidance belongs in the domain monorepo's
skills/; Skills must not impersonate executable rules. - Player and GM presentation belongs in the domain monorepo's
apps/; UI writes must go through the domain service boundary. - Package indexes and archives belong in
SagaSmith-dnd-content-library; public visibility never overrides per-Pack source, asset, or redistribution rights.
Local Agent Kit and SagaSmith Web integrations must use the same authoritative domain MCP contract. Transport, authentication, storage, and deployment may differ; tool semantics, authority, revision, and idempotency may not.
For MCP 2026-07-28, keep each authorization-scoped tools/list deterministic and cacheable.
The Agent host may project a small system × phase × role × task subset into a model turn, but
that projection is not an authorization boundary: every domain tool call must carry a
target-audience delegation, enumerate concrete tool IDs, and be re-authorized by the MCP server.
Cross-call state belongs in explicit server-issued handles or explicit campaign/revision
arguments, never in a hidden transport session.
- Open or link an issue when the change crosses repositories or alters a public contract.
- State the authority boundary: what is deterministic engine behavior, what requires GM judgment, and what is display-only.
- Preserve principal, campaign, branch, actor, and visibility scopes in every read and write path.
- Add tests at the narrowest owner and at least one integration test when a contract crosses repositories.
- Update adjacent README, Skills, configuration examples, and UI contracts whenever behavior changes.
Python workspaces use pytest and ruff check .. UI workspaces use npm run build. Domain monorepos also validate every SKILL.md, structured data, and included Python source through their consolidated CI workflow.
Commits must be focused and must not include AI attribution, Co-Authored-By, Signed-off-by, or other trailers unless the repository owner explicitly requests them. Do not commit local configuration, API keys, imported commercial books, campaign databases, or generated runtime state.
Only contribute content you have the right to redistribute. Commercial TTRPG rules and adventures must not be copied into the repositories. Import tooling should retain provenance without publishing the source text.