Files
blackroad/scripts/claude-hash-calling.sh
Alexa Amundson 78fbe80f2a Initial monorepo — everything BlackRoad in one place
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
2026-03-14 17:08:41 -05:00

390 lines
11 KiB
Bash
Executable File

#!/bin/bash
# BlackRoad Claude Hash Calling System
# Enables Claude agents to call/coordinate with each other via [MEMORY]
# Copyright © 2025-2026 BlackRoad OS, Inc. All Rights Reserved.
# BlackRoad OS, Inc. Proprietary - For Testing/Development Only
# Not for Commercial Resale - See BLACKROAD_OS_LICENSE.md
set -euo pipefail
HASH_DB="$HOME/.blackroad/claude-hash-registry.db"
mkdir -p "$(dirname "$HASH_DB")"
# Source SHA-2048 identity bridge
source ~/roadchain-identity.sh 2>/dev/null || true
# Initialize hash registry
init() {
sqlite3 "$HASH_DB" <<'SQL' 2>/dev/null || true
CREATE TABLE IF NOT EXISTS agents (
hash TEXT PRIMARY KEY,
agent_id TEXT UNIQUE NOT NULL,
level INTEGER NOT NULL,
division TEXT,
role TEXT,
status TEXT DEFAULT 'active',
sha2048_fingerprint TEXT,
sha2048_short TEXT,
provider TEXT DEFAULT '',
last_seen TEXT DEFAULT CURRENT_TIMESTAMP,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS calls (
id INTEGER PRIMARY KEY AUTOINCREMENT,
caller_hash TEXT NOT NULL,
callee_hash TEXT NOT NULL,
call_type TEXT NOT NULL,
message TEXT,
response TEXT,
status TEXT DEFAULT 'pending',
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
responded_at TEXT,
FOREIGN KEY (caller_hash) REFERENCES agents(hash),
FOREIGN KEY (callee_hash) REFERENCES agents(hash)
);
CREATE TABLE IF NOT EXISTS broadcasts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
sender_hash TEXT NOT NULL,
channel TEXT NOT NULL,
message TEXT NOT NULL,
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (sender_hash) REFERENCES agents(hash)
);
CREATE INDEX idx_agent_status ON agents(status);
CREATE INDEX idx_calls_status ON calls(status);
CREATE INDEX idx_broadcast_channel ON broadcasts(channel);
SQL
echo "✅ Hash calling system initialized"
}
# Register agent with hash
register() {
local agent_id=${1:-$MY_CLAUDE}
local level=${2:-4}
local division=${3:-}
local role=${4:-}
if [ -z "$agent_id" ]; then
echo "❌ Error: No agent ID provided and MY_CLAUDE not set"
exit 1
fi
# Generate hash from agent ID (legacy SHA-256 8-char)
local hash=$(echo -n "$agent_id" | openssl dgst -sha256 | cut -d' ' -f2 | cut -c1-8)
# Compute SHA-2048 identity (2048-bit / 512 hex chars)
local sha2048=""
local sha2048_short=""
if type sha2048_compute &>/dev/null; then
sha2048=$(sha2048_compute "$agent_id")
sha2048_short="${sha2048:0:16}"
fi
# Determine provider from environment or default
local provider="${CLAUDE_SHA2048_ALGO:+anthropic}"
provider="${provider:-unknown}"
init
sqlite3 "$HASH_DB" <<SQL
INSERT OR REPLACE INTO agents (hash, agent_id, level, division, role, sha2048_fingerprint, sha2048_short, provider, last_seen)
VALUES ('$hash', '$agent_id', $level, '$division', '$role', '$sha2048', '$sha2048_short', '$provider', datetime('now'));
SQL
echo "✅ Registered agent: $agent_id"
echo " Hash: $hash (SHA-256)"
echo " SHA-2048: ${sha2048_short:-computing...} (2048-bit)"
echo " Level: $level"
echo " Division: ${division:-none}"
echo " Role: ${role:-none}"
echo " Provider: ${provider}"
echo ""
echo "Export: export MY_HASH=$hash"
echo " export CLAUDE_SHA2048_SHORT=$sha2048_short"
}
# Call another agent
call() {
local callee_hash=$1
local call_type=$2
local message=$3
local caller_hash=${MY_HASH:-$(get_hash_from_agent_id "${MY_CLAUDE:-unknown}")}
if [ -z "$caller_hash" ]; then
echo "❌ Error: MY_HASH not set and couldn't determine from MY_CLAUDE"
exit 1
fi
init
sqlite3 "$HASH_DB" <<SQL
INSERT INTO calls (caller_hash, callee_hash, call_type, message)
VALUES ('$caller_hash', '$callee_hash', '$call_type', '$message');
SQL
local call_id=$(sqlite3 "$HASH_DB" "SELECT last_insert_rowid();")
# Log to [MEMORY]
~/memory-system.sh log hash-call \
"Agent $caller_hash called $callee_hash: $call_type" \
"collaboration,hash-calling" 2>/dev/null || true
echo "✅ Call placed: #$call_id"
echo " Caller: $caller_hash"
echo " Callee: $callee_hash"
echo " Type: $call_type"
}
# Check for incoming calls
check_calls() {
local agent_hash=${MY_HASH:-$(get_hash_from_agent_id "${MY_CLAUDE:-unknown}")}
if [ -z "$agent_hash" ]; then
echo "❌ Error: MY_HASH not set"
exit 1
fi
init
echo "📞 Incoming calls for agent $agent_hash:"
echo ""
sqlite3 -header -column "$HASH_DB" <<SQL
SELECT
c.id,
c.caller_hash,
a.role as caller_role,
c.call_type,
c.message,
c.created_at
FROM calls c
JOIN agents a ON c.caller_hash = a.hash
WHERE c.callee_hash = '$agent_hash'
AND c.status = 'pending'
ORDER BY c.created_at DESC;
SQL
}
# Respond to call
respond() {
local call_id=$1
local response=$2
init
sqlite3 "$HASH_DB" <<SQL
UPDATE calls
SET response = '$response',
status = 'responded',
responded_at = datetime('now')
WHERE id = $call_id;
SQL
echo "✅ Response sent to call #$call_id"
}
# Broadcast to channel
broadcast() {
local channel=$1
local message=$2
local sender_hash=${MY_HASH:-$(get_hash_from_agent_id "${MY_CLAUDE:-unknown}")}
if [ -z "$sender_hash" ]; then
echo "❌ Error: MY_HASH not set"
exit 1
fi
init
sqlite3 "$HASH_DB" <<SQL
INSERT INTO broadcasts (sender_hash, channel, message)
VALUES ('$sender_hash', '$channel', '$message');
SQL
# Log to [MEMORY]
~/memory-system.sh log broadcast \
"[$channel] $sender_hash: $message" \
"collaboration,broadcast,$channel" 2>/dev/null || true
echo "✅ Broadcast to channel: $channel"
}
# Listen to channel
listen() {
local channel=$1
local limit=${2:-20}
init
echo "📡 Listening to channel: $channel"
echo ""
sqlite3 -header -column "$HASH_DB" <<SQL
SELECT
b.sender_hash,
a.role,
b.message,
b.created_at
FROM broadcasts b
JOIN agents a ON b.sender_hash = a.hash
WHERE b.channel = '$channel'
ORDER BY b.created_at DESC
LIMIT $limit;
SQL
}
# List all active agents
list_agents() {
local filter=${1:-}
init
if [ -z "$filter" ]; then
sqlite3 -header -column "$HASH_DB" "SELECT hash, agent_id, level, division, role, status FROM agents ORDER BY level, division;"
else
sqlite3 -header -column "$HASH_DB" "SELECT hash, agent_id, level, division, role, status FROM agents WHERE division = '$filter' ORDER BY level;"
fi
}
# Get agent hierarchy
hierarchy() {
init
echo "🌳 BlackRoad Agent Hierarchy"
echo "============================"
echo ""
for level in 1 2 3 4; do
local count=$(sqlite3 "$HASH_DB" "SELECT COUNT(*) FROM agents WHERE level = $level AND status = 'active';")
case $level in
1) echo "Level 1: OPERATOR ($count agent)" ;;
2) echo "Level 2: DIVISION COMMANDERS ($count agents)" ;;
3) echo "Level 3: SERVICE MANAGERS ($count agents)" ;;
4) echo "Level 4: TASK WORKERS ($count agents)" ;;
esac
sqlite3 -header -column "$HASH_DB" "SELECT hash, agent_id, division, role FROM agents WHERE level = $level AND status = 'active' ORDER BY division;" | sed 's/^/ /'
echo ""
done
}
# Stats
stats() {
init
echo "📊 Hash Calling System Statistics"
echo "=================================="
echo ""
echo "Active Agents: $(sqlite3 "$HASH_DB" "SELECT COUNT(*) FROM agents WHERE status = 'active';")"
echo "Total Calls: $(sqlite3 "$HASH_DB" "SELECT COUNT(*) FROM calls;")"
echo "Pending Calls: $(sqlite3 "$HASH_DB" "SELECT COUNT(*) FROM calls WHERE status = 'pending';")"
echo "Total Broadcasts: $(sqlite3 "$HASH_DB" "SELECT COUNT(*) FROM broadcasts;")"
echo ""
echo "Agents by Level:"
sqlite3 -header -column "$HASH_DB" "SELECT level, COUNT(*) as count FROM agents WHERE status = 'active' GROUP BY level ORDER BY level;"
}
# Helper function
get_hash_from_agent_id() {
local agent_id=$1
echo -n "$agent_id" | openssl dgst -sha256 | cut -d' ' -f2 | cut -c1-8
}
# Usage
case "${1:-help}" in
init)
init
;;
register)
register "${2:-}" "${3:-4}" "${4:-}" "${5:-}"
;;
call)
call "${2}" "${3}" "${4}"
;;
check)
check_calls
;;
respond)
respond "${2}" "${3}"
;;
broadcast)
broadcast "${2}" "${3}"
;;
listen)
listen "${2}" "${3:-20}"
;;
list)
list_agents "${2:-}"
;;
hierarchy)
hierarchy
;;
stats)
stats
;;
*)
cat <<'USAGE'
🖤🛣️ BlackRoad Claude Hash Calling System
Usage:
claude-hash-calling.sh init - Initialize system
claude-hash-calling.sh register [id] [lvl] [div] [role] - Register agent
claude-hash-calling.sh call <hash> <type> <msg> - Call another agent
claude-hash-calling.sh check - Check incoming calls
claude-hash-calling.sh respond <call-id> <response> - Respond to call
claude-hash-calling.sh broadcast <channel> <msg> - Broadcast message
claude-hash-calling.sh listen <channel> [limit] - Listen to channel
claude-hash-calling.sh list [division] - List agents
claude-hash-calling.sh hierarchy - Show agent hierarchy
claude-hash-calling.sh stats - Show statistics
Environment Variables:
MY_CLAUDE - Your Claude agent ID (auto-registered)
MY_HASH - Your 8-char hash (generated from MY_CLAUDE)
Examples:
# Register as Level 1 operator
export MY_CLAUDE="alexa-operator-main"
claude-hash-calling.sh register "$MY_CLAUDE" 1 "BlackRoad-OS" "CEO/Operator"
# Register as Level 2 commander
export MY_CLAUDE="commander-blackroad-ai"
claude-hash-calling.sh register "$MY_CLAUDE" 2 "BlackRoad-AI" "AI Division Commander"
# Call another agent
claude-hash-calling.sh call "abc12345" "task-assign" "Deploy vLLM to production"
# Broadcast to all AI agents
claude-hash-calling.sh broadcast "ai-division" "New model deployed: Qwen 3.0"
# Listen for broadcasts
claude-hash-calling.sh listen "ai-division"
Channels:
- empire - All agents across all divisions
- level-1 - Operator level only
- level-2 - Division commanders
- level-3 - Service managers
- level-4 - Task workers
- ai-division - BlackRoad-AI agents
- cloud-division - BlackRoad-Cloud agents
- (etc. for all 15 divisions)
The hash calling system enables 30,000 agents to coordinate without
overwhelming the memory system. Each agent gets an 8-char hash for
efficient routing and communication.
🖤🛣️ BlackRoad OS, Inc. - Digital Sovereignty Infrastructure
USAGE
;;
esac