CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Repository Overview
Crumbforest is a pedagogical educational platform combining terminal-based learning, Docker containerization, markdown documentation, and AI-powered teaching assistants. The project is written primarily in German and uses metaphors from nature ("Wald" = forest, "Krümel" = crumb) to make technology accessible to children.
This repository contains approximately 470+ markdown documentation files that describe:
- Educational concepts and philosophy
- Terminal interactions and user journeys
- System architecture and component specifications
- Character/role definitions (Eule, Fuchs, Snake, Dumbo, etc.)
- Build manifests and deployment logs
Core System Architecture
Multi-Container Docker Setup
The system runs as a Docker Compose application with:
- App Container: CakePHP 5 (PHP 8.3+) with Authentication & Markdown viewer
- Database: MariaDB with kuchenwald database
- Adminer: Database management interface (port 8081)
- TTYD Terminal: Web-based terminal interface (port 7681)
Key Routes & Endpoints
/markdowns/index - Auto-index of all markdown files
/markdowns/view/:slug - Individual markdown file viewer
/users/login - Authentication login page
/bin/cake tagcloud - Generate TagCloud HTML
/bin/cake generate_token - Create API tokens
/bin/cake kruemellog_builder - Export logs as markdown
Access points:
- http://localhost:8080 - CakePHP application
- http://localhost:8081 - Adminer
- http://localhost:7681 - Terminal interface
- http://localhost:8080/tagcloud.html - Dynamic TagCloud
Core Components & File Locations
Markdown Content
- Location:
webroot/markdown/*.md - Auto-indexed and linkable via
/markdowns/index - TagCloud generation from markdown metadata
Terminal System
- Login script:
/scripts/terminal_login.sh - Session wrapper:
/scripts/session_wrapper.sh - Supported users: root, kruemel, jupiter, heimkind, robot
- Terminal commands:
nano,ls,mc,cat,mission,login
Vector Search & Indexing
- Python venv:
/opt/venvs/crumbforest/bin/python3 - Qdrant collection:
md_files - Tools:
vector→/opt/vector/cli.pyvector-index→/opt/gitea-md/index_md_qdrant.pyeule→/opt/eule/eule_rag.py- Logs:
/var/log/crumb/vector.jsonl,/var/log/crumb/eule.jsonl - Cache directories:
HF_HOME=/opt/cache/hf,SENTENCE_TRANSFORMERS_HOME=/opt/cache/st,TORCH_HOME=/opt/cache/torch
Snapshot Collector (CF Tools)
- Base directory:
/var/cf - Snapshots:
/var/cf/snapshots/<Layer>/<Device>/ - Index files:
/var/cf/index/LAYER-DEVICE.txt
Logs
- KrümelLogs:
/var/www/html/tmp/kruemel_logs/gpt_log.json - Format: JSONL with timestamp, user, role, question, answer, model, tokens
AI Teaching Roles ("Specialist Roles")
The system uses metaphorical characters to make different technical domains approachable:
- Dumbo (
#dumbo #sql) - SQL interpreter, translates questions to SQL - Snake (
#snake #python) - Python starter and idea generator - ASCII-Monster (
#ascii #monster) - Visual terminal art creator - Bytebird (
#bytebird #api) - REST/JSON/API explainer - Crabby (
#crabby #rust) - Rust advisor focused on safety - Bugsy (
#bugsy #debug) - Error message translator - Shellfinch (
#shellfinch #bash) - Bash/terminal teacher - DockerDuke (
#duke #docker) - Container/deployment guide - Eule (Owl) - Observer, wisdom keeper
- Fuchs (Fox) - Path discoverer
- Kreumeleule - Terminal guide
Common Development Workflows
Building and Running
# Build and start containers
docker-compose build
docker-compose up -d
# Access app container shell
docker exec -it <app-container> bash --login -i
# Reset environment and rebuild
./reset_to_null_and_rebuild.sh
The reset script performs:
- Container reset
- Volume cleanup
- SQL import
- TagCloud generation
- Log entries
Markdown Indexing Workflow
# Add or modify markdown files
# (no git pull required for local indexing)
# Re-index into Qdrant
vector-index
# Test vector search
vector info
vector search "search term" --k 5
# Test with Eule (context-only, no LLM)
eule --no-llm "question about content"
# Create snapshot backup
vector snapshot create --collection md_files
vector snapshot list --collection md_files
CF Tools (Snapshot Management)
# Check recent activity (last 60 minutes, Layer L1)
cf-tools recent L1 60
# Top 5 most active devices
cf-tools top L1 60 5
# Device statistics (text format)
cf-tools device L1 SVGA_ESP04
# Device statistics (JSON for monitoring)
cf-tools device-json L1 SVGA_ESP04 | jq
# Get latest file path
cf-tools last-file L1 SVGA_ESP10
# Find duplicate Layer/Device combinations
cf-tools dupe-ids
# Maintenance
cf-tools prune-empty # Remove empty directories
cf-tools rebuild-index # Rebuild index files
cf-tools fix-perms # Fix permissions (sysop:sysop, 2775)
# Live monitoring (requires inotify-tools)
cf-tools follow L1 SVGA_ESP04
# Careful: purge old files
cf-tools purge L1 SVGA_ESP04 60 # older than 60 minutes
Terminal User Management
Users authenticate through the terminal login menu. The system supports:
- Internal user switching without external auth
- Session wrapper for privilege escalation
- Sudo configuration for specific scripts
# Start mission with session wrapper
/scripts/session_wrapper.sh /usr/local/bin/mission
# Or with sudo
sudo mission
Key Philosophical Concepts
The "Nullfeld" (Zero Field)
Represents the origin state, unlimited children's questions, and the starting point before access. Central to the pedagogical philosophy.
Transparency & Child-Friendliness
- All interactions are logged in child-appropriate language
- Metaphors from nature make technology accessible
- Focus on exploration and learning through play
Roles as Resonance
Characters/roles emerge from resonance rather than pure function - each represents a domain, symbol, and attitude that provides child-appropriate access to technology.
Technical Notes
Authentication
- Uses CakePHP AuthenticationPlugin
- Login via email and password
- Successful login grants access to all markdown views
- Session validation via middleware
Markdown Processing
- Frontmatter with slug, tags, lang, summary
- Auto-generation of TagCloud visualization
- Vector embedding for semantic search
Permissions
- Cache directories:
vectorbot:crumblogwith 775 - CF snapshots:
sysop:sysopwith 2775 - Sudoers configuration in
/etc/sudoers.d/crumbforest-tools
Environment Variables for Indexing
HF_HOME=/opt/cache/hf
SENTENCE_TRANSFORMERS_HOME=/opt/cache/st
TORCH_HOME=/opt/cache/torch
GIT_PULL=0 # Disable git pull during indexing
Troubleshooting Common Issues
Vector/Embedding Permission Errors
sudo install -d -m 775 -o vectorbot -g crumblog /opt/cache/hf /opt/cache/st /opt/cache/torch
sudo chown -R vectorbot:crumblog /opt/cache
Sudo Password Required
Check that wrapper scripts exactly match /etc/sudoers.d/crumbforest-tools entries.
Nano Not Found in Terminal
Always start shell as login + interactive: exec bash --login -i
Mission Script Fails
Use session wrapper or sudo: /scripts/session_wrapper.sh /usr/local/bin/mission
Git Credentials Prompt During Indexing
Set GIT_PULL=0 in wrapper or remove git pull from indexer script.
Project Culture
This project values:
- Poetic and metaphorical language in documentation
- Child-centered design thinking
- Transparency in all technical operations
- Forest/nature metaphors ("Wald", "Krümel", "Eule")
- Balance between technical precision and accessibility
- Community ("Crew") collaboration
Documentation often includes emotive language, philosophical reflections, and celebratory markers like "WUUUUHUUUUU!" which are integral to the project's identity.