Example Flows
Four end-to-end user stories showing Direktor nodes driven from Claude Desktop. Each example includes the Claude Desktop prompt, the tool calls that fire under the hood, and what the agent produces.
1. “Upload this document to X for me”
You’ve finished a blog post, exported the LinkedIn-friendly summary as a PDF, and want to post it to X with a thread.
You (in Claude Desktop):
“@direktor-cmo take this PDF and post a thread on X summarizing the top three takeaways, with a link back to the full blog. The blog URL is https://openfactory.tech/blog/2026-04-20/attestation . Attach PDF:
openfactory-attestation-blog.pdf.”
Under the hood:
- Claude Desktop calls
list_skills()on the CMO node. - Sees that
ad-campaignsandmarket-companyexist but nothing specifically for post a thread on X. The CMO will best-effort this with askill_learnedevent at the end. - Claude Desktop calls:
do( message="Post a thread on X summarizing the top three takeaways from the attached PDF. Include the blog link https://openfactory.tech/blog/2026-04-20/attestation. Match our existing X voice (check recent posts for tone).", attachments=[{"name": "openfactory-attestation-blog.pdf", "content_base64": "<bytes>"}] ) - The CMO agent stages the PDF, opens Firefox inside its desktop VM, navigates to X, reads the PDF to extract takeaways, drafts the thread, matches tone against recent posts, publishes, captures the post URL.
- Agent streams progress: “reading PDF → drafting 3-post thread → signing into X → posting → captured URL”.
- Final return:
{"status": "ok", "posts": [{"url": "https://x.com/...", "text": "..."}, ...]}. - A
skill_learnedevent fires — the system persists a newpost-thread-to-xskill for future invocations.
You see in Claude Desktop:
- The thread URLs (three posts in the thread).
- A confirmation that the CMO node’s activity timeline has the full trace.
- The next time you ask, the CMO uses the newly-learned skill and is faster.
2. “Download all my statements from Wells Fargo”
You need to pull quarterly statements for tax prep. No shipping skill for this exists.
You (in Claude Desktop):
“@direktor-personal-assistant download my last 4 quarters of statements from my Wells Fargo account. Save them to a Google Drive folder called ‘Tax 2026 Q1’. Credentials are in the workspace secrets as
wf_userandwf_password.”
Under the hood:
list_skills()— no matching skill.do("...")— the Personal Assistant best-efforts it:- Reads the workspace secrets (scoped to this node).
- Opens Firefox → Wells Fargo → signs in.
- Navigates to Statements & Documents → Quarterly Statements.
- Downloads 4 PDFs.
- Opens Google Drive → creates
Tax 2026 Q1folder. - Uploads the 4 PDFs.
- 2FA: if Wells Fargo prompts for a code, the agent pauses and asks you (via
request_approval).
- Final return: a list of the 4 drive URLs.
skill_learnedfires — next time you say this, the agent has a workbook.
You see in Claude Desktop:
- A pause if 2FA was required, with a prompt to enter the code.
- Four Google Drive URLs.
- A note that a new
download-wf-statementsskill was persisted — visible at/skillsin your workspace.
3. “What did my CMO do today?”
Check-in: you woke up, had coffee, want a status report before the day starts.
You (in Claude Desktop):
“@direktor-cmo what did you do yesterday and what’s on deck for today?”
Under the hood:
- Claude Desktop calls
get_activity(limit=50)to pull yesterday’s events. - Claude Desktop calls
do("summarize what you did yesterday in 5 bullets and tell me what's on deck for today"). - The CMO agent uses the timeline events it was handed + its own daily-plan sheet to produce a crisp summary.
You see in Claude Desktop:
Yesterday:
- Launched Q2 LinkedIn campaign (
Q2-SMB-retail) — $3k budget, live.- Drafted 3 blog posts for the engineering blog — awaiting CTO review.
- Shipped 12 cold outbound emails to SMB retail VP Ops personas — 2 replies so far.
- Flagged CTR decay on last week’s Google campaign → paused.
- Pulled weekly metrics, filed synthesis report.
Today:
- Follow up on the 2 outbound replies (book calls if interested).
- Pull Day-1 metrics on the new LinkedIn campaign; adjust if off-pace.
- Propose Q3 content calendar to CEO for approval by 4pm.
- Handoff Q2 positioning deck to Sales.
4. “Ask my CTO to review this plan”
You’re in the middle of drafting something with your CMO and you need a sanity check from another node.
You (in Claude Desktop):
“@direktor-cmo here’s a draft launch plan (attached). Ask the CTO to review it for technical feasibility and get back to me with their comments.”
Under the hood:
- Claude Desktop calls
list_peers()on the CMO to confirm the CTO exists and get itsrole_id(executive-office-cto). - Claude Desktop calls:
do( message="Send the attached launch plan to the CTO for technical feasibility review. Ask for specific comments on: (1) integration timeline, (2) infrastructure cost, (3) any blockers that would push launch past June 15. Report back with their feedback within 4 hours.", attachments=[{"name": "launch-plan-draft.md", "content_base64": "..."}] ) - The CMO agent:
- Reads the plan.
- Calls
send_message_to_peer('cto', <plan + questions>). - The CTO agent picks up the message on its next turn, reviews, replies.
- The CMO agent waits for the response (checking inbox on its schedule).
- Summarizes the CTO’s feedback back to you.
You see in Claude Desktop:
- A progress stream: “sent to CTO → CTO acknowledged → CTO reviewing → CTO replied with feedback”.
- Final return: CTO’s feedback distilled into the three requested areas.
- Both nodes’ activity timelines now show the exchange (audit trail intact).
Pattern summary
| Prompt type | Typical tool sequence |
|---|---|
| Simple action | do(message) |
| Action with skill lookup | list_skills() → do(message) |
| Status check | get_activity(limit=N) |
| Cross-node delegation | list_peers() → do(...) with peer role name in the message |
| File upload | do(message, attachments=[...]) |
Claude Desktop’s assistant figures this out automatically. You don’t need to name the tools — just describe the task.