Skip to content

Run with Docker#

Lens Prism is published as a container image. One container runs one agent, with its database persisted in a mounted volume.

  • Image: ghcr.io/lensapp/prism-agent:latest
  • Architectures: linux/amd64, linux/arm64
  • Port: 3003
  • Data: the agent's SQLite database lives at /data/agent.db inside the container — mount a volume at /data to persist it.

Tagged versions (vYYYY.M.DDHHMMSS) and commit-SHA tags are published alongside latest.

Run the agent and attach the terminal UI#

To start the runtime in the background and attach your terminal to the prism TUI:

  1. Export your model provider credential (e.g. for Bedrock):

    export AWS_BEARER_TOKEN_BEDROCK=<YOUR-KEY>
    
  2. Run the image:

    docker run -it -p 3003:3003 -v prism-data:/data -e AWS_BEARER_TOKEN_BEDROCK \
      ghcr.io/lensapp/prism-agent:latest \
      /bin/sh -c './start.sh > /dev/null 2>&1 & exec prism'
    
  3. -e AWS_BEARER_TOKEN_BEDROCK (no =) passes the value through from your parent shell, so export it first.

  4. -v prism-data:/data persists the agent's database in the prism-data named volume across container restarts.
  5. -p 3003:3003 exposes the runtime so you can also reach the web UI at http://localhost:3003.

Run the runtime only#

To run the HTTP runtime (web UI, Slack, WebSocket) without the attached TUI, run the image with its default entrypoint:

docker run -d --name prism \
  -p 3003:3003 \
  -v prism-data:/data \
  -e AWS_BEARER_TOKEN_BEDROCK=<YOUR-KEY> \
  ghcr.io/lensapp/prism-agent:latest

The container exposes a health check on GET /health.

To open a TUI against a running server container:

docker exec -it prism prism

Persist data#

Everything the agent knows — identity, conversation history, memory, scheduled tasks, and Slack mappings — lives in the single SQLite database at /data/agent.db. Mount a volume at /data (named volume or host bind mount) so it survives container restarts and image upgrades. Back up the agent by backing up that volume, or export a .prism snapshot from the web UI.

start.sh defaults DATABASE_URL to file:/data/agent.db; you generally don't need to set it. See Configuration for the rest of the environment variables.

What's in the image#

The image bundles the tools the agent's shell can reach (git, gh, kubectl, aws, jq, yq, ripgrep, python with pip, pandoc, poppler-utils, and tesseract, plus Claude Code) so the agent can do real work out of the box. It runs as a non-root node user and drops privileges after setup.

The python/pandoc/poppler/tesseract set — plus the Python libraries the Anthropic pdf/docx/xlsx/pptx skills import (openpyxl, python-pptx, pypdf, pdfplumber, Pillow, and more; see requirements.txt) — is the toolchain those document skills need. The image ships the toolchain, not the skills themselves; skills are installed at runtime into /data/skills. Because python is a node-owned, non-externally-managed interpreter, pip install works out of the box against PyPI, which is already reachable. LibreOffice is intentionally not bundled (size), so document skills' LibreOffice-backed conversion, recalc, and render paths are unavailable.