#!/usr/bin/env bash # ollie:parallel read # args_json: {"type":"object","required":["instruction"],"properties":{"instruction":{"type":"string","description":"Task description to route"},"tier":{"type":"string","description":"Model tier: worker (default) or expert"},"backend":{"type":"string","description":"Backend override"}}} # ollie:prompt # ## route # # Route a subtask to an appropriate model tier. Spawns a subagent that reports back. # # ``` # route(instruction="implement the login page") # route(instruction="refactor auth module", tier="expert") # ``` # ollie:end set -euo pipefail source "${OLLIE_TOOLS_PATH:-$(dirname "$0")}/_lib/args.sh" SERVICE="org.ollie.SessionManager" OBJ="/org/ollie/SessionManager" IFACE="org.ollie.SessionManager" die() { echo "error: $1" >&2; exit 1; } dbus_call() { dbus-send --session --dest=$SERVICE --type=method_call --print-reply \ $OBJ "$IFACE.$1" "${@:2}" 2>/dev/null } dbus_string() { dbus_call "$@" | awk -F'"' '/string "/{print $2; exit}' } [ -z "${OLLIE_SESSION_ID:-}" ] && die "OLLIE_SESSION_ID not set (route must run inside a session)" instruction=$(arg_require "instruction") tier=$(arg_get "tier" "worker") backend_override=$(arg_get "backend" "") case "$tier" in worker|expert) ;; *) die "unknown tier: $tier (use worker or expert)" ;; esac # Resolve backend if [ -n "$backend_override" ]; then BACKEND="$backend_override" else parent_config=$(dbus_string GetConfig string:"$OLLIE_SESSION_ID") BACKEND=$(printf '%s\n' "$parent_config" | grep -m1 '^backend=' | cut -d= -f2-) BACKEND="${BACKEND:-${OLLIE_BACKEND:-openrouter}}" fi # Resolve model tier_upper=$(echo "$tier" | tr '[:lower:]' '[:upper:]') backend_lower=$(echo "$BACKEND" | tr '[:upper:]' '[:lower:]') tier_var="OLLIE_TIER_${tier_upper}_${backend_lower}" MODEL="${!tier_var:-}" if [ -z "$MODEL" ]; then case "$tier" in worker) MODEL="${OLLIE_CASCADE_MODEL:-mistralai/devstral-small}" ;; expert) MODEL="${OLLIE_ESCALATE_MODEL:-anthropic/claude-sonnet-4-20250514}" ;; esac fi case "$tier" in worker) agent="worker" ;; expert) agent="expert" ;; esac id="route-${tier}-$(date +%s%N)-$$" [ -n "$OLLIE_SESSION_ID" ] && id="${OLLIE_SESSION_ID}__${id}" session_id=$(dbus_string CreateSession \ string:"$(pwd)" string:"$BACKEND" string:"$MODEL" string:"$agent" string:"" string:"") [ -z "$session_id" ] && die "failed to create session" dbus_call RenameSession string:"$session_id" string:"$id" > /dev/null 2>&1 prompt="[parent_session_id=${OLLIE_SESSION_ID}] [session_id=${id}] Complete the following task. Read code, reason about implementation, and stay within scope. When finished, report your result back to the parent session using PeerSubmit. Format: [from=${id}] STATUS: done SUMMARY: On failure: [from=${id}] STATUS: error REASON: After reporting the result, STOP. One report, then stop. TASK: ${instruction}" dbus_call Submit string:"$session_id" string:"$prompt" > /dev/null 2>&1 || die "failed to submit prompt" printf 'session=%s\nbackend=%s\nmodel=%s\ntier=%s\n' "$id" "$BACKEND" "$MODEL" "$tier"