microsoft/chat-directline
Send a message to a Copilot Studio agent via DirectLine v3. Use for agents with no auth or manual auth. Requires a token endpoint URL or DirectLine secret.
npx skills add https://github.com/microsoft/skills-for-copilot-studio --skill chat-directline
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).
--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>"
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 |
Take microsoft/chat-directline from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.