Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/skills/builtin/messaging-agents/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ letta -p --from-agent $LETTA_AGENT_ID \
"What do you know about the authentication system?"
```

**Response (JSON format with `--output json`):**
**Response (JSON format with `--output-format json`):**
```json
{
"type": "result",
Expand Down Expand Up @@ -170,7 +170,7 @@ letta -p --from-agent $LETTA_AGENT_ID \
- Text-mode scripts return only the **final assistant message** (not tool calls, reasoning, or metadata)
- JSON and stream-json responses include `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`.
- The target agent may use tools, think, and reason - but you only see their final response
- To see the full conversation transcript (including tool calls), use `letta messages list --agent <id>` targeting the other agent
- To see the full conversation transcript (including tool calls), use `letta messages transcript --conversation <id>` (or `letta messages list --agent <id>`) targeting the other agent

## How It Works

Expand Down
41 changes: 41 additions & 0 deletions src/skills/messaging-agents.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { describe, expect, test } from "bun:test";
import { readFileSync } from "node:fs";
import { join } from "node:path";
import { CLI_FLAG_CATALOG } from "@/cli/args";

const skill = readFileSync(
join(
process.cwd(),
"src",
"skills",
"builtin",
"messaging-agents",
"SKILL.md",
),
"utf8",
);

// Headless flags the skill documents for `letta -p` messaging. Subcommand
// flags (agents/messages/computers) are parsed by their own subcommand
// parsers and are not part of the main CLI flag catalog.
const HEADLESS_FLAGS_DOCUMENTED = [
"from-agent",
"agent",
"conversation",
"computer",
"output-format",
] as const;

describe("messaging-agents skill", () => {
test("documents headless flags the CLI parser accepts", () => {
for (const flag of HEADLESS_FLAGS_DOCUMENTED) {
expect(flag in CLI_FLAG_CATALOG).toBe(true);
expect(skill).toContain(`--${flag}`);
}
});

test("uses the real headless JSON output flag", () => {
expect(skill).toContain("--output-format json");
expect(skill).not.toContain("--output json");
});
});