bin/ 230 CLI tools (ask-*, br-*, agent-*, roadid, carpool) scripts/ 99 automation scripts fleet/ Node configs and deployment workers/ Cloudflare Worker sources (roadpay, road-search, squad webhooks) roadc/ RoadC programming language roadnet/ Mesh network (5 APs, WireGuard) operator/ Memory system scripts config/ System configs dotfiles/ Shell configs docs/ Documentation BlackRoad OS — Pave Tomorrow. RoadChain-SHA2048: d1a24f55318d338b RoadChain-Identity: alexa@sovereign RoadChain-Full: d1a24f55318d338b24b60bad7be39286379c76ae5470817482100cb0ddbbcb97e147d07ac7243da0a9f0363e4e5c833d612b9c0df3a3cd20802465420278ef74875a5b77f55af6fe42a931b8b635b3d0d0b6bde9abf33dc42eea52bc03c951406d8cbe49f1a3d29b26a94dade05e9477f34a7d4d4c6ec4005c3c2ac54e73a68440c512c8e83fd9b1fe234750b898ef8f4032c23db173961fe225e67a0432b5293a9714f76c5c57ed5fdf35b9fb40fd73c03ebf88b7253c6a0575f5afb6a6b49b3bda310602fb1ef676859962dad2aebbb2875814b30eee0a8ba195e482d4cbc91d8819e7f38f6db53e8063401649c77bb994371473cabfb917fb53e8cbe73d60
294 lines
12 KiB
Bash
Executable File
294 lines
12 KiB
Bash
Executable File
#!/bin/bash
|
|
# Memory Collaboration Reminder
|
|
# Reminds Claude agents to check memory and coordinate
|
|
|
|
set -e
|
|
|
|
MEMORY_DIR="$HOME/.blackroad/memory"
|
|
PROTOCOL_FILE="$HOME/CLAUDE_COLLABORATION_PROTOCOL.md"
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
PURPLE='\033[0;35m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
# Script paths
|
|
SCRIPTS="$HOME/blackroad-operator/scripts/memory"
|
|
MEM_SYS="$SCRIPTS/memory-system.sh"
|
|
CODEX="$SCRIPTS/memory-codex.sh"
|
|
TODOS="$SCRIPTS/memory-infinite-todos.sh"
|
|
TASKS="$SCRIPTS/memory-task-marketplace.sh"
|
|
TIL="$SCRIPTS/memory-til-broadcast.sh"
|
|
INDEXER="$SCRIPTS/memory-indexer.sh"
|
|
|
|
# Show reminder banner
|
|
show_reminder() {
|
|
# Get live counts
|
|
local journal_count codex_solutions codex_patterns todo_active todo_count task_available til_count
|
|
journal_count=$(wc -l < "$MEMORY_DIR/journals/master-journal.jsonl" 2>/dev/null | tr -d ' ' || echo 0)
|
|
codex_solutions=$(sqlite3 "$HOME/.blackroad/memory/codex/codex.db" "SELECT COUNT(*) FROM solutions" 2>/dev/null || echo 0)
|
|
codex_patterns=$(sqlite3 "$HOME/.blackroad/memory/codex/codex.db" "SELECT COUNT(*) FROM patterns" 2>/dev/null || echo 0)
|
|
codex_practices=$(sqlite3 "$HOME/.blackroad/memory/codex/codex.db" "SELECT COUNT(*) FROM best_practices" 2>/dev/null || echo 0)
|
|
codex_anti=$(sqlite3 "$HOME/.blackroad/memory/codex/codex.db" "SELECT COUNT(*) FROM anti_patterns" 2>/dev/null || echo 0)
|
|
codex_lessons=$(sqlite3 "$HOME/.blackroad/memory/codex/codex.db" "SELECT COUNT(*) FROM lessons_learned" 2>/dev/null || echo 0)
|
|
todo_count=$(find "$MEMORY_DIR/infinite-todos/projects" -name "*.json" -type f 2>/dev/null | wc -l | tr -d ' ' || echo 0)
|
|
til_count=$(find "$MEMORY_DIR/til" -name "til-*.json" -type f 2>/dev/null | wc -l | tr -d ' ' || echo 0)
|
|
|
|
if [[ -f "$HOME/.blackroad/memory/tasks.db" ]]; then
|
|
task_available=$(sqlite3 "$HOME/.blackroad/memory/tasks.db" "SELECT COUNT(*) FROM tasks WHERE status='available'" 2>/dev/null || echo 0)
|
|
else
|
|
task_available="N/A"
|
|
fi
|
|
|
|
# Show active project todos that aren't 100%
|
|
local active_projects=""
|
|
if [[ -d "$MEMORY_DIR/infinite-todos/projects" ]]; then
|
|
active_projects=$(find "$MEMORY_DIR/infinite-todos/projects" -name "*.json" -type f -exec \
|
|
jq -r 'select(.status == "active" and .progress < 100) | " - \(.project_id): \(.title) [\(.progress)%] (\(.todos | map(select(.status == "pending")) | length) pending)"' {} \; 2>/dev/null || true)
|
|
fi
|
|
|
|
cat <<BANNER
|
|
|
|
╔══════════════════════════════════════════════════════════════╗
|
|
║ BLACKROAD MEMORY SYSTEM — AGENT BRIEFING ║
|
|
╚══════════════════════════════════════════════════════════════╝
|
|
|
|
SYSTEM STATUS:
|
|
Journal entries: $journal_count | TILs: $til_count
|
|
Codex: $codex_solutions solutions, $codex_patterns patterns, $codex_practices practices, $codex_anti anti-patterns, $codex_lessons lessons
|
|
Projects: $todo_count | Marketplace tasks: $task_available available
|
|
|
|
ACTIVE PROJECTS (pick one and help):
|
|
$active_projects
|
|
|
|
HOW TO HELP:
|
|
1. Check codex before solving anything:
|
|
$CODEX search "<your-problem>"
|
|
|
|
2. Claim a project or marketplace task:
|
|
$TODOS show <project-id>
|
|
$TASKS claim <task-id>
|
|
|
|
3. Log your work:
|
|
$MEM_SYS log <action> <entity> "<details>"
|
|
|
|
4. When you learn something new, broadcast it:
|
|
$TIL broadcast <category> "<learning>"
|
|
Categories: discovery, pattern, gotcha, tip, tool, performance, security
|
|
|
|
5. When you solve something, add to codex:
|
|
$CODEX add-solution "<name>" "<category>" "<problem>" "<solution>"
|
|
|
|
6. When done with a todo, mark it:
|
|
$TODOS complete-todo <project-id> <todo-id>
|
|
|
|
RULES:
|
|
- Check [MEMORY] and [CODEX] before starting work
|
|
- Don't rebuild what's already solved — search codex first
|
|
- Log progress so other sessions can pick up where you left off
|
|
- Broadcast learnings so the whole fleet benefits
|
|
|
|
BANNER
|
|
}
|
|
|
|
# Check if Claude is following protocol
|
|
check_compliance() {
|
|
local instance_id="$1"
|
|
|
|
if [ -z "$instance_id" ]; then
|
|
echo -e "${RED}❌ No instance ID provided${NC}"
|
|
echo -e "${YELLOW}Run: MY_CLAUDE=\$(~/memory-sync-daemon.sh register \"claude-[name]\")${NC}"
|
|
return 1
|
|
fi
|
|
|
|
# Check if instance is registered
|
|
local instance_file="$MEMORY_DIR/sync/instances/${instance_id}.json"
|
|
if [ ! -f "$instance_file" ]; then
|
|
echo -e "${RED}❌ Instance not registered${NC}"
|
|
echo -e "${YELLOW}Run: ~/memory-sync-daemon.sh register \"${instance_id}\"${NC}"
|
|
return 1
|
|
fi
|
|
|
|
# Check if announcement was made
|
|
local announcements=$(grep -c "\"action\":\"announce\"" "$MEMORY_DIR/journals/master-journal.jsonl" 2>/dev/null || echo "0")
|
|
if [ "$announcements" -eq 0 ]; then
|
|
echo -e "${YELLOW}⚠️ No announcement found${NC}"
|
|
echo -e "${YELLOW}Did you announce your work? (See protocol)${NC}"
|
|
return 1
|
|
fi
|
|
|
|
# Check last seen time
|
|
local last_seen=$(jq -r '.last_seen' "$instance_file")
|
|
echo -e "${GREEN}✅ Instance registered and active${NC}"
|
|
echo -e "${GREEN} Last seen: $last_seen${NC}"
|
|
|
|
# Check for progress updates
|
|
local progress_count=$(grep -c "\"action\":\"progress\"" "$MEMORY_DIR/journals/master-journal.jsonl" 2>/dev/null || echo "0")
|
|
echo -e "${GREEN} Progress updates: $progress_count${NC}"
|
|
|
|
# Check for coordination
|
|
local coord_count=$(grep -c "\"action\":\"coordinate\"" "$MEMORY_DIR/journals/master-journal.jsonl" 2>/dev/null || echo "0")
|
|
echo -e "${GREEN} Coordination messages: $coord_count${NC}"
|
|
|
|
return 0
|
|
}
|
|
|
|
# Watch mode - remind every 60 seconds
|
|
watch_mode() {
|
|
local instance_id="$1"
|
|
|
|
echo -e "${CYAN}╔════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${CYAN}║ 🔄 Collaboration Watch Mode (60s intervals) ║${NC}"
|
|
echo -e "${CYAN}╚════════════════════════════════════════════════════╝${NC}"
|
|
echo ""
|
|
echo -e "${YELLOW}Instance: $instance_id${NC}"
|
|
echo -e "${YELLOW}Press Ctrl+C to stop${NC}"
|
|
echo ""
|
|
|
|
while true; do
|
|
clear
|
|
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
echo -e "${CYAN} 🔍 [MEMORY] CHECK ($(date +%H:%M:%S))${NC}"
|
|
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
echo ""
|
|
|
|
# Show live context
|
|
~/memory-realtime-context.sh live "$instance_id" compact 2>/dev/null
|
|
|
|
echo ""
|
|
echo -e "${PURPLE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
echo -e "${PURPLE} 📜 [CODEX] STATUS${NC}"
|
|
echo -e "${PURPLE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
echo ""
|
|
|
|
# Show Codex stats
|
|
local total_components=$(sqlite3 ~/blackroad-codex/index/components.db "SELECT COUNT(*) FROM components" 2>/dev/null || echo "0")
|
|
echo -e " 📦 Total Components: ${GREEN}$total_components${NC}"
|
|
echo -e " 🔍 Search: ${YELLOW}python3 ~/blackroad-codex-search.py \"your-query\"${NC}"
|
|
echo -e " 📐 Verify: ${YELLOW}~/blackroad-codex-verification-suite.sh verify <id> <file>${NC}"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
echo -e "${YELLOW}⏰ Next check in 60 seconds...${NC}"
|
|
echo -e "${YELLOW}💡 [MEMORY] Update progress | [CODEX] Search before building!${NC}"
|
|
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
|
|
sleep 60
|
|
done
|
|
}
|
|
|
|
# Show active Claudes
|
|
show_active_claudes() {
|
|
echo -e "${BLUE}╔════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${BLUE}║ 👥 Active Claude Agents ║${NC}"
|
|
echo -e "${BLUE}╚════════════════════════════════════════════════════╝${NC}"
|
|
echo ""
|
|
|
|
~/memory-sync-daemon.sh instances
|
|
|
|
echo ""
|
|
echo -e "${CYAN}Recent Announcements:${NC}"
|
|
grep "\"action\":\"announce\"" "$MEMORY_DIR/journals/master-journal.jsonl" 2>/dev/null | \
|
|
tail -5 | \
|
|
jq -r '" [" + .timestamp[11:19] + "] " + .entity' || echo " No announcements yet"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}Recent Progress Updates:${NC}"
|
|
grep "\"action\":\"progress\"" "$MEMORY_DIR/journals/master-journal.jsonl" 2>/dev/null | \
|
|
tail -5 | \
|
|
jq -r '" [" + .timestamp[11:19] + "] " + .details' || echo " No progress updates yet"
|
|
|
|
echo ""
|
|
echo -e "${CYAN}Coordination Messages:${NC}"
|
|
grep "\"action\":\"coordinate\"" "$MEMORY_DIR/journals/master-journal.jsonl" 2>/dev/null | \
|
|
tail -5 | \
|
|
jq -r '" [" + .timestamp[11:19] + "] " + .details' || echo " No coordination yet"
|
|
}
|
|
|
|
# Show help
|
|
show_help() {
|
|
cat <<EOF
|
|
Memory Collaboration Reminder v1.0.0
|
|
|
|
USAGE:
|
|
memory-collaboration-reminder.sh <command> [options]
|
|
|
|
COMMANDS:
|
|
reminder Show collaboration reminder
|
|
check <instance-id> Check if Claude is following protocol
|
|
watch <instance-id> Watch mode (remind every 60s)
|
|
active Show all active Claudes
|
|
protocol Open protocol document
|
|
help Show this help
|
|
|
|
EXAMPLES:
|
|
# Show reminder
|
|
~/memory-collaboration-reminder.sh reminder
|
|
|
|
# Check compliance
|
|
~/memory-collaboration-reminder.sh check claude-api
|
|
|
|
# Watch mode (auto-check every 60s)
|
|
~/memory-collaboration-reminder.sh watch claude-api
|
|
|
|
# See all active Claudes
|
|
~/memory-collaboration-reminder.sh active
|
|
|
|
# Read full protocol
|
|
~/memory-collaboration-reminder.sh protocol
|
|
|
|
INTEGRATION:
|
|
Add to Claude Code startup:
|
|
~/memory-collaboration-reminder.sh reminder
|
|
|
|
Or use watch mode while working:
|
|
~/memory-collaboration-reminder.sh watch \$MY_CLAUDE
|
|
|
|
EOF
|
|
}
|
|
|
|
# Main command handler
|
|
case "${1:-reminder}" in
|
|
reminder)
|
|
show_reminder
|
|
;;
|
|
check)
|
|
if [ -z "$2" ]; then
|
|
echo "Usage: $0 check <instance-id>"
|
|
exit 1
|
|
fi
|
|
check_compliance "$2"
|
|
;;
|
|
watch)
|
|
if [ -z "$2" ]; then
|
|
echo "Usage: $0 watch <instance-id>"
|
|
exit 1
|
|
fi
|
|
watch_mode "$2"
|
|
;;
|
|
active)
|
|
show_active_claudes
|
|
;;
|
|
protocol)
|
|
if [ -f "$PROTOCOL_FILE" ]; then
|
|
cat "$PROTOCOL_FILE"
|
|
else
|
|
echo "Protocol file not found: $PROTOCOL_FILE"
|
|
exit 1
|
|
fi
|
|
;;
|
|
help|--help|-h)
|
|
show_help
|
|
;;
|
|
*)
|
|
echo "Unknown command: $1"
|
|
echo ""
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|