From copilot-studio
Sends utterances to Copilot Studio agents via DirectLine v3 REST API. Handles no-auth/manual-auth agents, multi-turn conversations, sign-in flows, and token/conversation management.
How this skill is triggered — by the user, by Claude, or both
Slash command
/copilot-studio:chat-directline <utterance><utterance>copilot-studio-testThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Send a single utterance to a published agent via the DirectLine v3 REST API. Use this for agents with **no authentication** (authenticationmode 1) or **manual authentication** (authenticationmode 3).
Send a single utterance to a published agent via the DirectLine v3 REST API. Use this for agents with no authentication (authenticationmode 1) or manual authentication (authenticationmode 3).
Run the script with --token-endpoint (from detect-mode output) and the utterance from $ARGUMENTS:
node ${CLAUDE_SKILL_DIR}/../../scripts/chat-with-agent.bundle.js \
--token-endpoint "<tokenEndpoint>" "<utterance>"
If the user provided a DirectLine secret instead:
node ${CLAUDE_SKILL_DIR}/../../scripts/chat-with-agent.bundle.js \
--directline-secret "<secret>" "<utterance>"
Parse the JSON output from stdout.
status: "ok"){
"status": "ok",
"protocol": "directline",
"utterance": "hello",
"conversation_id": "abc123-XYZ",
"directline_token": "eyJ...",
"watermark": "3",
"start_activities": [ ... ],
"activities": [ ... ]
}
Display the agent's response from the activities array:
type === "message" — show textsuggestedActions.actions arrayattachments with contentType === "application/vnd.microsoft.card.adaptive"Save conversation_id, directline_token, and watermark — needed for follow-ups.
status: "signin_required")The agent requires the user to authenticate (manual auth agents):
{
"status": "signin_required",
"protocol": "directline",
"signin_url": "https://...",
"resume_command": "...",
"followup_command": "..."
}
signin_url to the user, ask for the validation codenode ${CLAUDE_SKILL_DIR}/../../scripts/chat-with-agent.bundle.js <resume_command with code substituted>node ${CLAUDE_SKILL_DIR}/../../scripts/chat-with-agent.bundle.js <followup_command>Use resume_command and followup_command exactly as given.
Pass all three values from the previous response:
node ${CLAUDE_SKILL_DIR}/../../scripts/chat-with-agent.bundle.js \
--token-endpoint "<url>" "<follow-up>" \
--conversation-id "<id>" --directline-token "<token>" --watermark "<watermark>"
directline_token is bound to the conversation — do NOT fetch a new token. Always reuse from the previous response.watermark tracks seen activities — pass it to avoid duplicates.--conversation-id).| Error | Cause | Resolution |
|---|---|---|
Token endpoint rejected | Agent not published or wrong URL | Verify agent is published |
Conversation not found | Token expired (>30 min) | Start a new conversation |
npx claudepluginhub microsoft/skills-for-copilot-studio --plugin copilot-studioChats with DirectLine agents using explicit token endpoint or secret via bundled Node.js scripts. Supports multi-turn conversations. Deprecated; use /copilot-studio:chat-with-agent.
Guides using Microsoft 365 Agents SDK TypeScript packages like @microsoft/agents-hosting and @microsoft/agents-hosting-express to build multichannel agents for Teams, Copilot Studio, and web chat, including Azure setup and env vars.
Builds multichannel Python agents for Teams, M365, Copilot Studio using aiohttp hosting, AgentApplication routing, streaming responses, and MSAL auth.