Skip to main content

Tools for running a TTRPG campaign workspace: review, export, deploy, name generation.

Project description

bunnyforge

An opinionated way to run a tabletop-RPG campaign as a plain-files workspace — designed to be managed collaboratively by a GM and an AI agent, with one-way publishing to a DokuWiki players' site.

Your campaign is a directory of Markdown files with front matter: NPCs, factions, places, sessions, mechanics. bunnyforge gives that directory a skeleton, reviews its integrity, generates names from culture inventories you define, and exports the player-visible slice to DokuWiki. Everything is a text file; everything works offline; the only state is your git history.

  • Python ≥ 3.11, zero runtime dependencies.
  • Agent-first doctrine. init writes an AGENTS.md contract that tells an AI agent how to behave in the workspace, and doctrine skeletons — a style guide and a situation-design guide that interview you: each section explains what belongs in it, so filling them in is answering questions, not staring at a blank file.
  • Player-visibility model. Every file carries a visibility field; the exporter enforces it, so GM-only material cannot leak to the wiki.

Install

pip install bunnyforge

Quickstart

bunnyforge init my-campaign --name "My Campaign"
cd my-campaign
bunnyforge review checkup     # 0 errors, 0 warnings on a fresh workspace

Then fill in style-guide.md and situation-design.md — they arrive as skeletons that tell you what each section is for — and start writing entity files from the templates in _Templates/.

Subcommands

command what it does
init scaffold a new campaign workspace
review run a named workspace review suite (checkup, wiki)
export-player write player-safe copies of content files to Export/
deploy-export render Export/ into a DokuWiki staging tree
import-perceptions import player-authored wiki pages into Perceptions/
build-sheets build one-page HTML reference sheets for a session
names generate culture-appropriate names
test run the workspace test suite

Run bunnyforge <command> --help for a command's own options.

The workspace

campaign.toml marks the workspace root and holds configuration — directory layout, wiki namespace, name-generator inventories. Commands work from any subdirectory (they walk up to the marker), from $BUNNYFORGE_WORKSPACE, or from anywhere with --workspace PATH.

init also scaffolds a tests/ folder. Its README.md explains the campaign tests it invites you to write — the setting-specific invariants review checkup cannot know, like "every NPC's faction actually exists" — and ships a worked example, commented out, to adapt. bunnyforge test runs them, and checks that no test wrote into your campaign while running.

Names

bunnyforge names builds names from syllable inventories you write yourself, one TOML file per culture. The tool ships the engine and a worked example; it ships no cultures of its own, and takes no position on which real-world naming tradition any fantasy species should draw on — that is a setting-authorship decision, and it stays yours.

bunnyforge names --list
bunnyforge names <culture> -n 10
bunnyforge names <culture> --place --seed 42

The samples/ directory is a ladder of eight worked configurations, from a single people to a full multi-culture setting with registers and spelling variants.

DokuWiki export

export-player renders the player-visible slice; deploy-export pushes it into a DokuWiki staging tree. Sync is strictly one-way: the wiki is a published artifact, never a source of truth. import-perceptions brings player-authored pages back as perceptions — recorded belief, explicitly not canon.

Development

pip install -e .
python3 -m unittest discover -s tests -t .

(bunnyforge test is for running a campaign's tests from inside a workspace — it is not this package's test runner.)

The bunnyforge command is not a file in this repository: pip generates a launcher from [project.scripts] in pyproject.toml at install time, and it calls the dispatcher in src/bunnyforge/cli.py. Every subcommand is also runnable on its own — python3 -m bunnyforge.generate_names — which is exactly what the dispatcher forwards to.

Design history lives in docs/superpowers/specs/.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bunnyforge-0.1.0.tar.gz (155.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bunnyforge-0.1.0-py3-none-any.whl (105.4 kB view details)

Uploaded Python 3

File details

Details for the file bunnyforge-0.1.0.tar.gz.

File metadata

  • Download URL: bunnyforge-0.1.0.tar.gz
  • Upload date:
  • Size: 155.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for bunnyforge-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6442c67aa8c7837224c75589eb16545352c0e16d0749527edf29c12c52fe6349
MD5 ecaf96df5620f96bbdff5c7e5e8c2759
BLAKE2b-256 401c4fd6bad99d68d9598b8d738fb0ad960934295f3aecb9cb97cc946a445942

See more details on using hashes here.

Provenance

The following attestation bundles were made for bunnyforge-0.1.0.tar.gz:

Publisher: publish.yml on dcltdw/bunnyforge

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bunnyforge-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: bunnyforge-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 105.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for bunnyforge-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 454f264a3dbdf5e10d9daf3848124334cd19ab976ac329c2adc14b06d9fbd273
MD5 e09424b463b276b5abe15b8340c47a43
BLAKE2b-256 d2fef77ca05ceb867387eacd6d94214b53a5221feed7d3f7e962d30c94671fa4

See more details on using hashes here.

Provenance

The following attestation bundles were made for bunnyforge-0.1.0-py3-none-any.whl:

Publisher: publish.yml on dcltdw/bunnyforge

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page