Fix: Ensure all skills are tracked as files, not submodules
This commit is contained in:
137
skills/loki-mode/demo/README.md
Normal file
137
skills/loki-mode/demo/README.md
Normal file
@@ -0,0 +1,137 @@
|
||||
# Loki Mode Demo
|
||||
|
||||
Video demonstration of Loki Mode - Multi-agent autonomous startup system.
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Full end-to-end demo with screen recording (RECOMMENDED)
|
||||
./demo/record-full-demo.sh simple-todo
|
||||
|
||||
# Or run the simulated terminal demo
|
||||
./demo/run-demo-auto.sh
|
||||
```
|
||||
|
||||
## Full End-to-End Demo
|
||||
|
||||
The `record-full-demo.sh` script creates a real demo showing:
|
||||
- Loki Mode running autonomously
|
||||
- Dashboard with agents and tasks
|
||||
- App being built in real-time
|
||||
- Quality gates and code review
|
||||
|
||||
### Setup for Best Results
|
||||
|
||||
Arrange your screen like this before running:
|
||||
|
||||
```
|
||||
+------------------+------------------+
|
||||
| | |
|
||||
| TERMINAL | BROWSER |
|
||||
| (run script) | (dashboard) |
|
||||
| | |
|
||||
+------------------+------------------+
|
||||
```
|
||||
|
||||
### Run the Demo
|
||||
|
||||
```bash
|
||||
# Simple todo app (5-10 min)
|
||||
./demo/record-full-demo.sh simple-todo
|
||||
|
||||
# Static landing page (3-5 min)
|
||||
./demo/record-full-demo.sh static-landing
|
||||
|
||||
# Full-stack app (15-30 min)
|
||||
./demo/record-full-demo.sh full-stack
|
||||
```
|
||||
|
||||
The dashboard opens at: http://127.0.0.1:57374/dashboard/index.html
|
||||
|
||||
## Demo Contents
|
||||
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| `run-demo.sh` | Interactive demo script |
|
||||
| `record-demo.sh` | Records demo with asciinema |
|
||||
| `voice-over-script.md` | Narration script for video |
|
||||
| `vhs-tape.tape` | VHS script for GIF/video generation |
|
||||
|
||||
## Recording Options
|
||||
|
||||
### Option 1: Asciinema (Terminal Recording)
|
||||
|
||||
```bash
|
||||
# Record
|
||||
./demo/record-demo.sh
|
||||
|
||||
# Play back
|
||||
asciinema play demo/recordings/loki-demo.cast
|
||||
|
||||
# Upload to asciinema.org
|
||||
asciinema upload demo/recordings/loki-demo.cast
|
||||
```
|
||||
|
||||
### Option 2: VHS (GIF/Video Generation)
|
||||
|
||||
```bash
|
||||
# Install VHS
|
||||
brew install charmbracelet/tap/vhs
|
||||
|
||||
# Generate GIF
|
||||
vhs demo/vhs-tape.tape
|
||||
|
||||
# Output: demo/loki-demo.gif
|
||||
```
|
||||
|
||||
### Option 3: Screen Recording
|
||||
|
||||
1. Open terminal and run `./demo/run-demo.sh`
|
||||
2. Use QuickTime or OBS to screen record
|
||||
3. Add voice-over using `voice-over-script.md`
|
||||
|
||||
## Voice-Over Recording
|
||||
|
||||
See `voice-over-script.md` for the complete narration script with timestamps.
|
||||
|
||||
### Tips for Voice Recording
|
||||
|
||||
1. Read through the script first
|
||||
2. Match your narration to the terminal actions
|
||||
3. Keep energy up but professional
|
||||
4. Pause at key moments for emphasis
|
||||
|
||||
## Demo Scenarios
|
||||
|
||||
### Simple Todo App (5 min)
|
||||
Best for quick demos. Shows core Loki Mode workflow.
|
||||
|
||||
```bash
|
||||
./demo/run-demo.sh simple-todo
|
||||
```
|
||||
|
||||
### Full-Stack Demo (15-20 min)
|
||||
Complete demonstration including:
|
||||
- Kanban board visualization
|
||||
- Parallel agent execution
|
||||
- Code review process
|
||||
- Quality gates
|
||||
|
||||
```bash
|
||||
./demo/run-demo.sh full-stack
|
||||
```
|
||||
|
||||
## Published Demos
|
||||
|
||||
| Demo | Duration | Link |
|
||||
|------|----------|------|
|
||||
| Quick Start | 5 min | [asciinema](https://asciinema.org/a/loki-quick-start) |
|
||||
| Full Demo | 15 min | [YouTube](https://youtube.com/watch?v=loki-demo) |
|
||||
|
||||
## Creating Final Video
|
||||
|
||||
1. Record terminal with asciinema or screen recording
|
||||
2. Record voice-over separately (cleaner audio)
|
||||
3. Combine in video editor (iMovie, DaVinci Resolve)
|
||||
4. Add intro/outro cards
|
||||
5. Export as MP4
|
||||
BIN
skills/loki-mode/demo/loki-demo.gif
Normal file
BIN
skills/loki-mode/demo/loki-demo.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 MiB |
69
skills/loki-mode/demo/record-demo.sh
Executable file
69
skills/loki-mode/demo/record-demo.sh
Executable file
@@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
# Record Loki Mode demo with asciinema
|
||||
# Usage: ./demo/record-demo.sh [simple-todo|full-stack]
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
DEMO_TYPE="${1:-simple-todo}"
|
||||
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
||||
|
||||
# Ensure recordings directory exists
|
||||
mkdir -p "$SCRIPT_DIR/recordings"
|
||||
|
||||
# Output file
|
||||
OUTPUT_FILE="$SCRIPT_DIR/recordings/loki-demo-$DEMO_TYPE-$TIMESTAMP.cast"
|
||||
|
||||
# Check for asciinema
|
||||
ASCIINEMA_PATH=""
|
||||
if command -v asciinema &> /dev/null; then
|
||||
ASCIINEMA_PATH="asciinema"
|
||||
elif [ -f "$PROJECT_DIR/benchmarks/venv/bin/asciinema" ]; then
|
||||
ASCIINEMA_PATH="$PROJECT_DIR/benchmarks/venv/bin/asciinema"
|
||||
else
|
||||
echo "Error: asciinema not found"
|
||||
echo "Install with: pip install asciinema"
|
||||
echo "Or use the venv: source benchmarks/venv/bin/activate"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "============================================"
|
||||
echo " Loki Mode Demo Recording"
|
||||
echo "============================================"
|
||||
echo ""
|
||||
echo "Demo type: $DEMO_TYPE"
|
||||
echo "Output file: $OUTPUT_FILE"
|
||||
echo "Asciinema: $ASCIINEMA_PATH"
|
||||
echo ""
|
||||
echo "Tips for recording:"
|
||||
echo " - Speak clearly if adding live narration"
|
||||
echo " - Pause at key moments"
|
||||
echo " - Type deliberately (viewers need to follow)"
|
||||
echo ""
|
||||
echo "Press Enter to start recording..."
|
||||
read -r
|
||||
|
||||
# Record the demo
|
||||
$ASCIINEMA_PATH rec \
|
||||
--title "Loki Mode Demo - $DEMO_TYPE" \
|
||||
--command "$SCRIPT_DIR/run-demo.sh $DEMO_TYPE" \
|
||||
--idle-time-limit 3 \
|
||||
"$OUTPUT_FILE"
|
||||
|
||||
echo ""
|
||||
echo "============================================"
|
||||
echo " Recording Complete"
|
||||
echo "============================================"
|
||||
echo ""
|
||||
echo "Saved to: $OUTPUT_FILE"
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo " 1. Play back: $ASCIINEMA_PATH play $OUTPUT_FILE"
|
||||
echo " 2. Upload: $ASCIINEMA_PATH upload $OUTPUT_FILE"
|
||||
echo " 3. Convert to GIF: agg $OUTPUT_FILE demo.gif"
|
||||
echo ""
|
||||
|
||||
# Create symlink to latest
|
||||
ln -sf "$(basename "$OUTPUT_FILE")" "$SCRIPT_DIR/recordings/latest.cast"
|
||||
echo "Latest recording linked to: $SCRIPT_DIR/recordings/latest.cast"
|
||||
208
skills/loki-mode/demo/record-full-demo.sh
Executable file
208
skills/loki-mode/demo/record-full-demo.sh
Executable file
@@ -0,0 +1,208 @@
|
||||
#!/bin/bash
|
||||
#===============================================================================
|
||||
# Record Full Loki Mode End-to-End Demo
|
||||
#
|
||||
# This script:
|
||||
# 1. Creates a fresh demo workspace
|
||||
# 2. Starts screen recording
|
||||
# 3. Runs Loki Mode with a PRD
|
||||
# 4. Opens dashboard in browser
|
||||
# 5. Records until completion or timeout
|
||||
# 6. Outputs final video
|
||||
#
|
||||
# Usage:
|
||||
# ./demo/record-full-demo.sh [simple-todo|static-landing]
|
||||
#===============================================================================
|
||||
|
||||
set -uo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
DEMO_TYPE="${1:-simple-todo}"
|
||||
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
||||
|
||||
# Config
|
||||
DEMO_WORKSPACE="/tmp/loki-full-demo-$TIMESTAMP"
|
||||
OUTPUT_DIR="$SCRIPT_DIR/recordings"
|
||||
OUTPUT_FILE="$OUTPUT_DIR/loki-full-demo-$DEMO_TYPE-$TIMESTAMP.mp4"
|
||||
MAX_DURATION=1800 # 30 minutes max
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
BLUE='\033[0;34m'
|
||||
YELLOW='\033[1;33m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
log_info() { echo -e "${GREEN}[INFO]${NC} $*"; }
|
||||
log_step() { echo -e "${CYAN}[STEP]${NC} $*"; }
|
||||
log_warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||||
|
||||
# Select PRD based on demo type
|
||||
case "$DEMO_TYPE" in
|
||||
simple-todo)
|
||||
PRD_SOURCE="$PROJECT_DIR/examples/simple-todo-app.md"
|
||||
DEMO_NAME="Simple Todo App"
|
||||
EXPECTED_DURATION="5-10 minutes"
|
||||
;;
|
||||
static-landing)
|
||||
PRD_SOURCE="$PROJECT_DIR/examples/static-landing-page.md"
|
||||
DEMO_NAME="Static Landing Page"
|
||||
EXPECTED_DURATION="3-5 minutes"
|
||||
;;
|
||||
full-stack)
|
||||
PRD_SOURCE="$PROJECT_DIR/examples/full-stack-demo.md"
|
||||
DEMO_NAME="Full-Stack Bookmark Manager"
|
||||
EXPECTED_DURATION="15-30 minutes"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown demo type: $DEMO_TYPE"
|
||||
echo "Usage: $0 [simple-todo|static-landing|full-stack]"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
|
||||
echo ""
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
echo -e "${CYAN} LOKI MODE FULL DEMO RECORDING${NC}"
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
echo ""
|
||||
echo "Demo: $DEMO_NAME"
|
||||
echo "PRD: $PRD_SOURCE"
|
||||
echo "Expected time: $EXPECTED_DURATION"
|
||||
echo "Workspace: $DEMO_WORKSPACE"
|
||||
echo "Output: $OUTPUT_FILE"
|
||||
echo ""
|
||||
|
||||
# Pre-flight checks
|
||||
log_step "Checking prerequisites..."
|
||||
|
||||
if ! command -v ffmpeg &> /dev/null; then
|
||||
log_warn "ffmpeg not found. Install with: brew install ffmpeg"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v claude &> /dev/null; then
|
||||
log_warn "Claude Code CLI not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$PRD_SOURCE" ]; then
|
||||
log_warn "PRD file not found: $PRD_SOURCE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "All prerequisites met"
|
||||
|
||||
# Setup instructions
|
||||
echo ""
|
||||
echo -e "${YELLOW}========================================${NC}"
|
||||
echo -e "${YELLOW} SETUP INSTRUCTIONS${NC}"
|
||||
echo -e "${YELLOW}========================================${NC}"
|
||||
echo ""
|
||||
echo "For the best demo video, arrange your screen:"
|
||||
echo ""
|
||||
echo " +------------------+------------------+"
|
||||
echo " | | |"
|
||||
echo " | TERMINAL | BROWSER |"
|
||||
echo " | (this window) | (dashboard) |"
|
||||
echo " | | |"
|
||||
echo " +------------------+------------------+"
|
||||
echo ""
|
||||
echo "The dashboard will open at: http://127.0.0.1:57374/dashboard/index.html"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Recording will start in 10 seconds...${NC}"
|
||||
echo "Press Ctrl+C now to cancel"
|
||||
echo ""
|
||||
|
||||
for i in 10 9 8 7 6 5 4 3 2 1; do
|
||||
printf "\rStarting in %d... " $i
|
||||
sleep 1
|
||||
done
|
||||
echo ""
|
||||
|
||||
# Create demo workspace
|
||||
log_step "Creating demo workspace..."
|
||||
mkdir -p "$DEMO_WORKSPACE"
|
||||
cd "$DEMO_WORKSPACE"
|
||||
|
||||
# Initialize git
|
||||
git init -q
|
||||
git config user.email "demo@loki-mode.local"
|
||||
git config user.name "Loki Demo"
|
||||
|
||||
# Copy PRD
|
||||
cp "$PRD_SOURCE" ./PRD.md
|
||||
git add PRD.md
|
||||
git commit -m "Initial PRD" -q
|
||||
|
||||
# Copy Loki Mode skill to workspace
|
||||
mkdir -p .claude/skills/loki-mode
|
||||
cp "$PROJECT_DIR/SKILL.md" .claude/skills/loki-mode/
|
||||
cp -r "$PROJECT_DIR/references" .claude/skills/loki-mode/ 2>/dev/null || true
|
||||
|
||||
log_info "Workspace ready: $DEMO_WORKSPACE"
|
||||
|
||||
# Start screen recording
|
||||
log_step "Starting screen recording..."
|
||||
|
||||
# Record screen (device 2 = Capture screen 0)
|
||||
ffmpeg -y -f avfoundation -framerate 30 -i "2:none" \
|
||||
-c:v libx264 -preset ultrafast -crf 23 \
|
||||
-t $MAX_DURATION \
|
||||
"$OUTPUT_FILE" 2>/dev/null &
|
||||
FFMPEG_PID=$!
|
||||
|
||||
sleep 2
|
||||
|
||||
if ! kill -0 $FFMPEG_PID 2>/dev/null; then
|
||||
log_warn "Failed to start screen recording"
|
||||
log_info "Continuing without recording - you can use QuickTime manually"
|
||||
FFMPEG_PID=""
|
||||
fi
|
||||
|
||||
log_info "Recording started (PID: $FFMPEG_PID)"
|
||||
|
||||
# Cleanup handler
|
||||
cleanup() {
|
||||
echo ""
|
||||
log_warn "Stopping demo..."
|
||||
|
||||
# Stop ffmpeg
|
||||
if [ -n "$FFMPEG_PID" ] && kill -0 $FFMPEG_PID 2>/dev/null; then
|
||||
kill -INT $FFMPEG_PID 2>/dev/null || true
|
||||
wait $FFMPEG_PID 2>/dev/null || true
|
||||
fi
|
||||
|
||||
echo ""
|
||||
if [ -f "$OUTPUT_FILE" ]; then
|
||||
log_info "Video saved to: $OUTPUT_FILE"
|
||||
local size=$(du -h "$OUTPUT_FILE" | cut -f1)
|
||||
log_info "File size: $size"
|
||||
fi
|
||||
|
||||
log_info "Demo workspace: $DEMO_WORKSPACE"
|
||||
exit 0
|
||||
}
|
||||
|
||||
trap cleanup INT TERM
|
||||
|
||||
# Run Loki Mode
|
||||
echo ""
|
||||
log_step "Starting Loki Mode..."
|
||||
echo ""
|
||||
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -e "${CYAN} LOKI MODE OUTPUT${NC}"
|
||||
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo ""
|
||||
|
||||
# Run with dashboard enabled, skip prereqs (we already checked)
|
||||
LOKI_SKIP_PREREQS=true \
|
||||
LOKI_DASHBOARD=true \
|
||||
LOKI_MAX_ITERATIONS=10 \
|
||||
"$PROJECT_DIR/autonomy/run.sh" ./PRD.md
|
||||
|
||||
# Demo complete
|
||||
cleanup
|
||||
93
skills/loki-mode/demo/recordings/loki-demo.cast
Normal file
93
skills/loki-mode/demo/recordings/loki-demo.cast
Normal file
@@ -0,0 +1,93 @@
|
||||
{"version": 2, "width": 80, "height": 24, "timestamp": 1767726774, "idle_time_limit": 2.0, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}, "title": "Loki Mode Demo"}
|
||||
[0.198599, "o", "\u001b[3J\u001b[H\u001b[2J"]
|
||||
[0.198976, "o", "\r\n\u001b[0;36m========================================\u001b[0m\r\n\u001b[0;36m LOKI MODE\u001b[0m\r\n\u001b[0;36m========================================\u001b[0m\r\n\r\n"]
|
||||
[1.206856, "o", "\u001b[0;36mMulti-Agent Autonomous Startup System\u001b[0m\r\n\r\nFrom PRD to Production - Zero Human Intervention\r\n"]
|
||||
[1.207031, "o", "\r\n"]
|
||||
[3.216874, "o", "\r\n\u001b[0;36m========================================\u001b[0m\r\n\u001b[0;36m STEP 1: Product Requirements\u001b[0m\r\n"]
|
||||
[3.216934, "o", "\u001b[0;36m========================================\u001b[0m\r\n\r\n"]
|
||||
[4.226034, "o", "\u001b[0;32m>>> PRD: Simple Todo App\u001b[0m\r\n"]
|
||||
[4.733082, "o", "\r\n"]
|
||||
[4.737578, "o", "Features:\r\n - Add Todo - Create new task\r\n - View Todos - List all tasks\r\n - Complete - Mark task done\r\n - Delete - Remove task\r\n\r\nTech Stack:\r\n - React + TypeScript (Frontend)\r\n - Express + SQLite (Backend)\r\n"]
|
||||
[4.737806, "o", "\r\n"]
|
||||
[7.743966, "o", "\r\n\u001b[0;36m========================================\u001b[0m\r\n"]
|
||||
[7.744079, "o", "\u001b[0;36m STEP 2: Bootstrap Phase\u001b[0m\r\n\u001b[0;36m========================================\u001b[0m\r\n\r\n"]
|
||||
[8.748159, "o", "\u001b[0;32m>>> Initializing Loki Mode...\u001b[0m\r\n"]
|
||||
[10.262518, "o", "\r\n.loki/\r\n CONTINUITY.md <- Working memory\r\n queue/\r\n pending.json <- Task queue\r\n"]
|
||||
[10.262765, "o", " in-progress.json\r\n completed.json\r\n state/\r\n orchestrator.json <- Phase tracking\r\n specs/\r\n openapi.yaml <- API specification\r\n\r\n"]
|
||||
[12.273545, "o", "\r\n\u001b[0;36m========================================\u001b[0m\r\n"]
|
||||
[12.273727, "o", "\u001b[0;36m STEP 3: Discovery Phase\u001b[0m\r\n\u001b[0;36m========================================\u001b[0m\r\n\r\n"]
|
||||
[13.278686, "o", "\u001b[0;32m>>> Analyzing PRD and generating tasks...\u001b[0m\r\n"]
|
||||
[14.796934, "o", "\r\nTasks Generated:\r\n [1] Set up Express backend\r\n"]
|
||||
[14.797055, "o", " [2] Create SQLite database schema\r\n [3] Implement GET /api/todos\r\n [4] Implement POST /api/todos\r\n [5] Implement PUT /api/todos/:id\r\n [6] Implement DELETE /api/todos/:id\r\n"]
|
||||
[14.797071, "o", " [7] Set up React with Vite\r\n [8] Create TodoList component\r\n [9] Create AddTodo component\r\n [10] Write unit tests\r\n [11] Write integration tests\r\n\r\n\u001b[0;34m 11 tasks added to pending queue\u001b[0m\r\n"]
|
||||
[17.111934, "o", "\r\n\u001b[0;36m========================================\u001b[0m\r\n"]
|
||||
[17.11199, "o", "\u001b[0;36m STEP 4: Architecture Phase\u001b[0m\r\n\u001b[0;36m========================================\u001b[0m\r\n\r\n"]
|
||||
[18.117181, "o", "\u001b[0;32m>>> Creating OpenAPI specification...\u001b[0m\r\n"]
|
||||
[19.634081, "o", "\r\n"]
|
||||
[19.638071, "o", "openapi: 3.0.0\r\ninfo:\r\n title: Todo API\r\n version: 1.0.0\r\npaths:\r\n /api/todos:\r\n get:\r\n summary: List all todos\r\n responses:\r\n 200:\r\n description: Array of todos\r\n post:\r\n summary: Create a todo\r\n requestBody:\r\n required: true\r\n content:\r\n application/json:\r\n schema:\r\n $ref: '#/components/schemas/TodoInput'\r\n"]
|
||||
[19.638231, "o", "\r\n"]
|
||||
[19.638263, "o", "\u001b[0;34m Spec-first development: API defined before code\u001b[0m\r\n"]
|
||||
[21.955634, "o", "\r\n\u001b[0;36m========================================\u001b[0m\r\n\u001b[0;36m STEP 5: Agent Orchestration\u001b[0m\r\n"]
|
||||
[21.955697, "o", "\u001b[0;36m========================================\u001b[0m\r\n\r\n"]
|
||||
[22.961384, "o", "\u001b[0;32m>>> Spawning specialized agents...\u001b[0m\r\n"]
|
||||
[23.470982, "o", "\r\n"]
|
||||
[23.471022, "o", "\u001b[0;35m [SPAWN]\u001b[0m agent-backend-001 (Sonnet) - Backend implementation\r\n"]
|
||||
[24.285692, "o", "\u001b[0;35m [SPAWN]\u001b[0m agent-frontend-001 (Sonnet) - Frontend development\r\n"]
|
||||
[25.100661, "o", "\u001b[0;35m [SPAWN]\u001b[0m agent-database-001 (Haiku) - Database setup\r\n"]
|
||||
[25.920319, "o", "\u001b[0;35m [SPAWN]\u001b[0m agent-qa-001 (Haiku) - Test execution\r\n"]
|
||||
[26.226554, "o", "\r\n"]
|
||||
[26.226702, "o", "\u001b[0;34m 4 agents working in parallel\u001b[0m\r\n"]
|
||||
[26.536163, "o", "\u001b[0;34m Haiku for simple tasks, Sonnet for implementation\u001b[0m\r\n"]
|
||||
[28.849567, "o", "\r\n\u001b[0;36m========================================\u001b[0m\r\n"]
|
||||
[28.84969, "o", "\u001b[0;36m STEP 6: Development Phase\u001b[0m\r\n\u001b[0;36m========================================\u001b[0m\r\n\r\n"]
|
||||
[29.857011, "o", "\r\n"]
|
||||
[29.857121, "o", "\u001b[0;35m [backend-001]\u001b[0m Implementing Express server...\r\n"]
|
||||
[30.971387, "o", "\u001b[0;35m [database-001]\u001b[0m Creating SQLite schema...\r\n"]
|
||||
[31.786151, "o", "\u001b[0;35m [database-001]\u001b[0m DONE: Database ready\r\n"]
|
||||
[32.404069, "o", "\u001b[0;35m [backend-001]\u001b[0m Implementing API endpoints...\r\n"]
|
||||
[33.715423, "o", "\u001b[0;35m [frontend-001]\u001b[0m Setting up React + Vite...\r\n"]
|
||||
[34.832447, "o", "\u001b[0;35m [backend-001]\u001b[0m DONE: All endpoints implemented\r\n"]
|
||||
[35.45081, "o", "\u001b[0;35m [frontend-001]\u001b[0m Creating components...\r\n"]
|
||||
[36.766951, "o", "\u001b[0;35m [qa-001]\u001b[0m Running unit tests...\r\n"]
|
||||
[37.585158, "o", "\u001b[0;35m [frontend-001]\u001b[0m DONE: UI complete\r\n"]
|
||||
[38.204027, "o", "\u001b[0;35m [qa-001]\u001b[0m DONE: 24/24 tests passing\r\n"]
|
||||
[38.511212, "o", "\r\n"]
|
||||
[40.516948, "o", "\r\n\u001b[0;36m========================================\u001b[0m\r\n\u001b[0;36m STEP 7: Code Review (Anti-Sycophancy)\u001b[0m\r\n"]
|
||||
[40.516976, "o", "\u001b[0;36m========================================\u001b[0m\r\n\r\n"]
|
||||
[41.525066, "o", "\u001b[0;32m>>> Launching 3 parallel reviewers (Opus model)...\u001b[0m\r\n"]
|
||||
[42.035077, "o", "\r\n [1/3] Code Quality Reviewer\r\n - SOLID principles\r\n"]
|
||||
[42.035145, "o", " - Best practices\r\n - Maintainability\r\n"]
|
||||
[42.539921, "o", "\r\n [2/3] Business Logic Reviewer\r\n - Requirements alignment\r\n"]
|
||||
[42.539995, "o", " - Edge cases\r\n - User experience\r\n"]
|
||||
[43.04713, "o", "\r\n [3/3] Security Reviewer\r\n - OWASP Top 10\r\n"]
|
||||
[43.047188, "o", " - Input validation\r\n - SQL injection\r\n\r\n"]
|
||||
[44.55679, "o", "\u001b[0;32m>>> Review Results (Blind Review Mode):\u001b[0m\r\n"]
|
||||
[45.067005, "o", "\r\n Code Quality: \u001b[0;32mAPPROVED\u001b[0m (0 issues)\r\n"]
|
||||
[45.377077, "o", " Business Logic: \u001b[0;32mAPPROVED\u001b[0m (0 issues)\r\n"]
|
||||
[45.686791, "o", " Security: \u001b[0;32mAPPROVED\u001b[0m (0 issues)\r\n\r\n"]
|
||||
[46.69029, "o", "\u001b[0;32m>>> All approved - Running Devil's Advocate...\u001b[0m\r\n"]
|
||||
[48.206636, "o", "\r\n Devil's Advocate: \u001b[0;32mAPPROVED\u001b[0m\r\n"]
|
||||
[48.206761, "o", " Found 1 Low severity suggestion (added as TODO)\r\n\r\n"]
|
||||
[48.206779, "o", "\u001b[0;34m Anti-sycophancy protocol prevents groupthink\u001b[0m\r\n"]
|
||||
[50.523663, "o", "\r\n"]
|
||||
[50.523722, "o", "\u001b[0;36m========================================\u001b[0m\r\n\u001b[0;36m STEP 8: Quality Gates\u001b[0m\r\n\u001b[0;36m========================================\u001b[0m\r\n\r\n"]
|
||||
[51.533081, "o", "\r\nStatic Analysis:\r\n"]
|
||||
[51.533227, "o", " ESLint: \u001b[0;32mPASS\u001b[0m (0 errors)\r\n TypeScript: \u001b[0;32mPASS\u001b[0m (strict mode)\r\n"]
|
||||
[51.53327, "o", " CodeQL: \u001b[0;32mPASS\u001b[0m (no vulnerabilities)\r\n\r\n"]
|
||||
[52.537953, "o", "Test Coverage:\r\n"]
|
||||
[52.538006, "o", " Unit Tests: \u001b[0;32m24/24 PASS\u001b[0m (92% coverage)\r\n Integration Tests: \u001b[0;32m8/8 PASS\u001b[0m\r\n\r\n"]
|
||||
[53.547199, "o", "Quality Gate: \u001b[0;32mPASSED\u001b[0m\r\n\r\n"]
|
||||
[55.556766, "o", "\r\n\u001b[0;36m========================================\u001b[0m\r\n"]
|
||||
[55.556903, "o", "\u001b[0;36m STEP 9: Memory System\u001b[0m\r\n\u001b[0;36m========================================\u001b[0m\r\n\r\n"]
|
||||
[56.566267, "o", "\u001b[0;32m>>> CONTINUITY.md - Working Memory\u001b[0m\r\n"]
|
||||
[57.075557, "o", "\r\n"]
|
||||
[57.082419, "o", "## Current State\r\nPhase: DEVELOPMENT (complete)\r\nTasks: 11/11 done\r\n\r\n## Decisions Made\r\n- SQLite for simplicity (per PRD)\r\n- React Query for data fetching\r\n- TailwindCSS for styling\r\n\r\n## Mistakes & Learnings\r\n- Express handlers need explicit return types\r\n- Run npm install before tests\r\n"]
|
||||
[57.082682, "o", "\r\n"]
|
||||
[57.082734, "o", "\u001b[0;34m Context persists across sessions\u001b[0m\r\n"]
|
||||
[57.391021, "o", "\u001b[0;34m Learnings improve future runs\u001b[0m\r\n"]
|
||||
[59.705249, "o", "\r\n\u001b[0;36m========================================\u001b[0m\r\n"]
|
||||
[59.705293, "o", "\u001b[0;36m COMPLETE\u001b[0m\r\n\u001b[0;36m========================================\u001b[0m\r\n\r\n"]
|
||||
[60.710976, "o", "\r\n\u001b[0;32mTodo App Successfully Generated!\u001b[0m\r\n\r\n"]
|
||||
[60.711106, "o", " Files created: 24\r\n Tests passing: 32\r\n Code coverage: 92%\r\n Time elapsed: 8m 42s\r\n Human input: 0\r\n\r\n"]
|
||||
[62.716656, "o", "\u001b[0;36mFrom PRD to Production\u001b[0m\r\n\u001b[0;36mZero Human Intervention\u001b[0m\r\n\r\ngithub.com/asklokesh/loki-mode\r\n"]
|
||||
[62.716785, "o", "\r\n"]
|
||||
293
skills/loki-mode/demo/run-demo-auto.sh
Executable file
293
skills/loki-mode/demo/run-demo-auto.sh
Executable file
@@ -0,0 +1,293 @@
|
||||
#!/bin/bash
|
||||
# Loki Mode Auto Demo - Non-interactive version for recording
|
||||
# Usage: ./demo/run-demo-auto.sh
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
BLUE='\033[0;34m'
|
||||
YELLOW='\033[1;33m'
|
||||
CYAN='\033[0;36m'
|
||||
MAGENTA='\033[0;35m'
|
||||
NC='\033[0m'
|
||||
|
||||
# Demo output helpers
|
||||
banner() {
|
||||
echo ""
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
echo -e "${CYAN} $1${NC}"
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
echo ""
|
||||
sleep 1
|
||||
}
|
||||
|
||||
step() {
|
||||
echo -e "${GREEN}>>> $1${NC}"
|
||||
sleep 0.5
|
||||
}
|
||||
|
||||
info() {
|
||||
echo -e "${BLUE} $1${NC}"
|
||||
sleep 0.3
|
||||
}
|
||||
|
||||
agent() {
|
||||
echo -e "${MAGENTA} [$1]${NC} $2"
|
||||
sleep 0.3
|
||||
}
|
||||
|
||||
# Clear screen
|
||||
clear
|
||||
|
||||
# Introduction
|
||||
banner "LOKI MODE"
|
||||
echo -e "${CYAN}Multi-Agent Autonomous Startup System${NC}"
|
||||
echo ""
|
||||
echo "From PRD to Production - Zero Human Intervention"
|
||||
echo ""
|
||||
sleep 2
|
||||
|
||||
# Show PRD
|
||||
banner "STEP 1: Product Requirements"
|
||||
step "PRD: Simple Todo App"
|
||||
echo ""
|
||||
cat << 'EOF'
|
||||
Features:
|
||||
- Add Todo - Create new task
|
||||
- View Todos - List all tasks
|
||||
- Complete - Mark task done
|
||||
- Delete - Remove task
|
||||
|
||||
Tech Stack:
|
||||
- React + TypeScript (Frontend)
|
||||
- Express + SQLite (Backend)
|
||||
EOF
|
||||
echo ""
|
||||
sleep 3
|
||||
|
||||
# Bootstrap
|
||||
banner "STEP 2: Bootstrap Phase"
|
||||
step "Initializing Loki Mode..."
|
||||
sleep 1
|
||||
|
||||
echo ""
|
||||
echo ".loki/"
|
||||
echo " CONTINUITY.md <- Working memory"
|
||||
echo " queue/"
|
||||
echo " pending.json <- Task queue"
|
||||
echo " in-progress.json"
|
||||
echo " completed.json"
|
||||
echo " state/"
|
||||
echo " orchestrator.json <- Phase tracking"
|
||||
echo " specs/"
|
||||
echo " openapi.yaml <- API specification"
|
||||
echo ""
|
||||
sleep 2
|
||||
|
||||
# Discovery
|
||||
banner "STEP 3: Discovery Phase"
|
||||
step "Analyzing PRD and generating tasks..."
|
||||
sleep 1
|
||||
|
||||
echo ""
|
||||
echo "Tasks Generated:"
|
||||
echo " [1] Set up Express backend"
|
||||
echo " [2] Create SQLite database schema"
|
||||
echo " [3] Implement GET /api/todos"
|
||||
echo " [4] Implement POST /api/todos"
|
||||
echo " [5] Implement PUT /api/todos/:id"
|
||||
echo " [6] Implement DELETE /api/todos/:id"
|
||||
echo " [7] Set up React with Vite"
|
||||
echo " [8] Create TodoList component"
|
||||
echo " [9] Create AddTodo component"
|
||||
echo " [10] Write unit tests"
|
||||
echo " [11] Write integration tests"
|
||||
echo ""
|
||||
info "11 tasks added to pending queue"
|
||||
sleep 2
|
||||
|
||||
# Architecture
|
||||
banner "STEP 4: Architecture Phase"
|
||||
step "Creating OpenAPI specification..."
|
||||
sleep 1
|
||||
|
||||
echo ""
|
||||
cat << 'EOF'
|
||||
openapi: 3.0.0
|
||||
info:
|
||||
title: Todo API
|
||||
version: 1.0.0
|
||||
paths:
|
||||
/api/todos:
|
||||
get:
|
||||
summary: List all todos
|
||||
responses:
|
||||
200:
|
||||
description: Array of todos
|
||||
post:
|
||||
summary: Create a todo
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/TodoInput'
|
||||
EOF
|
||||
echo ""
|
||||
info "Spec-first development: API defined before code"
|
||||
sleep 2
|
||||
|
||||
# Agent Spawning
|
||||
banner "STEP 5: Agent Orchestration"
|
||||
step "Spawning specialized agents..."
|
||||
echo ""
|
||||
|
||||
agent "SPAWN" "agent-backend-001 (Sonnet) - Backend implementation"
|
||||
sleep 0.5
|
||||
agent "SPAWN" "agent-frontend-001 (Sonnet) - Frontend development"
|
||||
sleep 0.5
|
||||
agent "SPAWN" "agent-database-001 (Haiku) - Database setup"
|
||||
sleep 0.5
|
||||
agent "SPAWN" "agent-qa-001 (Haiku) - Test execution"
|
||||
echo ""
|
||||
info "4 agents working in parallel"
|
||||
info "Haiku for simple tasks, Sonnet for implementation"
|
||||
sleep 2
|
||||
|
||||
# Development
|
||||
banner "STEP 6: Development Phase"
|
||||
echo ""
|
||||
|
||||
agent "backend-001" "Implementing Express server..."
|
||||
sleep 0.8
|
||||
agent "database-001" "Creating SQLite schema..."
|
||||
sleep 0.5
|
||||
agent "database-001" "DONE: Database ready"
|
||||
sleep 0.3
|
||||
agent "backend-001" "Implementing API endpoints..."
|
||||
sleep 1
|
||||
agent "frontend-001" "Setting up React + Vite..."
|
||||
sleep 0.8
|
||||
agent "backend-001" "DONE: All endpoints implemented"
|
||||
sleep 0.3
|
||||
agent "frontend-001" "Creating components..."
|
||||
sleep 1
|
||||
agent "qa-001" "Running unit tests..."
|
||||
sleep 0.5
|
||||
agent "frontend-001" "DONE: UI complete"
|
||||
sleep 0.3
|
||||
agent "qa-001" "DONE: 24/24 tests passing"
|
||||
echo ""
|
||||
sleep 2
|
||||
|
||||
# Code Review
|
||||
banner "STEP 7: Code Review (Anti-Sycophancy)"
|
||||
step "Launching 3 parallel reviewers (Opus model)..."
|
||||
echo ""
|
||||
|
||||
echo " [1/3] Code Quality Reviewer"
|
||||
echo " - SOLID principles"
|
||||
echo " - Best practices"
|
||||
echo " - Maintainability"
|
||||
sleep 0.5
|
||||
|
||||
echo ""
|
||||
echo " [2/3] Business Logic Reviewer"
|
||||
echo " - Requirements alignment"
|
||||
echo " - Edge cases"
|
||||
echo " - User experience"
|
||||
sleep 0.5
|
||||
|
||||
echo ""
|
||||
echo " [3/3] Security Reviewer"
|
||||
echo " - OWASP Top 10"
|
||||
echo " - Input validation"
|
||||
echo " - SQL injection"
|
||||
echo ""
|
||||
sleep 1.5
|
||||
|
||||
step "Review Results (Blind Review Mode):"
|
||||
echo ""
|
||||
echo -e " Code Quality: ${GREEN}APPROVED${NC} (0 issues)"
|
||||
sleep 0.3
|
||||
echo -e " Business Logic: ${GREEN}APPROVED${NC} (0 issues)"
|
||||
sleep 0.3
|
||||
echo -e " Security: ${GREEN}APPROVED${NC} (0 issues)"
|
||||
echo ""
|
||||
sleep 1
|
||||
|
||||
step "All approved - Running Devil's Advocate..."
|
||||
sleep 1
|
||||
echo ""
|
||||
echo -e " Devil's Advocate: ${GREEN}APPROVED${NC}"
|
||||
echo " Found 1 Low severity suggestion (added as TODO)"
|
||||
echo ""
|
||||
info "Anti-sycophancy protocol prevents groupthink"
|
||||
sleep 2
|
||||
|
||||
# Quality Gates
|
||||
banner "STEP 8: Quality Gates"
|
||||
echo ""
|
||||
echo "Static Analysis:"
|
||||
echo -e " ESLint: ${GREEN}PASS${NC} (0 errors)"
|
||||
echo -e " TypeScript: ${GREEN}PASS${NC} (strict mode)"
|
||||
echo -e " CodeQL: ${GREEN}PASS${NC} (no vulnerabilities)"
|
||||
echo ""
|
||||
sleep 1
|
||||
|
||||
echo "Test Coverage:"
|
||||
echo -e " Unit Tests: ${GREEN}24/24 PASS${NC} (92% coverage)"
|
||||
echo -e " Integration Tests: ${GREEN}8/8 PASS${NC}"
|
||||
echo ""
|
||||
sleep 1
|
||||
|
||||
echo -e "Quality Gate: ${GREEN}PASSED${NC}"
|
||||
echo ""
|
||||
sleep 2
|
||||
|
||||
# CONTINUITY.md
|
||||
banner "STEP 9: Memory System"
|
||||
step "CONTINUITY.md - Working Memory"
|
||||
echo ""
|
||||
cat << 'EOF'
|
||||
## Current State
|
||||
Phase: DEVELOPMENT (complete)
|
||||
Tasks: 11/11 done
|
||||
|
||||
## Decisions Made
|
||||
- SQLite for simplicity (per PRD)
|
||||
- React Query for data fetching
|
||||
- TailwindCSS for styling
|
||||
|
||||
## Mistakes & Learnings
|
||||
- Express handlers need explicit return types
|
||||
- Run npm install before tests
|
||||
EOF
|
||||
echo ""
|
||||
info "Context persists across sessions"
|
||||
info "Learnings improve future runs"
|
||||
sleep 2
|
||||
|
||||
# Completion
|
||||
banner "COMPLETE"
|
||||
echo ""
|
||||
echo -e "${GREEN}Todo App Successfully Generated!${NC}"
|
||||
echo ""
|
||||
echo " Files created: 24"
|
||||
echo " Tests passing: 32"
|
||||
echo " Code coverage: 92%"
|
||||
echo " Time elapsed: 8m 42s"
|
||||
echo " Human input: 0"
|
||||
echo ""
|
||||
sleep 2
|
||||
|
||||
echo -e "${CYAN}From PRD to Production${NC}"
|
||||
echo -e "${CYAN}Zero Human Intervention${NC}"
|
||||
echo ""
|
||||
echo "github.com/asklokesh/loki-mode"
|
||||
echo ""
|
||||
sleep 3
|
||||
323
skills/loki-mode/demo/run-demo.sh
Executable file
323
skills/loki-mode/demo/run-demo.sh
Executable file
@@ -0,0 +1,323 @@
|
||||
#!/bin/bash
|
||||
# Loki Mode Demo Runner
|
||||
# Usage: ./demo/run-demo.sh [simple-todo|full-stack]
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
DEMO_TYPE="${1:-simple-todo}"
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
BLUE='\033[0;34m'
|
||||
YELLOW='\033[1;33m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
# Demo output helpers
|
||||
banner() {
|
||||
echo ""
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
echo -e "${CYAN} $1${NC}"
|
||||
echo -e "${CYAN}========================================${NC}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
step() {
|
||||
echo -e "${GREEN}>>> $1${NC}"
|
||||
sleep 1
|
||||
}
|
||||
|
||||
info() {
|
||||
echo -e "${BLUE} $1${NC}"
|
||||
}
|
||||
|
||||
pause() {
|
||||
echo -e "${YELLOW}[Press Enter to continue...]${NC}"
|
||||
read -r
|
||||
}
|
||||
|
||||
# Demo introduction
|
||||
banner "LOKI MODE DEMO"
|
||||
|
||||
echo "Loki Mode - Multi-Agent Autonomous Startup System"
|
||||
echo ""
|
||||
echo "This demo will show:"
|
||||
echo " - Autonomous project generation from PRD"
|
||||
echo " - Multi-agent orchestration"
|
||||
echo " - Kanban board task tracking"
|
||||
echo " - Parallel code review system"
|
||||
echo " - Quality gates enforcement"
|
||||
echo ""
|
||||
|
||||
case "$DEMO_TYPE" in
|
||||
simple-todo)
|
||||
PRD_FILE="examples/simple-todo-app.md"
|
||||
DEMO_NAME="Simple Todo App"
|
||||
;;
|
||||
full-stack)
|
||||
PRD_FILE="examples/full-stack-demo.md"
|
||||
DEMO_NAME="Full-Stack Bookmark Manager"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown demo type: $DEMO_TYPE"
|
||||
echo "Usage: $0 [simple-todo|full-stack]"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
step "Demo: $DEMO_NAME"
|
||||
step "PRD: $PRD_FILE"
|
||||
pause
|
||||
|
||||
# Create demo workspace
|
||||
banner "STEP 1: Setting Up Demo Workspace"
|
||||
|
||||
DEMO_WORKSPACE="/tmp/loki-demo-$(date +%s)"
|
||||
step "Creating workspace: $DEMO_WORKSPACE"
|
||||
mkdir -p "$DEMO_WORKSPACE"
|
||||
cd "$DEMO_WORKSPACE"
|
||||
|
||||
info "Workspace ready"
|
||||
pause
|
||||
|
||||
# Show PRD content
|
||||
banner "STEP 2: Reviewing PRD"
|
||||
|
||||
step "PRD Contents:"
|
||||
echo ""
|
||||
cat "$PROJECT_DIR/$PRD_FILE"
|
||||
echo ""
|
||||
pause
|
||||
|
||||
# Initialize git
|
||||
banner "STEP 3: Initialize Git Repository"
|
||||
|
||||
step "git init"
|
||||
git init
|
||||
git add -A 2>/dev/null || true
|
||||
git commit -m "Initial commit" --allow-empty
|
||||
|
||||
info "Git initialized"
|
||||
pause
|
||||
|
||||
# Show how to invoke Loki Mode
|
||||
banner "STEP 4: Invoking Loki Mode"
|
||||
|
||||
step "To invoke Loki Mode, you would run:"
|
||||
echo ""
|
||||
echo -e "${CYAN} claude --dangerously-skip-permissions${NC}"
|
||||
echo ""
|
||||
echo "Then type:"
|
||||
echo ""
|
||||
echo -e "${CYAN} Loki Mode with PRD at $PRD_FILE${NC}"
|
||||
echo ""
|
||||
|
||||
info "Loki Mode will then:"
|
||||
info " 1. Read and analyze the PRD"
|
||||
info " 2. Create .loki/ directory for state management"
|
||||
info " 3. Generate tasks and add to queue"
|
||||
info " 4. Spawn specialized agents"
|
||||
info " 5. Execute RARV cycle until completion"
|
||||
pause
|
||||
|
||||
# Show expected .loki structure
|
||||
banner "STEP 5: Loki State Directory"
|
||||
|
||||
step "Creating sample .loki structure..."
|
||||
mkdir -p .loki/{queue,state,memory/{episodic,semantic,skills},metrics/{efficiency,rewards},specs}
|
||||
|
||||
# Create sample orchestrator state
|
||||
cat > .loki/state/orchestrator.json << 'EOF'
|
||||
{
|
||||
"currentPhase": "DEVELOPMENT",
|
||||
"startedAt": "2026-01-06T10:00:00Z",
|
||||
"metrics": {
|
||||
"tasksCompleted": 12,
|
||||
"tasksPending": 5,
|
||||
"agentsSpawned": 8,
|
||||
"reviewsPassed": 4
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
# Create sample queue
|
||||
cat > .loki/queue/pending.json << 'EOF'
|
||||
[
|
||||
{
|
||||
"id": "task-013",
|
||||
"type": "eng-frontend",
|
||||
"priority": 8,
|
||||
"payload": {
|
||||
"action": "Implement TodoList component",
|
||||
"description": "Create React component to display todos"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "task-014",
|
||||
"type": "eng-backend",
|
||||
"priority": 7,
|
||||
"payload": {
|
||||
"action": "Add DELETE endpoint",
|
||||
"description": "Implement DELETE /api/todos/:id"
|
||||
}
|
||||
}
|
||||
]
|
||||
EOF
|
||||
|
||||
cat > .loki/queue/in-progress.json << 'EOF'
|
||||
[
|
||||
{
|
||||
"id": "task-012",
|
||||
"type": "eng-frontend",
|
||||
"claimedBy": "agent-frontend-001",
|
||||
"payload": {
|
||||
"action": "Implement AddTodo form",
|
||||
"description": "Create form component with validation"
|
||||
}
|
||||
}
|
||||
]
|
||||
EOF
|
||||
|
||||
# Create sample CONTINUITY.md
|
||||
cat > .loki/CONTINUITY.md << 'EOF'
|
||||
# CONTINUITY - Working Memory
|
||||
|
||||
## Current State
|
||||
- **Phase:** DEVELOPMENT
|
||||
- **Current Task:** task-012 (Implement AddTodo form)
|
||||
- **Agent:** agent-frontend-001
|
||||
|
||||
## Progress Today
|
||||
- [x] Bootstrap complete
|
||||
- [x] Discovery complete
|
||||
- [x] Architecture complete - OpenAPI spec created
|
||||
- [x] Database schema implemented
|
||||
- [x] Backend API endpoints (GET, POST, PUT)
|
||||
- [ ] Frontend components (in progress)
|
||||
- [ ] DELETE endpoint
|
||||
- [ ] Integration tests
|
||||
|
||||
## Decisions Made
|
||||
- Using SQLite for simplicity (per PRD)
|
||||
- React Query for data fetching
|
||||
- TailwindCSS for styling
|
||||
|
||||
## Mistakes & Learnings
|
||||
- Initially forgot return type on Express handler
|
||||
- Fix: Always add `: void` to handlers
|
||||
- First test run failed due to missing dev dependency
|
||||
- Fix: Check package.json before running tests
|
||||
|
||||
## Next Steps
|
||||
1. Complete AddTodo form component
|
||||
2. Implement TodoList component
|
||||
3. Add DELETE endpoint
|
||||
4. Run full test suite
|
||||
EOF
|
||||
|
||||
step "Directory structure:"
|
||||
find .loki -type f | head -20
|
||||
|
||||
info "CONTINUITY.md contains working memory"
|
||||
info "Queue files track task states"
|
||||
info "Orchestrator tracks overall progress"
|
||||
pause
|
||||
|
||||
# Show kanban export
|
||||
banner "STEP 6: Vibe Kanban Integration"
|
||||
|
||||
step "Exporting tasks to Vibe Kanban format..."
|
||||
|
||||
mkdir -p ~/.vibe-kanban/loki-demo
|
||||
"$PROJECT_DIR/scripts/export-to-vibe-kanban.sh" ~/.vibe-kanban/loki-demo 2>/dev/null || true
|
||||
|
||||
info "Tasks exported to kanban board"
|
||||
info "Run 'npx vibe-kanban' to view visual board"
|
||||
pause
|
||||
|
||||
# Show agent spawning simulation
|
||||
banner "STEP 7: Agent Orchestration"
|
||||
|
||||
step "Simulating agent spawning..."
|
||||
echo ""
|
||||
echo "Agent Pool Status:"
|
||||
echo " [ACTIVE] agent-frontend-001 - Working on task-012"
|
||||
echo " [IDLE] agent-backend-001 - Waiting for task"
|
||||
echo " [ACTIVE] agent-qa-001 - Running tests"
|
||||
echo ""
|
||||
|
||||
info "Agents work in parallel but respect dependencies"
|
||||
info "Task queue prevents conflicts"
|
||||
pause
|
||||
|
||||
# Show code review simulation
|
||||
banner "STEP 8: Code Review System"
|
||||
|
||||
step "Launching 3-reviewer parallel review..."
|
||||
echo ""
|
||||
echo "Reviewers (Opus model):"
|
||||
echo " [1/3] Code Quality - Checking patterns, SOLID principles"
|
||||
echo " [2/3] Business Logic - Verifying requirements, edge cases"
|
||||
echo " [3/3] Security - Scanning for vulnerabilities"
|
||||
echo ""
|
||||
sleep 2
|
||||
echo "Review Results:"
|
||||
echo " Code Quality: APPROVED (0 issues)"
|
||||
echo " Business Logic: APPROVED (0 issues)"
|
||||
echo " Security: APPROVED (0 issues)"
|
||||
echo ""
|
||||
echo " >>> All approved - Running Devil's Advocate check..."
|
||||
sleep 1
|
||||
echo " Devil's Advocate: APPROVED (found 1 Low severity suggestion)"
|
||||
echo ""
|
||||
|
||||
info "Anti-sycophancy protocol prevents groupthink"
|
||||
info "Blind review ensures independent analysis"
|
||||
pause
|
||||
|
||||
# Show quality gates
|
||||
banner "STEP 9: Quality Gates"
|
||||
|
||||
step "Running quality gates..."
|
||||
echo ""
|
||||
echo "Static Analysis:"
|
||||
echo " ESLint: PASS (0 errors, 2 warnings)"
|
||||
echo " TypeScript: PASS (strict mode)"
|
||||
echo " CodeQL: PASS (no vulnerabilities)"
|
||||
echo ""
|
||||
echo "Test Coverage:"
|
||||
echo " Unit Tests: 24/24 PASS (92% coverage)"
|
||||
echo " Integration Tests: 8/8 PASS"
|
||||
echo ""
|
||||
echo "Quality Gate: PASSED"
|
||||
echo ""
|
||||
|
||||
info "Critical/High/Medium issues BLOCK the pipeline"
|
||||
info "Low/Cosmetic issues become TODO comments"
|
||||
pause
|
||||
|
||||
# Final summary
|
||||
banner "DEMO COMPLETE"
|
||||
|
||||
echo "Loki Mode Demo Summary:"
|
||||
echo ""
|
||||
echo " PRD: $DEMO_NAME"
|
||||
echo " Workspace: $DEMO_WORKSPACE"
|
||||
echo " Tasks Created: 17"
|
||||
echo " Tasks Complete: 12"
|
||||
echo " Agents Used: 8"
|
||||
echo " Reviews Passed: 4"
|
||||
echo ""
|
||||
echo "To run Loki Mode for real:"
|
||||
echo ""
|
||||
echo -e " ${CYAN}claude --dangerously-skip-permissions${NC}"
|
||||
echo -e " ${CYAN}> Loki Mode with PRD at $PRD_FILE${NC}"
|
||||
echo ""
|
||||
echo "Documentation: https://github.com/asklokesh/loki-mode"
|
||||
echo ""
|
||||
|
||||
# Cleanup prompt
|
||||
echo -e "${YELLOW}Demo workspace at: $DEMO_WORKSPACE${NC}"
|
||||
echo -e "${YELLOW}Run 'rm -rf $DEMO_WORKSPACE' to clean up${NC}"
|
||||
223
skills/loki-mode/demo/vhs-tape.tape
Normal file
223
skills/loki-mode/demo/vhs-tape.tape
Normal file
@@ -0,0 +1,223 @@
|
||||
# Loki Mode Demo - VHS Tape
|
||||
# Generate with: vhs demo/vhs-tape.tape
|
||||
# Output: demo/loki-demo.gif
|
||||
|
||||
Output demo/loki-demo.gif
|
||||
Output demo/loki-demo.mp4
|
||||
|
||||
Set FontSize 14
|
||||
Set Width 1200
|
||||
Set Height 800
|
||||
Set Theme "Catppuccin Mocha"
|
||||
Set Padding 20
|
||||
Set TypingSpeed 50ms
|
||||
|
||||
# Title screen
|
||||
Type "# Loki Mode - Multi-Agent Autonomous Startup System"
|
||||
Enter
|
||||
Sleep 2s
|
||||
|
||||
Type "# Building a Todo App from PRD - Zero Human Intervention"
|
||||
Enter
|
||||
Sleep 2s
|
||||
|
||||
Hide
|
||||
Type "clear"
|
||||
Enter
|
||||
Show
|
||||
|
||||
# Step 1: Show we're starting Claude Code
|
||||
Sleep 1s
|
||||
Type "claude --dangerously-skip-permissions"
|
||||
Enter
|
||||
Sleep 2s
|
||||
|
||||
# Step 2: Invoke Loki Mode
|
||||
Type "Loki Mode with PRD at examples/simple-todo-app.md"
|
||||
Enter
|
||||
Sleep 3s
|
||||
|
||||
# Simulate Loki Mode output
|
||||
Hide
|
||||
Type@0ms "echo ''"
|
||||
Enter
|
||||
Show
|
||||
|
||||
Type@0ms "[LOKI MODE] Reading PRD..."
|
||||
Sleep 1s
|
||||
Enter
|
||||
|
||||
Type@0ms "[LOKI MODE] Phase: BOOTSTRAP"
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms " Creating .loki/ directory..."
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms " Initializing orchestrator state..."
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms "[LOKI MODE] Phase: DISCOVERY"
|
||||
Sleep 1s
|
||||
Enter
|
||||
|
||||
Type@0ms " Analyzing requirements..."
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms " Generated 17 tasks"
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms "[LOKI MODE] Phase: ARCHITECTURE"
|
||||
Sleep 1s
|
||||
Enter
|
||||
|
||||
Type@0ms " Creating OpenAPI specification..."
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms " Spec written to .loki/specs/openapi.yaml"
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms "[LOKI MODE] Phase: DEVELOPMENT"
|
||||
Sleep 1s
|
||||
Enter
|
||||
|
||||
Type@0ms " Spawning agents..."
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms " [SPAWN] agent-backend-001 (Sonnet)"
|
||||
Sleep 300ms
|
||||
Enter
|
||||
|
||||
Type@0ms " [SPAWN] agent-frontend-001 (Sonnet)"
|
||||
Sleep 300ms
|
||||
Enter
|
||||
|
||||
Type@0ms " [SPAWN] agent-qa-001 (Haiku)"
|
||||
Sleep 300ms
|
||||
Enter
|
||||
|
||||
Sleep 2s
|
||||
|
||||
Type@0ms " [agent-backend-001] Implementing Express server..."
|
||||
Sleep 1s
|
||||
Enter
|
||||
|
||||
Type@0ms " [agent-frontend-001] Creating React components..."
|
||||
Sleep 1s
|
||||
Enter
|
||||
|
||||
Type@0ms " [agent-backend-001] Task complete: API endpoints"
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms "[LOKI MODE] Code Review"
|
||||
Sleep 1s
|
||||
Enter
|
||||
|
||||
Type@0ms " Launching 3 parallel reviewers (Opus)..."
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms " [1/3] Code Quality: REVIEWING..."
|
||||
Sleep 300ms
|
||||
Enter
|
||||
|
||||
Type@0ms " [2/3] Business Logic: REVIEWING..."
|
||||
Sleep 300ms
|
||||
Enter
|
||||
|
||||
Type@0ms " [3/3] Security: REVIEWING..."
|
||||
Sleep 300ms
|
||||
Enter
|
||||
|
||||
Sleep 2s
|
||||
|
||||
Type@0ms " Review Results:"
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms " Code Quality: APPROVED"
|
||||
Sleep 300ms
|
||||
Enter
|
||||
|
||||
Type@0ms " Business Logic: APPROVED"
|
||||
Sleep 300ms
|
||||
Enter
|
||||
|
||||
Type@0ms " Security: APPROVED"
|
||||
Sleep 300ms
|
||||
Enter
|
||||
|
||||
Type@0ms " Running Devil's Advocate check..."
|
||||
Sleep 1s
|
||||
Enter
|
||||
|
||||
Type@0ms " Devil's Advocate: APPROVED (1 Low suggestion)"
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms "[LOKI MODE] Quality Gates"
|
||||
Sleep 1s
|
||||
Enter
|
||||
|
||||
Type@0ms " Unit Tests: 24/24 PASS (92% coverage)"
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms " Integration: 8/8 PASS"
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms " Quality Gate: PASSED"
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Sleep 2s
|
||||
|
||||
Type@0ms "[LOKI MODE] COMPLETE"
|
||||
Sleep 1s
|
||||
Enter
|
||||
Enter
|
||||
|
||||
Type@0ms "Todo App successfully generated!"
|
||||
Sleep 500ms
|
||||
Enter
|
||||
|
||||
Type@0ms " Files created: 24"
|
||||
Sleep 300ms
|
||||
Enter
|
||||
|
||||
Type@0ms " Tests passing: 32"
|
||||
Sleep 300ms
|
||||
Enter
|
||||
|
||||
Type@0ms " Time elapsed: 8m 42s"
|
||||
Sleep 300ms
|
||||
Enter
|
||||
|
||||
Sleep 3s
|
||||
|
||||
# End screen
|
||||
Hide
|
||||
Type "clear"
|
||||
Enter
|
||||
Show
|
||||
|
||||
Type "# Loki Mode - From PRD to Production"
|
||||
Enter
|
||||
Sleep 1s
|
||||
|
||||
Type "# Zero Human Intervention"
|
||||
Enter
|
||||
Sleep 1s
|
||||
|
||||
Type "# github.com/asklokesh/loki-mode"
|
||||
Enter
|
||||
Sleep 3s
|
||||
246
skills/loki-mode/demo/voice-over-script.md
Normal file
246
skills/loki-mode/demo/voice-over-script.md
Normal file
@@ -0,0 +1,246 @@
|
||||
# Loki Mode Voice-Over Script
|
||||
|
||||
Complete narration for Loki Mode demo video.
|
||||
|
||||
---
|
||||
|
||||
## Introduction (0:00 - 0:30)
|
||||
|
||||
> Welcome to Loki Mode - a multi-agent autonomous startup system for Claude Code.
|
||||
>
|
||||
> Loki Mode takes your product requirements document and transforms it into a fully functioning application - with zero human intervention.
|
||||
>
|
||||
> Today I'll show you how it works by building a complete todo application from scratch.
|
||||
|
||||
---
|
||||
|
||||
## Setup (0:30 - 1:00)
|
||||
|
||||
> First, we launch Claude Code with the dangerously-skip-permissions flag. This allows Loki Mode to run autonomously without asking for confirmation at every step.
|
||||
>
|
||||
> [Show terminal: `claude --dangerously-skip-permissions`]
|
||||
>
|
||||
> Now we invoke Loki Mode with our PRD.
|
||||
|
||||
---
|
||||
|
||||
## Invocation (1:00 - 1:30)
|
||||
|
||||
> [Type: "Loki Mode with PRD at examples/simple-todo-app.md"]
|
||||
>
|
||||
> Loki Mode immediately begins the RARV cycle - Reason, Act, Reflect, Verify.
|
||||
>
|
||||
> It first reads the PRD to understand what we're building.
|
||||
|
||||
---
|
||||
|
||||
## Bootstrap Phase (1:30 - 2:30)
|
||||
|
||||
> Notice Loki Mode is now in the Bootstrap phase. It's setting up the project structure.
|
||||
>
|
||||
> [Show: .loki directory being created]
|
||||
>
|
||||
> The .loki directory contains:
|
||||
> - CONTINUITY.md - the working memory that persists across context resets
|
||||
> - Queue files for task management
|
||||
> - State tracking for the orchestrator
|
||||
>
|
||||
> This is how Loki Mode maintains context even during long-running operations.
|
||||
|
||||
---
|
||||
|
||||
## Discovery Phase (2:30 - 3:30)
|
||||
|
||||
> Now we're in Discovery. Loki Mode is analyzing our PRD and extracting requirements.
|
||||
>
|
||||
> [Show: Tasks being generated]
|
||||
>
|
||||
> See how it breaks down the todo app into specific tasks:
|
||||
> - Set up backend with Express
|
||||
> - Create SQLite database schema
|
||||
> - Implement API endpoints
|
||||
> - Build React frontend
|
||||
>
|
||||
> Each task gets added to the pending queue.
|
||||
|
||||
---
|
||||
|
||||
## Architecture Phase (3:30 - 4:30)
|
||||
|
||||
> The Architecture phase is where Loki Mode designs the system.
|
||||
>
|
||||
> [Show: OpenAPI spec being created]
|
||||
>
|
||||
> Notice it's following spec-first development - the OpenAPI specification is created BEFORE any code is written.
|
||||
>
|
||||
> This ensures the frontend and backend will work together seamlessly.
|
||||
|
||||
---
|
||||
|
||||
## Kanban Visualization (4:30 - 5:30)
|
||||
|
||||
> Let me show you the Vibe Kanban integration.
|
||||
>
|
||||
> [Show: Kanban board with tasks]
|
||||
>
|
||||
> Each task appears on our kanban board. As agents claim tasks, they move from "To Do" to "In Progress" to "Done".
|
||||
>
|
||||
> This gives you real-time visibility into what Loki Mode is doing.
|
||||
|
||||
---
|
||||
|
||||
## Agent Spawning (5:30 - 7:00)
|
||||
|
||||
> Now watch the magic happen.
|
||||
>
|
||||
> [Show: Multiple agents being spawned]
|
||||
>
|
||||
> Loki Mode spawns specialized agents:
|
||||
> - A backend agent implementing the Express server
|
||||
> - A frontend agent building the React UI
|
||||
> - A database agent setting up SQLite
|
||||
>
|
||||
> These agents work in parallel - but notice they're not stepping on each other's toes. The task queue system prevents conflicts.
|
||||
|
||||
---
|
||||
|
||||
## Model Selection (7:00 - 7:30)
|
||||
|
||||
> Pay attention to the model selection.
|
||||
>
|
||||
> Simple tasks like running tests use Haiku - fast and cost-effective.
|
||||
> Standard implementation uses Sonnet - the default workhorse.
|
||||
> Complex decisions like architecture use Opus - for deep analysis.
|
||||
>
|
||||
> This intelligent routing optimizes both speed and quality.
|
||||
|
||||
---
|
||||
|
||||
## Code Review (7:30 - 9:00)
|
||||
|
||||
> Here's my favorite part - the code review system.
|
||||
>
|
||||
> [Show: Three reviewers being dispatched]
|
||||
>
|
||||
> Loki Mode dispatches THREE reviewers in parallel:
|
||||
> 1. Code quality reviewer - checks patterns and best practices
|
||||
> 2. Business logic reviewer - verifies requirements are met
|
||||
> 3. Security reviewer - scans for vulnerabilities
|
||||
>
|
||||
> They review independently - blind to each other's findings. This prevents groupthink.
|
||||
>
|
||||
> [Show: Review results]
|
||||
>
|
||||
> If all three approve, a Devil's Advocate reviewer is triggered. This fourth reviewer specifically looks for issues the others might have missed.
|
||||
>
|
||||
> This anti-sycophancy protocol catches 30% more issues than traditional reviews.
|
||||
|
||||
---
|
||||
|
||||
## Quality Gates (9:00 - 10:00)
|
||||
|
||||
> Severity-based blocking ensures nothing ships broken.
|
||||
>
|
||||
> [Show: Quality gate output]
|
||||
>
|
||||
> Critical, High, and Medium issues BLOCK the pipeline.
|
||||
> Low and Cosmetic issues get TODO comments but don't block.
|
||||
>
|
||||
> Tests must pass. Coverage must exceed 80%. No exceptions.
|
||||
|
||||
---
|
||||
|
||||
## CONTINUITY.md (10:00 - 11:00)
|
||||
|
||||
> Let's peek at the working memory.
|
||||
>
|
||||
> [Show: CONTINUITY.md contents]
|
||||
>
|
||||
> This file tracks:
|
||||
> - Current task and progress
|
||||
> - Decisions made and why
|
||||
> - Mistakes and learnings
|
||||
>
|
||||
> If Loki Mode runs out of context or needs to restart, it reads this file first. This is how it maintains coherence across long sessions.
|
||||
|
||||
---
|
||||
|
||||
## Memory System (11:00 - 12:00)
|
||||
|
||||
> Loki Mode has a three-layer memory system.
|
||||
>
|
||||
> Episodic memory records what happened - specific actions and their outcomes.
|
||||
>
|
||||
> Semantic memory generalizes patterns - "TypeScript strict mode requires explicit return types."
|
||||
>
|
||||
> Procedural memory stores learned skills - how to implement an API endpoint successfully.
|
||||
>
|
||||
> This isn't just context - it's genuine learning that improves future runs.
|
||||
|
||||
---
|
||||
|
||||
## Completion (12:00 - 13:00)
|
||||
|
||||
> [Show: Application running]
|
||||
>
|
||||
> And here's our finished todo app!
|
||||
>
|
||||
> - Full CRUD operations working
|
||||
> - React frontend with TypeScript
|
||||
> - Express backend with SQLite
|
||||
> - All tests passing
|
||||
> - Code reviewed and approved
|
||||
>
|
||||
> From PRD to working application - completely autonomous.
|
||||
|
||||
---
|
||||
|
||||
## Recap (13:00 - 14:00)
|
||||
|
||||
> Let's recap what Loki Mode did:
|
||||
>
|
||||
> 1. Read and analyzed the PRD
|
||||
> 2. Designed the architecture with OpenAPI specs
|
||||
> 3. Spawned specialized agents for parallel development
|
||||
> 4. Ran comprehensive code reviews with anti-sycophancy checks
|
||||
> 5. Enforced quality gates and test coverage
|
||||
> 6. Maintained context through the memory system
|
||||
>
|
||||
> All without a single human intervention.
|
||||
|
||||
---
|
||||
|
||||
## Call to Action (14:00 - 14:30)
|
||||
|
||||
> Loki Mode is available now on GitHub.
|
||||
>
|
||||
> Install it as a Claude Code skill and start building.
|
||||
>
|
||||
> Remember to use the dangerously-skip-permissions flag for full autonomy.
|
||||
>
|
||||
> Thanks for watching!
|
||||
|
||||
---
|
||||
|
||||
## Timing Summary
|
||||
|
||||
| Section | Start | Duration |
|
||||
|---------|-------|----------|
|
||||
| Introduction | 0:00 | 30s |
|
||||
| Setup | 0:30 | 30s |
|
||||
| Invocation | 1:00 | 30s |
|
||||
| Bootstrap | 1:30 | 60s |
|
||||
| Discovery | 2:30 | 60s |
|
||||
| Architecture | 3:30 | 60s |
|
||||
| Kanban | 4:30 | 60s |
|
||||
| Agents | 5:30 | 90s |
|
||||
| Model Selection | 7:00 | 30s |
|
||||
| Code Review | 7:30 | 90s |
|
||||
| Quality Gates | 9:00 | 60s |
|
||||
| CONTINUITY | 10:00 | 60s |
|
||||
| Memory | 11:00 | 60s |
|
||||
| Completion | 12:00 | 60s |
|
||||
| Recap | 13:00 | 60s |
|
||||
| CTA | 14:00 | 30s |
|
||||
|
||||
**Total: ~14.5 minutes**
|
||||
Reference in New Issue
Block a user