Outlook Plus
Analysis
This skill appears to implement the advertised Outlook integration, but it grants persistent, broad mail/calendar authority and exposes send/delete/update actions without clear approval guardrails.
Findings (5)
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
Checks for instructions or behavior that redirect the agent, misuse tools, execute unexpected code, cascade across systems, exploit user trust, or continue outside the intended task.
./scripts/outlook-mail.sh send <to> <subj> <body> # Send new email ... ./scripts/outlook-mail.sh delete <id> # Move to trash ... ./scripts/outlook-calendar.sh delete <id> # Delete event
The skill exposes high-impact account-mutation commands. Unlike token printing, the artifacts do not show confirmation requirements before sending email or deleting mail/calendar data.
ACCOUNT="$2" ... CONFIG_DIR="$BASE_DIR/$ACCOUNT" ... cat > "$CONFIG_FILE" ... echo "$TOKEN_RESPONSE" > "$CREDS_FILE"
The account name is used directly to build credential file paths, with no validation shown to block slashes or '..' path traversal.
"slug": "outlook", "version": "1.4.0"
The included metadata does not match the supplied registry identity of outlook-plus version 1.9.0, creating a provenance/version consistency gap for a high-privilege skill.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
SCOPES="https://graph.microsoft.com/Mail.ReadWrite https://graph.microsoft.com/Mail.Send https://graph.microsoft.com/Calendars.ReadWrite offline_access"
These delegated Microsoft Graph scopes allow reading and modifying mail, sending mail, modifying calendars, and refreshing access without repeated sign-in.
Checks for exposed credentials, poisoned memory or context, unclear communication boundaries, or sensitive data that could leave the user's control.
body: (if .body.contentType == "html" then (.body.content | gsub("<[^>]*>"; "") ... | .[0:2000]) else .body.content[0:2000] end)The script retrieves email body content into the agent-visible output. This is expected for an email skill, but email content is private and may contain untrusted instructions.
