Skip to main content

BotStash

A CLI tool and lightweight WebUI that extracts course content (PDFs, DOCX, PPTX, VTT transcripts, IMSCC exports, plus Markdown/Quarto, HTML and plain text), classifies it, and uploads to an AnythingLLM workspace for embedded chatbots.

Features

  • Folder-first scanning — point at a folder, BotStash figures out the rest
  • Multi-format extraction — PPTX, DOCX, PDF, VTT, QTI quizzes, IMSCC exports, Markdown/Quarto (.md/.qmd), HTML (.html/.htm), plain text (.txt)
  • Recursive ZIP handling — nested ZIPs and IMSCC archives are auto-detected
  • Structured unit outline parsing — extracts assessments, schedules, learning outcomes with Bloom's taxonomy
  • Auto-classification — heuristic tagging of content types (lecture, worksheet, assignment, etc.)
  • AnythingLLM integration — uploads documents, manages workspaces, retrieves embed code
  • WebUI — FastAPI + Jinja2 interface for non-terminal users

Installation

pip install botstash

Quick Start

# Full pipeline — point at a folder
botstash run ./course-materials/ --workspace ISYS2001

# Update an existing workspace cleanly (clears old docs first — no duplicates)
botstash run ./course-materials/ --workspace ISYS2001 --reset

# Two-step workflow (extract, review, embed)
botstash extract ./course-materials/ --output ./staging/
# ... review staging/tags.json ...
botstash embed ./staging/ --workspace ISYS2001

# Get the embeddable chatbot code for a workspace
botstash chatbot ISYS2001

# Include quiz answer choices
botstash extract ./folder/ --include-answers

# Non-recursive (top-level only)
botstash extract ./folder/ --no-recursive

# Launch WebUI
botstash serve

Commands

Command Purpose
run Full extract → classify → embed pipeline in one step
extract Extract and auto-classify a folder into a staging directory
embed Upload a staging directory into an AnythingLLM workspace
chatbot Retrieve the embeddable chatbot code for a workspace
persona Provision in-character persona chatbots from a manifest
init Scaffold a .botstash.env config file (--global for ~/.botstash.env)
serve Launch the FastAPI WebUI

Run botstash <command> --help for the full option list.

Provisioning persona chatbots

BotStash can also provision multiple in-character persona bots (a simulated organisation's staff, for example) from a manifest. Each persona gets its own workspace, a system-prompt identity, a personal backstory plus any shared documents, and an embed widget whose id is written back into the persona's page file.

# personas.json lists personas (slug, prompt, backstory, page), shared docs, allowlist_domains
botstash persona personas.json --url http://localhost:3001 --key $ANYTHINGLLM_KEY

# Re-run cleanly (--reset clears each workspace's documents first)
botstash persona personas.json --reset

Manifest schema (paths resolve relative to the manifest file):

{
  "shared_docs": ["company_overview.md"],
  "allowlist_domains": ["example.org"],
  "personas": [
    {"slug": "priya_nair", "prompt": "bots/priya_nair/prompt.txt",
     "backstory": "_backstories/priya_nair_cfo.md",
     "page": "bots/priya_nair/index.qmd"}
  ]
}

Configuration

Settings are resolved in priority order:

CLI flag  >  environment variable  >  local .botstash.env  >  global ~/.botstash.env

A global ~/.botstash.env in your home directory provides defaults for every project; a local .botstash.env in the current directory overrides it per key.

# Scaffold a local config file in the current directory
botstash init

# Scaffold a global config file at ~/.botstash.env (defaults for every project)
botstash init --global

.botstash.env (local or global — same format):

ANYTHINGLLM_URL=http://localhost:3001
ANYTHINGLLM_KEY=your-api-key
INCLUDE_ANSWERS=false
RECURSIVE=true

Development

git clone https://github.com/michael-borck/botstash.git
cd botstash
uv sync --dev

uv run ruff check src/ tests/
uv run pytest

License

MIT

Download files

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

Source Distribution

botstash-0.6.0.tar.gz (128.6 kB view details)

Uploaded Source

Built Distribution

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

botstash-0.6.0-py3-none-any.whl (39.7 kB view details)

Uploaded Python 3

File details

Details for the file botstash-0.6.0.tar.gz.

File metadata

  • Download URL: botstash-0.6.0.tar.gz
  • Upload date:
  • Size: 128.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for botstash-0.6.0.tar.gz
Algorithm Hash digest
SHA256 477418a4964bfe90861687637195336859397ce5570901cbde446e05b47bebc9
MD5 779603c1bc2735be1f24850be82899b3
BLAKE2b-256 fdf06b1b636446336ca8271e120922629ef204ddc7a58d818f1111f612da1a6d

See more details on using hashes here.

File details

Details for the file botstash-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: botstash-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 39.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for botstash-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 47747c5982a72c5bba165f400dc090847a6ed6d2f7c5575257915e506aaa6331
MD5 9205320b89521ac297eb9dca14824e67
BLAKE2b-256 3bdeb899c9e16bcc93b356290aa41ab133fd3d0cc8d26fa6dcb2f9b7b2314994

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

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