this repo has no description
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add support for running multiple agents in parallel

Enhanced run_agent.sh to accept multiple agent names, enabling parallel
execution of agents in both bridge and listener modes. Agents are
automatically validated and run concurrently.

๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

+126 -40
+126 -40
run_agent.sh
··· 20 20 usage() { 21 21 echo "๐Ÿค– Agent Runner for Jetstream-Letta Bridge" 22 22 echo "" 23 - echo "Usage: $0 [agent_name] [additional_options...]" 24 - echo " $0 listen [agent_name] [additional_options...]" 23 + echo "Usage: $0 [agent_name...] [additional_options...]" 24 + echo " $0 listen [agent_name...] [additional_options...]" 25 25 echo "" 26 26 echo "Examples:" 27 27 echo " $0 technical # Run technical agent (bridge mode)" 28 28 echo " $0 creative --verbose # Run creative agent with verbose output" 29 + echo " $0 grunk kaleidoscope herald # Run multiple agents in parallel" 29 30 echo " $0 analytical --batch-size 10 # Run analytical agent with custom batch size" 30 31 echo " $0 listen grunk # Run grunk agent in listener mode (periodic messaging)" 32 + echo " $0 listen grunk kaleidoscope # Run multiple agents in listener mode" 31 33 echo " $0 listen grunk --mode poll # Run with periodic polling" 32 34 echo "" 33 35 echo "Available agents:" ··· 103 105 shift # Remove 'listen' from arguments 104 106 105 107 if [ $# -eq 0 ]; then 106 - echo -e "${RED}โŒ Please specify an agent name${NC}" 107 - echo "Usage: $0 listen [agent_name] [options...]" 108 + echo -e "${RED}โŒ Please specify one or more agent names${NC}" 109 + echo "Usage: $0 listen [agent_name...] [options...]" 108 110 exit 1 109 111 fi 110 112 111 - AGENT_NAME="$1" 112 - shift 113 - ADDITIONAL_ARGS="$@" 114 - 115 113 # Check if listener script exists 116 114 if [ ! -f "$LISTENER_SCRIPT" ]; then 117 115 echo -e "${RED}โŒ Listener script not found at: $LISTENER_SCRIPT${NC}" 118 116 exit 1 119 117 fi 120 118 121 - # Check if agent config exists 122 - AGENT_CONFIG="${AGENTS_DIR}/${AGENT_NAME}.yaml" 123 - if [ ! -f "$AGENT_CONFIG" ]; then 124 - echo -e "${RED}โŒ Agent configuration not found: $AGENT_CONFIG${NC}" 119 + # Collect agent names and separate additional args 120 + AGENT_NAMES=() 121 + ADDITIONAL_ARGS="" 122 + 123 + for arg in "$@"; do 124 + # If argument starts with '--' or '-', treat as option 125 + if [[ "$arg" == -* ]]; then 126 + ADDITIONAL_ARGS="$ADDITIONAL_ARGS $arg" 127 + else 128 + # Check if this could be an agent name 129 + AGENT_CONFIG="${AGENTS_DIR}/${arg}.yaml" 130 + if [ -f "$AGENT_CONFIG" ]; then 131 + AGENT_NAMES+=("$arg") 132 + else 133 + # If config doesn't exist, treat as additional arg 134 + ADDITIONAL_ARGS="$ADDITIONAL_ARGS $arg" 135 + fi 136 + fi 137 + done 138 + 139 + if [ ${#AGENT_NAMES[@]} -eq 0 ]; then 140 + echo -e "${RED}โŒ No valid agent names provided${NC}" 125 141 echo "" 126 142 echo "Available agents:" 127 143 for config in "$AGENTS_DIR"/*.yaml; do ··· 133 149 exit 1 134 150 fi 135 151 136 - # Run the listener with the specified agent 137 - echo -e "${GREEN}๐Ÿ”„ Starting agent listener (periodic mode): $AGENT_NAME${NC}" 138 - echo -e "${BLUE}๐Ÿ“„ Config: $AGENT_CONFIG${NC}" 139 - if [ -n "$ADDITIONAL_ARGS" ]; then 140 - echo -e "${YELLOW}โš™๏ธ Additional options: $ADDITIONAL_ARGS${NC}" 141 - fi 142 - echo "" 152 + # Run multiple agents if specified 153 + if [ ${#AGENT_NAMES[@]} -eq 1 ]; then 154 + AGENT_NAME="${AGENT_NAMES[0]}" 155 + AGENT_CONFIG="${AGENTS_DIR}/${AGENT_NAME}.yaml" 156 + 157 + echo -e "${GREEN}๐Ÿ”„ Starting agent listener (periodic mode): $AGENT_NAME${NC}" 158 + echo -e "${BLUE}๐Ÿ“„ Config: $AGENT_CONFIG${NC}" 159 + if [ -n "$ADDITIONAL_ARGS" ]; then 160 + echo -e "${YELLOW}โš™๏ธ Additional options: $ADDITIONAL_ARGS${NC}" 161 + fi 162 + echo "" 163 + 164 + # Execute the listener 165 + exec python3 "$LISTENER_SCRIPT" --config "$AGENT_CONFIG" $ADDITIONAL_ARGS 166 + else 167 + # Multiple agents - run in parallel 168 + echo -e "${GREEN}๐Ÿ”„ Starting ${#AGENT_NAMES[@]} agent listeners in parallel${NC}" 169 + PIDS=() 170 + 171 + for AGENT_NAME in "${AGENT_NAMES[@]}"; do 172 + AGENT_CONFIG="${AGENTS_DIR}/${AGENT_NAME}.yaml" 173 + echo -e "${BLUE}๐Ÿ“„ Starting $AGENT_NAME: $AGENT_CONFIG${NC}" 174 + 175 + python3 "$LISTENER_SCRIPT" --config "$AGENT_CONFIG" $ADDITIONAL_ARGS & 176 + PIDS+=($!) 177 + done 143 178 144 - # Execute the listener 145 - exec python3 "$LISTENER_SCRIPT" --config "$AGENT_CONFIG" $ADDITIONAL_ARGS 179 + if [ -n "$ADDITIONAL_ARGS" ]; then 180 + echo -e "${YELLOW}โš™๏ธ Additional options: $ADDITIONAL_ARGS${NC}" 181 + fi 182 + echo "" 183 + echo -e "${GREEN}โœ“ All agents started. Press Ctrl+C to stop all.${NC}" 184 + 185 + # Wait for all background processes 186 + for pid in "${PIDS[@]}"; do 187 + wait $pid 188 + done 189 + fi 190 + exit 0 146 191 fi 147 192 148 - # Get agent name and remaining arguments 149 - AGENT_NAME="$1" 150 - shift 151 - ADDITIONAL_ARGS="$@" 152 - 153 - # Check if agent config exists 154 - AGENT_CONFIG="${AGENTS_DIR}/${AGENT_NAME}.yaml" 155 - if [ ! -f "$AGENT_CONFIG" ]; then 156 - echo -e "${RED}โŒ Agent configuration not found: $AGENT_CONFIG${NC}" 193 + # Collect agent names and separate additional args 194 + AGENT_NAMES=() 195 + ADDITIONAL_ARGS="" 196 + 197 + for arg in "$@"; do 198 + # If argument starts with '--' or '-', treat as option 199 + if [[ "$arg" == -* ]]; then 200 + ADDITIONAL_ARGS="$ADDITIONAL_ARGS $arg" 201 + else 202 + # Check if this could be an agent name 203 + AGENT_CONFIG="${AGENTS_DIR}/${arg}.yaml" 204 + if [ -f "$AGENT_CONFIG" ]; then 205 + AGENT_NAMES+=("$arg") 206 + else 207 + # If config doesn't exist, treat as additional arg 208 + ADDITIONAL_ARGS="$ADDITIONAL_ARGS $arg" 209 + fi 210 + fi 211 + done 212 + 213 + if [ ${#AGENT_NAMES[@]} -eq 0 ]; then 214 + echo -e "${RED}โŒ No valid agent names provided${NC}" 157 215 echo "" 158 216 echo "Available agents:" 159 217 for config in "$AGENTS_DIR"/*.yaml; do ··· 164 222 done 165 223 exit 1 166 224 fi 167 - 168 - # Run the bridge with the specified agent 169 - echo -e "${GREEN}๐Ÿš€ Starting agent: $AGENT_NAME${NC}" 170 - echo -e "${BLUE}๐Ÿ“„ Config: $AGENT_CONFIG${NC}" 171 - if [ -n "$ADDITIONAL_ARGS" ]; then 172 - echo -e "${YELLOW}โš™๏ธ Additional options: $ADDITIONAL_ARGS${NC}" 225 + 226 + # Run single agent 227 + if [ ${#AGENT_NAMES[@]} -eq 1 ]; then 228 + AGENT_NAME="${AGENT_NAMES[0]}" 229 + AGENT_CONFIG="${AGENTS_DIR}/${AGENT_NAME}.yaml" 230 + 231 + echo -e "${GREEN}๐Ÿš€ Starting agent: $AGENT_NAME${NC}" 232 + echo -e "${BLUE}๐Ÿ“„ Config: $AGENT_CONFIG${NC}" 233 + if [ -n "$ADDITIONAL_ARGS" ]; then 234 + echo -e "${YELLOW}โš™๏ธ Additional options: $ADDITIONAL_ARGS${NC}" 235 + fi 236 + echo "" 237 + 238 + # Execute the bridge 239 + exec python3 "$BRIDGE_SCRIPT" --agent "$AGENT_CONFIG" $ADDITIONAL_ARGS 240 + else 241 + # Multiple agents - run in parallel 242 + echo -e "${GREEN}๐Ÿš€ Starting ${#AGENT_NAMES[@]} agents in parallel${NC}" 243 + PIDS=() 244 + 245 + for AGENT_NAME in "${AGENT_NAMES[@]}"; do 246 + AGENT_CONFIG="${AGENTS_DIR}/${AGENT_NAME}.yaml" 247 + echo -e "${BLUE}๐Ÿ“„ Starting $AGENT_NAME: $AGENT_CONFIG${NC}" 248 + 249 + python3 "$BRIDGE_SCRIPT" --agent "$AGENT_CONFIG" $ADDITIONAL_ARGS & 250 + PIDS+=($!) 251 + done 252 + 253 + if [ -n "$ADDITIONAL_ARGS" ]; then 254 + echo -e "${YELLOW}โš™๏ธ Additional options: $ADDITIONAL_ARGS${NC}" 255 + fi 256 + echo "" 257 + echo -e "${GREEN}โœ“ All agents started. Press Ctrl+C to stop all.${NC}" 258 + 259 + # Wait for all background processes 260 + for pid in "${PIDS[@]}"; do 261 + wait $pid 262 + done 173 263 fi 174 - echo "" 175 - 176 - # Execute the bridge 177 - exec python3 "$BRIDGE_SCRIPT" --agent "$AGENT_CONFIG" $ADDITIONAL_ARGS 178 264 } 179 265 180 266 # Run main function with all arguments