Best for
- Use this CLI for SOC work against an Abnormal Security tenant: triaging the email threat feed, confirming remediations, investigating account-takeover cases and vendor email compromise, pulling employee identity and log…
Servosity/msp-skills/skills/abnormal/SKILL.md
The full Abnormal Security REST API as an agent-ready CLI - with a local threat store, ranked SOC triage, and one-shot reporting no SOAR pack offers. Trigger phrases: `triage abnormal threats`, `remediate a phishing campaign in abnormal`, `abnormal email threat report`, `check account takeover risk for an employee`, `vendor email compromise check`, `use abnormal security`, `run abnormal-cli`.
Decision brief
The full Abnormal Security REST API as an agent-ready CLI - with a local threat store, ranked SOC triage, and one-shot reporting no SOAR pack offers. Trigger phrases: `triage abnormal threats`, `remediate a phishing campaign in abnormal`, `abnormal email threat report`, `check account takeover risk for an employee`, `vendor email compromise check`, `use abn…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/Servosity/msp-skills --skill "skills/abnormal"Inspect the Agent Skill "abnormal" from https://github.com/Servosity/msp-skills/blob/30e109db0872897de0b88adb38d81d4c292da3ae/skills/abnormal/SKILL.md at commit 30e109db0872897de0b88adb38d81d4c292da3ae. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Mint a REST API token in the Abnormal portal under Settings → Integrations → Abnormal REST API, then export it as ABNORMALAPITOKEN. Abnormal enforces IP allowlisting on the integration: add your egress IP in the same portal screen or every call returns 403. EU tenants must point…
This skill drives the abnormal-cli binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first:
Use this CLI for SOC work against an Abnormal Security tenant: triaging the email threat feed, confirming remediations, investigating account-takeover cases and vendor email compromise, pulling employee identity and login context, and producing security reports from the dashboar…
Do not use this CLI for: - Quarantining or purging mail directly inside Microsoft 365 mailboxes - Abnormal remediates through its own actions; use Graph or Defender tooling for raw mailbox surgery - Sending or composing email - Changing Abnormal detection policies or integration…
These capabilities aren't available in any other tool for this API.
Permission review
The documentation asks the agent to run terminal commands or scripts.
npx -y @mvanhorn/printing-press-library install abnormal --cli-onlyThe documentation asks the agent to run terminal commands or scripts.
go install github.com/mvanhorn/printing-press-library/library/monitoring/abnormal/cmd/abnormal-cli@latestThe documentation includes network, browsing, or remote request actions.
`abnormal-cli soar` - Fetch all API tokens for the authenticated customer from the Go Token Management Service.The documentation includes sending, uploading, or posting data to a remote service.
| `webhook:<url>` | POST the output body to the URL (`application/json` or `application/x-ndjson` when `--compact`) |The documentation includes network, browsing, or remote request actions.
| `webhook:<url>` | POST the output body to the URL (`application/json` or `application/x-ndjson` when `--compact`) |Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 83/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 15 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
This skill drives the abnormal-cli binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first:
$HOME/.local/bin on macOS/Linux and %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows:
npx -y @mvanhorn/printing-press-library install abnormal --cli-only
abnormal-cli --version$PATH for the agent/runtime that will invoke this skill.If the npx install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.4 or newer). This installs into $GOPATH/bin (default $HOME/go/bin), so add that directory to $PATH instead:
go install github.com/mvanhorn/printing-press-library/library/monitoring/abnormal/cmd/abnormal-cli@latest
If --version reports "command not found" after install, the runtime cannot see the binary directory on $PATH. Do not proceed with skill commands until verification succeeds.
Every threat, case, vendor, employee, and dashboard operation from Abnormal's official API, plus a synced SQLite store that powers a ranked triage queue, joined employee-risk and vendor-risk investigation views, blocking remediate-watch confirmation, and a consolidated report-snapshot for client reporting. The incumbent integrations live inside SOAR and SIEM platforms; this runs in your terminal and your agents.
Use this CLI for SOC work against an Abnormal Security tenant: triaging the email threat feed, confirming remediations, investigating account-takeover cases and vendor email compromise, pulling employee identity and login context, and producing security reports from the dashboard aggregations. It is the right choice whenever an agent needs Abnormal threat or case data in structured form, or needs to act on a threat and verify the action completed.
Do not use this CLI for:
These capabilities aren't available in any other tool for this API.
triage - Surface the newest, highest-severity, still-unremediated threats first so an analyst starts the shift on what actually matters.
Reach for this when asked what email threats need attention now - it returns a ranked queue instead of a flat list.
abnormal-cli triage --since 24h --top 20 --agent
remediate-watch - Remediate a threat or case and block until Abnormal reports the action reached a terminal state, with a typed exit code and receipt.
Use this when a remediation must be confirmed done, not just submitted - exit code 0 means the action completed.
abnormal-cli remediate-watch "threat" 184712ab-6d8b-47b3-89d7-a314efef23ff --timeout 5m
report-snapshot - Pull the key dashboard aggregations - attacks seen, attacks stopped, impersonation breakdowns, trending attacks - into one client-ready table or CSV.
Use this to build a weekly or QBR security report without screenshotting dashboard panels.
abnormal-cli report-snapshot --since 30d --csv
smoke - Verify token, base URL (US/EU), and IP allowlist reachability using Abnormal's vendor-supplied test payloads - without touching real tenant data.
Run this first when onboarding a tenant or rotating a token to prove connectivity before real queries.
abnormal-cli smoke
employee-risk - One account-takeover risk picture per employee: profile, Genome identity analysis, 30-day login pattern, and open cases naming them.
Use this when investigating a suspected account takeover to scope identity and blast radius in one call.
abnormal-cli employee-risk [email protected] --agent
vendor-risk - One vendor-email-compromise picture per vendor: details, recent activity, and open vendor cases.
Use this when a vendor's emails look suspicious to see their whole relationship and case history at once.
abnormal-cli vendor-risk acme-supplies.com --agent
abuse-mailbox - Manage abuse mailbox
abnormal-cli abuse-mailbox - Get a list of messages submitted to AI Security Mailbox (formerly known as Abuse Mailbox) that were not analyzed.abusecampaigns - Manage abusecampaigns
abnormal-cli abusecampaigns retrieve - Get a list of campaigns submitted to AI Security Mailbox (formerly known as Abuse Mailbox)abnormal-cli abusecampaigns retrieve-2 - Get details of an abuse campaignaggregations - Manage aggregations
abnormal-cli aggregations attack-frequency-retrieve - Retrieve the frequency of specific attack types for a given period.abnormal-cli aggregations attack-stopped-retrieve - Retrieve aggregated counts of distinct attack types that were successfully stoppedabnormal-cli aggregations attack-strategy-breakdown-retrieve - Retrieve the breakdown of attacks based on their strategy.abnormal-cli aggregations attack-vector-breakdown-retrieve - Retrieve the breakdown of attacks based on their vectors.abnormal-cli aggregations attacker-origin-retrieve - Retrieve the origin countries of attackers for a given period.abnormal-cli aggregations dashboard-summary-retrieve - Retrieve an aggregated summary of multiple security data points for the dashboard.abnormal-cli aggregations most-impersonated-employee-non-vip-retrieve - Retrieve the most impersonated non-VIP employees for a specified period.abnormal-cli aggregations most-impersonated-employee-retrieve - Retrieve the most impersonated employees for a specified period.abnormal-cli aggregations most-impersonated-employee-vip-retrieve - Retrieve the most impersonated VIP employees for a specified period.abnormal-cli aggregations most-impersonated-vendor-retrieve - Retrieve a list of the most impersonated vendors in attacks.abnormal-cli aggregations recipient-employees-non-vip-retrieve - Retrieve a list of the non-VIP employees who were recipients of attacks, based on their job titles.abnormal-cli aggregations recipient-employees-retrieve - Retrieve a list of the employees who were recipients of attacks, based on their job titles.abnormal-cli aggregations recipient-employees-vip-retrieve - Retrieve a list of the VIP employees who were recipients of attacks, based on their job titles.abnormal-cli aggregations sender-impersonation-breakdown-retrieve - Retrieve a breakdown of attacks based on sender impersonation.abnormal-cli aggregations trending-attacks-retrieve - Retrieve the list of trending attacks for a specified period.api_resources - Manage api resources
abnormal-cli api-resources resources-actions-create - Execute a specific action on a resource (refresh or validate). Returns 202 Accepted with action ID for tracking.abnormal-cli api-resources resources-create-create - Create a new resource with the specified name and optional description. Returns 201 Created with resource ID.abnormal-cli api-resources resources-retrieve - Retrieve a paginated list of resources with optional filtering using pageSize and pageNumber query parameters.abnormal-cli api-resources resources-retrieve-2 - Retrieve detailed information about a specific resource by its UUID.abnormal-cli api-resources resources-update-partial-update - Partially update an existing resource's fields (PATCH). Provide only the fields that need updating.auditlogs - Manage auditlogs
abnormal-cli auditlogs - Gets a list of Audit Logs for Portalcases - APIs to manage Abnormal Cases
abnormal-cli cases create - Account Takeover license is required to call this endpoint. Use this to update the status of an abnormal case.abnormal-cli cases retrieve - Get a list of Abnormal cases identified by Abnormal Securityabnormal-cli cases retrieve-2 - Account Takeover license is required to call this endpoint.detection360 - Manage detection360
abnormal-cli detection360 reports-create - Use this to report a detection misclassification judgement by Abnormal Security.abnormal-cli detection360 reports-retrieve - Get a list of Detection 360 reports that you have submitted and view corresponding details for each caseemail_search - Manage email search
abnormal-cli email-search search-activities-retrieve - List activity logs for search and remediation operations. Optionally filter by tenant_ids query parameter (e.g., ?abnormal-cli email-search search-activities-status-retrieve - Get detailed status of a specific activity including remediation results.abnormal-cli email-search search-create - Search for email messages across Abnormal and Quarantine sources. Optionally filter by tenant_ids in the request body.abnormal-cli email-search search-messages-attachments-download-retrieve - Download an email attachment for a given message.abnormal-cli email-search search-messages-eml-retrieve - Download the EML file for a specific message by cloud_message_id. Returns the EML file content as message/rfc822 format.abnormal-cli email-search search-remediate-create - Remediate email messages by deleting, moving, or submitting them for review.employee - Manage employee
abnormal-cli employee <email_address> - Get employee informationmessages - API to manage message details
roles - API to retrieve roles from RBAC system
abnormal-cli roles - Fetch all roles for an account from RBAC system.security-settings - API to retrieve security settings including session timeout configuration
abnormal-cli security-settings - Fetch security settings for an account.soar - Manage soar
abnormal-cli soar - Fetch all API tokens for the authenticated customer from the Go Token Management Service.spm-v2 - Manage spm v2
abnormal-cli spm-v2 posture-catalog-retrieve - Get posture catalog containing all available abnormal supported posturesabnormal-cli spm-v2 postures-query-create - Get a list of all tenant posturesabnormal-cli spm-v2 postures-retrieve - Get detailed information about a specific security posture evaluationabnormal-cli spm-v2 postures-timeline-retrieve - Get timeline of events for a specific security postureabnormal-cli spm-v2 reports-summary-retrieve - Get summary report for all posturesabnormal-cli spm-v2 workflow-logs-raw-json-retrieve - Get raw JSON for a workflow logthreats - APIs to manage threats notified in the Abnormal Threat Log
abnormal-cli threats create - Use this to remediate or unremediate a threat.abnormal-cli threats retrieve - Get a list of threatsabnormal-cli threats retrieve-2 - Get details of a threatthreats-export - Manage threats export
abnormal-cli threats-export - Download data from Threat Log in .csv formaturl-rewrite - Manage url rewrite
abnormal-cli url-rewrite - Retrieve paginated click and clickthrough events for URL rewrites.users - API to retrieve users from RBAC system
abnormal-cli users - Retrieves users for an account from the RBAC user management system.vendor-cases - Manage vendor cases
abnormal-cli vendor-cases retrieve - Get a list of vendor cases.abnormal-cli vendor-cases retrieve-2 - Get details of a vendor casevendors - API to manage Vendorbase and threats from Vendors
abnormal-cli vendors - Get a list of vendors your organization has interacted withWhen you know what you want to do but not which command does it, ask the CLI directly:
abnormal-cli which "<capability in your own words>"
which resolves a natural-language capability query to the best matching command from this CLI's curated feature index. Exit code 0 means at least one match; exit code 2 means no confident match - fall back to --help or use a narrower query.
abnormal-cli triage --since 24h --top 20 --agent --select items.threatId,items.attackType,items.score
Ranked unremediated threats from the local store, narrowed to the three fields an agent needs to decide what to open first.
abnormal-cli remediate-watch "threat" 184712ab-6d8b-47b3-89d7-a314efef23ff --timeout 5m
Submits the remediation and blocks until Abnormal reports a terminal action state - exit 0 means confirmed done.
abnormal-cli employee-risk [email protected] --agent
Profile, Genome identity analysis, 30-day logins, and open cases for one employee in a single structured payload.
abnormal-cli report-snapshot --since 30d --csv
The dashboard aggregations consolidated into CSV for pasting straight into a client report.
abnormal-cli vendor-risk acme-supplies.com --agent
Vendor details, recent activity, and open vendor cases joined into one investigation view.
Mint a REST API token in the Abnormal portal under Settings → Integrations → Abnormal REST API, then export it as ABNORMAL_API_TOKEN. Abnormal enforces IP allowlisting on the integration: add your egress IP in the same portal screen or every call returns 403. EU tenants must point the CLI at the EU host: export ABNORMAL_BASE_URL=https://eu.rest.abnormalsecurity.com/v1. You can also store the token with abnormal-cli auth set-token <token> and inspect it with abnormal-cli auth status.
Run abnormal-cli doctor to verify setup.
Add --agent to any command. Expands to: --json --compact --no-input --no-color --yes.
Pipeable - JSON on stdout, errors on stderr
Filterable - --select keeps a subset of fields. Dotted paths descend into nested structures; arrays traverse element-wise. Critical for keeping context small on verbose APIs:
abnormal-cli abuse-mailbox --agent --select id,name,status
Previewable - --dry-run shows the request without sending
Offline-friendly - sync/search commands can use the local SQLite store when available
Non-interactive - never prompts, every input is a flag
Explicit retries - use --idempotent only when an already-existing create should count as success
Commands that read from the local store or the API wrap output in a provenance envelope:
{
"meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
"results": <data>
}
Parse .results for data and .meta.source to know whether it's live or local. A human-readable N results (live) summary is printed to stderr only when stdout is a terminal AND no machine-format flag (--json, --csv, --compact, --quiet, --plain, --select) is set - piped/agent consumers and explicit-format runs get pure JSON on stdout.
When you (or the agent) notice something off about this CLI, record it:
abnormal-cli feedback "the --since flag is inclusive but docs say exclusive"
abnormal-cli feedback --stdin < notes.txt
abnormal-cli feedback list --json --limit 10
Entries are stored locally at ~/.local/share/abnormal-cli/feedback.jsonl. They are never POSTed unless ABNORMAL_FEEDBACK_ENDPOINT is set AND either --send is passed or ABNORMAL_FEEDBACK_AUTO_SEND=true. Default behavior is local-only.
Write what surprised you, not a bug report. Short, specific, one line: that is the part that compounds.
Every command accepts --deliver <sink>. The output goes to the named sink in addition to (or instead of) stdout, so agents can route command results without hand-piping. Three sinks are supported:
| Sink | Effect |
|---|---|
stdout | Default; write to stdout only |
file:<path> | Atomically write output to <path> (tmp + rename) |
webhook:<url> | POST the output body to the URL (application/json or application/x-ndjson when --compact) |
Unknown schemes are refused with a structured error naming the supported set. Webhook failures return non-zero and log the URL + HTTP status on stderr.
A profile is a saved set of flag values, reused across invocations. Use it when a scheduled agent calls the same command every run with the same configuration - HeyGen's "Beacon" pattern.
abnormal-cli profile save briefing --json
abnormal-cli --profile briefing abuse-mailbox
abnormal-cli profile list --json
abnormal-cli profile show briefing
abnormal-cli profile delete briefing --yes
Explicit flags always win over profile values; profile values win over defaults. agent-context lists all available profiles under available_profiles so introspecting agents discover them at runtime.
| Code | Meaning |
|---|---|
| 0 | Success |
| 2 | Usage error (wrong arguments) |
| 3 | Resource not found |
| 4 | Authentication required |
| 5 | API error (upstream issue) |
| 7 | Rate limited (wait and retry) |
| 10 | Config error |
Parse $ARGUMENTS:
help, or --help → show abnormal-cli --help outputinstall → ends with mcp → MCP installation; otherwise → see Prerequisites above--agent)go install github.com/mvanhorn/printing-press-library/library/monitoring/abnormal/cmd/abnormal-mcp@latest
claude mcp add abnormal-mcp -- abnormal-mcp
claude mcp listwhich abnormal-cli
If not found, offer to install (see Prerequisites at the top of this skill).--agent flag:
abnormal-cli <command> [subcommand] [args] --agent
abnormal-cli <command> --help.Alternatives
MoizIbnYousaf/marketing-cli
Backlink + distribution checklist that expands a site's KD ceiling beyond what on-page work alone can earn. Use when the user mentions 'backlinks', 'off-page SEO', 'directory submissions', 'guest posts', 'outreach targets', 'link building', 'submit to directories', 'get listed in listicles', 'Product Hunt launch backlinks', or asks 'how do I get more domain authority'. Generates a prioritized, researched target list across directories, listicles, and guest-post candidates — does NOT submit anyth
github/awesome-copilot
Use this skill when the user asks to analyze, tear down, or reverse-engineer a competitor's paid ads. Trigger for prompts like "what ads is [competitor] running", "tear down their ad strategy", "competitor ad analysis", "find ad angles we haven't tried", or "reverse-engineer their paid funnel". Do not trigger for organic/SEO competitor research or website positioning analysis.
MoizIbnYousaf/marketing-cli
Build an organic-traffic operating system for any site or app: a multi-phase, resumable engine that ships programmatic landing pages (alternatives, comparisons, use-cases, playbooks) on top of real keyword research. Use when the user says 'SEO machine', 'build organic traffic', 'rank on Google', 'we need traffic', 'alternatives pages', 'comparison pages', '/for/ pages', 'programmatic SEO', or 'build an SEO engine'. Distinct from `seo-audit` (one-off diagnostic) and `seo-content` (single-article
K-Dense-AI/scientific-agent-skills
Create professional infographics using Nano Banana Pro AI with smart iterative refinement. Uses Gemini 3.6 Flash for quality review. Integrates research-lookup and web search for accurate data. Supports 10 infographic types, 8 industry styles, and colorblind-safe palettes.