Skip to content

How to Send Messages

This guide covers different patterns for sending messages to agents via cyberian.

Fire-and-Forget Messages

Problem: You want to send a message without waiting for a response.

Solution:

cyberian message "Your prompt here"

The command returns immediately. The agent processes the message asynchronously.

When to use:

  • Quick commands that don't need immediate feedback
  • Starting long-running tasks
  • Queueing multiple messages

Example:

# Start a long research task
cyberian message "Research quantum computing and write a comprehensive report to report.md"

# Check later
cyberian messages --last 1

Synchronous Messages

Problem: You want to wait for the agent's response before continuing.

Solution:

cyberian message "What is 2 + 2?" --sync

This polls the server until the agent responds, then returns the last agent message.

Options:

# Custom timeout (default: 60 seconds)
cyberian message "Complex task" --sync --timeout 300

# Custom poll interval (default: 0.5 seconds)
cyberian message "Quick task" --sync --poll-interval 0.1

When to use:

  • You need the response before proceeding
  • Scripting that depends on agent output
  • Interactive sessions

Example:

# Get answer and use it
ANSWER=$(cyberian message "What is the capital of France?" --sync)
echo "Answer: $ANSWER"

Custom Server Location

Problem: You need to connect to a server on a different host/port.

Solution:

# Different port
cyberian message "Hello" --port 8080

# Different host
cyberian message "Hello" --host example.com --port 3284

# Using shorthand
cyberian message "Hello" -H example.com -P 8080

Example:

# Connect to remote server
cyberian message "Check system status" \
  --host agent.mycompany.com \
  --port 9000 \
  --sync

Message Types

Problem: You need to send non-user messages (system, assistant, etc.).

Solution:

# User message (default)
cyberian message "Hello"

# System message
cyberian message "You are a helpful assistant" --type system

# Using shorthand
cyberian message "Context info" -t system

When to use:

  • Setting context with system messages
  • Simulating multi-turn conversations
  • Testing agent behavior with different message types

Handling Timeouts

Problem: The agent takes longer than expected and times out.

Solution:

# Increase timeout for long-running tasks
cyberian message "Perform extensive analysis" --sync --timeout 600

# Or use fire-and-forget and poll manually
cyberian message "Long task"
sleep 10
cyberian status
cyberian messages --last 1

Example:

# Long research with custom timeout
cyberian message "Deep research on AI safety" \
  --sync \
  --timeout 1800 \
  --poll-interval 2.0

Error Handling in Scripts

Problem: You need to handle errors gracefully in bash scripts.

Solution:

#!/bin/bash

# Send message and capture exit code
if cyberian message "Test" --sync --timeout 30; then
  echo "Success!"
  cyberian messages --last 1
else
  echo "Error: Agent timed out or failed"
  exit 1
fi

Robust example:

#!/bin/bash
set -e  # Exit on error

# Check server is up
if ! cyberian status > /dev/null 2>&1; then
  echo "Server not running, starting..."
  cyberian server start claude --skip-permissions
  sleep 5
fi

# Send message with timeout
if cyberian message "Your task" --sync --timeout 120; then
  echo "Task completed"
else
  echo "Task failed or timed out"
  exit 1
fi

Batch Message Sending

Problem: You need to send multiple messages in sequence.

Solution:

# Sequential tasks
cyberian message "Task 1: Research topic X" --sync
cyberian message "Task 2: Summarize findings from Task 1" --sync
cyberian message "Task 3: Create presentation from summary" --sync

Better solution: Use workflows for complex multi-step tasks:

# tasks.yaml
name: batch-tasks
subtasks:
  task1:
    instructions: "Research topic X. COMPLETION_STATUS: COMPLETE"
  task2:
    instructions: "Summarize findings. COMPLETION_STATUS: COMPLETE"
  task3:
    instructions: "Create presentation. COMPLETION_STATUS: COMPLETE"
cyberian run tasks.yaml

Message Output Formatting

Problem: You want to extract just the text response.

Solution:

# Sync mode returns just the agent's text
RESPONSE=$(cyberian message "Question?" --sync)
echo "$RESPONSE"

# Or parse JSON from messages command
cyberian messages --last 1 --format json | jq -r '.[0].content'

Example:

# Get answer and save to file
cyberian message "Explain quantum entanglement" --sync > explanation.txt

# Use in another command
SUMMARY=$(cyberian message "Summarize: $(cat data.txt)" --sync)
echo "$SUMMARY" > summary.txt

Rate Limiting

Problem: You need to control message rate to avoid overwhelming the agent.

Solution:

# Send messages with delays
for msg in "Task 1" "Task 2" "Task 3"; do
  cyberian message "$msg"
  sleep 5  # Wait 5 seconds between messages
done

See Also