Send messages to other agents on your server. Use when you need to communicate with, query, or delegate tasks to another agent.
67
80%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
This skill enables you to send messages to other agents on the same Letta server using the thread-safe conversations API.
The target agent CANNOT:
The target agent CAN:
Important: This skill is for communication with other agents, not delegation of local work. The target agent runs in their own environment and cannot interact with your codebase.
Need local access? If you need the target agent to access your local environment (read/write files, run commands), use the Agent tool instead to deploy them as a subagent:
Agent({
agent_id: "agent-xxx", // Deploy this existing agent
subagent_type: "general-purpose", // read-write access to your local tools
prompt: "Look at the code in src/ and tell me about the architecture"
})This gives the agent access to your codebase while running as a subagent.
If you don't have a specific agent ID, use these skills to find one:
Load the finding-agents skill to search for agents:
letta agents list --query "agent-name"
letta agents list --tags "origin:letta-code"Load the searching-messages skill to find which agent worked on something:
letta messages search --query "topic" --all-agentsResults include agent_id for each matching message.
letta -p --from-agent $LETTA_AGENT_ID --agent <id> "message text"When no --environment is specified, the target agent will run in the same
environment as the caller agent.
To route the target agent turn through a specific remote/local environment:
letta -p --from-agent $LETTA_AGENT_ID \
--agent <id> \
--environment <name-or-device-id-or-connection-id> \
"message text"Arguments:
| Arg | Required | Description |
|---|---|---|
--agent <id> | Yes | Target agent ID to message |
--from-agent <id> | Yes | Sender agent ID (injects agent-to-agent system reminder) |
--environment <selector> | No | Route through an online environment by connection name, device ID, or connection ID |
"message text" | Yes | Message body (positional after flags) |
Example:
letta -p --from-agent $LETTA_AGENT_ID \
--agent agent-abc123 \
"What do you know about the authentication system?"Response:
{
"conversation_id": "conversation-xyz789",
"response": "The authentication system uses JWT tokens...",
"agent_id": "agent-abc123",
"agent_name": "BackendExpert"
}letta -p --from-agent $LETTA_AGENT_ID --conversation <id> "message text"Add --environment <selector> to continue the conversation on a specific environment.
letta environments list --online-only
# alias:
letta envs list --online-onlyUse connectionName, deviceId, or connectionId from the JSON output as the
--environment selector. If a name is ambiguous, prefer deviceId or
connectionId. In environments list, the current local runtime is marked with
"isCurrent": true.
To force the target agent onto the current registered Letta Code environment,
resolve the current environment and pass its connectionId:
CURRENT_ENV=$(letta environments current | jq -r .connectionId)
letta -p --from-agent $LETTA_AGENT_ID \
--agent agent-abc123 \
--environment "$CURRENT_ENV" \
"Run on my same machine/environment."Omit --environment when you want the target agent to run in the same
environment as the caller agent.
Arguments:
| Arg | Required | Description |
|---|---|---|
--conversation <id> | Yes | Existing conversation ID |
--from-agent <id> | Yes | Sender agent ID (injects agent-to-agent system reminder) |
"message text" | Yes | Follow-up message (positional after flags) |
Example:
letta -p --from-agent $LETTA_AGENT_ID \
--conversation conversation-xyz789 \
"Can you explain more about the token refresh flow?"agent_id, conversation_id, and environment.source so you can continue the same conversation/runtime. Environment-routed turns also include environment.id, connection_id, device_id, and name.searching-messages skill with letta messages list --agent <id> targeting the other agentWhen you send a message, the target agent receives it with a system reminder:
<system-reminder>
This message is from "YourAgentName" (agent ID: agent-xxx), an agent currently running inside the Letta Code CLI (docs.letta.com/letta-code).
The sender will only see the final message you generate (not tool calls or reasoning).
If you need to share detailed information, include it in your response text.
</system-reminder>This helps the target agent understand the context and format their response appropriately.
Agent-to-agent conversations (started via --from-agent) are created hidden on the target agent. They don't appear in the target's default conversation list in the ADE, so automated inter-agent chatter doesn't clutter the UI.
To inspect them:
archive_status=archived (or all)letta messages transcript --conversation <id>conversation_id returned when you sent the message is the handle you needContinuing a hidden conversation with --conversation <id> keeps it hidden — only archive status is affected, messaging still works normally.
051b47f
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.