JWeBot Configuration
JWeBot uses profile packages instead of repository-local environment files. Profiles are structurally similar to plugins: each package has a manifest, independent component files, private context, secrets, and optional overrides. Per-person SteamID mappings and Steam query aliases belong only in private context and are removed from redacted exports.
Public Template
config/templates/default/ is safe to commit and contains no real identity,
host, account, API key, or incident data.
default/
manifest.toml
components/
bot.toml
providers.toml
runtime.toml
debug.toml
notification.toml
deployment.toml
context/
people.json
secrets/
runtime.env
overrides/
runtime.env
root.env
Local Profile
Create and activate a local profile:
./tools/jwebot-config.py init personal --activate
The command writes only outside the repository:
~/.config/jwebot/
current -> profiles/personal
profiles/personal/
...source profile files...
generated/
runtime.env
root.env
private-context.json
notification.json
manifest.json
Source components are compiled into a temporary directory, validated, and
renamed atomically. Runtime services read only current/generated/.
Private State
Runtime and migrated diagnostic material lives separately:
~/.local/state/jwebot/profiles/personal/
debug/sessions/
incidents/
telemetry/
archives/
root/
Every profile and state directory is mode 0700; generated files, secrets,
private context, and archives are mode 0600.
Import And Export
Import another profile directory or .tar.gz package:
./tools/jwebot-config.py import profile.tar.gz --activate
Create a redacted package for review:
./tools/jwebot-config.py export personal \
--output /tmp/personal-redacted.tar.gz
The default export empties secrets and removes people/clock context. Use
--include-private only for a deliberately protected local backup.
Legacy Migration
Archive old root-level debug files, incident reports, operational material, environment values, and static person aliases:
./tools/jwebot-config.py migrate-legacy personal \
--repository /path/to/old/repository \
--activate
Migration never adds private material to Git. The original source is left unchanged, and the imported material is copied into the private profile/state tree.