▣ Dashcam

Setup

Get your environment running

Two independent ways to run the same scenario. Both were run end-to-end against this exact data before this guide was written, not just described.

Option A — Docker (recommended, same pattern as every other workshop here)

A Dockerfile bakes in Python, Presidio plus the en_core_web_sm spaCy model, Claude Code, and the skill set at build time — no live installs over docker exec, same approach as the other workshops' containers. Rebuilt nightly and published to GHCR, so a live session pulls it instead of building locally.

Prerequisites

Steps

# Run every command below from THIS folder (casky-workshops/dashcam/).

# 0. Pull the pre-built image from GHCR (rebuilt nightly with the latest patches) instead
#    of building locally — much faster at a live session.
docker pull ghcr.io/casky-ai/casky-dashcam:latest
docker tag ghcr.io/casky-ai/casky-dashcam:latest casky-dashcam

# Fallback, kept for reference — Python, Presidio, spaCy's small model, Claude Code, and
# the 3 skills are still baked into the image at build time (see Dockerfile); rebuild
# locally if you're iterating on the Dockerfile/skill list itself, or if GHCR is
# unreachable:
#   docker build -t casky-dashcam .

docker run -d --name casky-dashcam \
  --env-file .env \
  -v "$(pwd)":/root/dashcam \
  casky-dashcam

docker exec casky-dashcam test -f /root/dashcam/verify.sh \
  && echo "[+] mount OK" || echo "[!] wrong directory"

# 1. Run ./verify.sh — expect 10/10 PASS.
docker exec -w /root/dashcam casky-dashcam ./verify.sh

# 2. Bash into the container and start Claude Code interactively.
docker exec -it -w /root/dashcam casky-dashcam bash
#   ...now inside the container's shell:
export PATH="$HOME/.local/bin:$PATH"
./start.sh
claude

Option B — local Python, no Docker

For a quick laptop-only run without building an image:

# Run every command below from THIS folder (casky-workshops/dashcam/).

# 1. Python environment + Presidio
python3 -m venv .venv && source .venv/bin/activate
pip install presidio-analyzer presidio-anonymizer presidio-image-redactor
python -m spacy download en_core_web_sm   # small model — plenty for this lab

# sanity check
python -c "from presidio_analyzer import AnalyzerEngine; \
a = AnalyzerEngine(); \
print(a.analyze(text='Call John Smith at 212-555-0100', language='en'))"

# 2. Mount the skill library for the agent
chmod +x setup-skills.sh verify.sh reset.sh start.sh cleanup.sh
./setup-skills.sh

# 3. Run ./verify.sh — expect 10/10 PASS.
./verify.sh

# 4. Start Claude Code from this folder (needs Claude Code installed separately —
#    curl -fsSL https://claude.ai/install.sh | bash — Option A bakes it in instead).
./start.sh
claude
If you use en_core_web_sm instead of the SKILL.md's default

Point the analyzer at it explicitly (the small model doesn't self-select) — Option A's image already has this patched at build time, so this only matters for Option B:

from presidio_analyzer.nlp_engine import NlpEngineProvider

provider = NlpEngineProvider(nlp_configuration={
    "nlp_engine_name": "spacy",
    "models": [{"lang_code": "en", "model_name": "en_core_web_sm"}],
})
analyzer = AnalyzerEngine(nlp_engine=provider.create_engine())

Then open the Scenario page and hand the agent the prompt for Phase 1.


Authorized & lawful use only. All data is synthetic and self-contained. Built from mukul975/Anthropic-Cybersecurity-Skills#141 — "Add skill: anonymizing-pii-with-microsoft-presidio." Not yet merged upstream; this workshop vendors the skill locally and should switch to the upstream clone once the PR lands.