Troubleshooting
May 25, 2026 ยท View on GitHub
Common issues and how to resolve them.
Working with BowerBot and a DCC at the same time
BowerBot detects when you save changes to scene.usda from any external USD-aware tool (Omniverse, usdview, Isaac Sim, your DCC of choice, etc.) and reloads its in-memory copy automatically before the next tool call. You can switch back and forth between BowerBot and your DCC without losing edits, as long as you save and finish in one tool before switching to the other.
What works
- Edit in BowerBot, save (automatic), switch to your DCC, load
scene.usda, edit, save, switch back to BowerBot, ask for another change. BowerBot detects the external edits and reloads before its next tool call. - Both directions, repeated as often as you want.
What does not work yet
- Concurrent saves. If BowerBot and your DCC save at the exact same moment, the last writer wins and the other edit is lost. Always save in one tool before switching to the other.
- Edits to referenced layers. BowerBot watches
scene.usda, not the assets it references. If you editassets/table/mtl.usdadirectly in your DCC and save, BowerBot may not detect the change until you also touchscene.usda. Full layer-graph watching is on the roadmap. - Network filesystem lag. Some shared drives (NFS, SMB, cloud-sync folders) can serve stale file metadata for a few seconds. If you save in your DCC and BowerBot does not detect it, wait a moment and retry the BowerBot command.
Best practice: clean handoffs
For mission-critical work, treat BowerBot and your DCC as serial editors:
- Block out the scene in BowerBot.
- Save and end the BowerBot session.
- Open
scene.usdain your DCC, refine. - Save in your DCC, close.
- Re-open in BowerBot for additional changes.
This guarantees no race conditions. BowerBot's auto-reload makes the casual back-and-forth workflow safe for the vast majority of cases, but the clean-handoff pattern is bulletproof.
CLI rendering issues
"BowerBot info" or other commands crash with UnicodeEncodeError
Fixed in 1.5.2 (the CLI no longer emits non-ASCII characters). If you see this on an older version, upgrade:
uv tool install bowerbot --reinstall
# or
pip install --upgrade bowerbot
Long paths render as ? in bowerbot list on Windows
Cosmetic only. Rich renders truncated paths with a Unicode ellipsis that the default Windows console (cp1252) cannot render. The full path is intact in project.json. To see it without truncation, set PYTHONIOENCODING=utf-8 before running:
$env:PYTHONIOENCODING = "utf-8"
bowerbot list
Skill installation
"Skill 'X' is enabled in config but not installed"
The skill's config block exists in ~/.bowerbot/config.json but the Python package is not in BowerBot's environment. Install it in the same environment as BowerBot:
# If you used 'uv tool install bowerbot':
uv tool install bowerbot --with bowerbot-skill-X --reinstall
# If you used 'pip install bowerbot':
pip install bowerbot-skill-X
"bowerbot skills" does not show a skill that is pip-installed
Two common causes:
-
Wrong environment. The skill was installed in a different Python environment than BowerBot. Verify with
pip show bowerbot-skill-X. If the location differs from BowerBot's environment, reinstall there. -
Entry point missing or broken. The skill's
pyproject.tomlis missing[project.entry-points."bowerbot.skills"]. Check with:python -c "from importlib.metadata import entry_points; print('\n'.join(f'{ep.name} -> {ep.value}' for ep in entry_points(group='bowerbot.skills')))"If your skill is missing from the output despite being pip-installed, file an issue on the skill's repo.
Sketchfab "401 Unauthorized" errors
Your Sketchfab API token is missing, expired, or invalid. Get a fresh one at https://sketchfab.com/settings/password and update the token field under skills.sketchfab.config in ~/.bowerbot/config.json.
LLM and tool-calling issues
"Reached maximum tool-calling rounds"
The LLM exceeded the per-request tool-call budget. Increase max_tool_rounds in the llm section of ~/.bowerbot/config.json (default is 25). For large material-binding workflows on dozens of mesh parts, 50 is reasonable.
Models that do not work well
gpt-4o skips tool calls and ignores SKILL.md. Use gpt-4.1 (default), gpt-4.1-mini, or anthropic/claude-sonnet-4-6. See the Tested Models table in README.md.
Logs
BowerBot writes a structured log of every session to:
~/.bowerbot/logs/bowerbot.log
The log rotates at 10 MB and keeps the 5 most recent files
(bowerbot.log.1, bowerbot.log.2, ...). Each line is prefixed with
a 12-character session ID so you can grep one chat session out of a
multi-session file.
What gets logged at the default INFO level:
- Each LLM round (model, prompt / completion / total token counts).
- Each tool call (name + parameters, with
api_key/token/password/secret/authvalues redacted). - Each tool result (success / error) and external-edit reloads.
- Session start/end markers.
When filing a bug, paste the relevant session's log lines along with the
session ID into the issue. Tune logging.level to DEBUG in
~/.bowerbot/config.json for verbose output during debugging, or set
logging.enabled to false to opt out entirely. The log directory
is fixed at ~/.bowerbot/logs/; only verbosity and rotation are
user-tunable.
Where to get help
- GitHub Discussions: https://github.com/binary-core-llc/bowerbot/discussions
- File a bug: https://github.com/binary-core-llc/bowerbot/issues
- Tutorial videos: https://www.youtube.com/playlist?list=PLhNtBS4KXazZk_LSZfMHlzmNQPqHc4CMb
- Demo videos: https://www.youtube.com/playlist?list=PLhNtBS4KXaza-3Sn4ggJLH-6ujRZ3Iapd