Agent skill · Audited from source

xurl

skill · xdevplatform/xurlMIT licenceAudited 21 Oct 2026 · source ce13179f57fc

★ 1,361pushed 21 days ago
!CAUTIONGrade B · 89/100 · 10 findings · ce13179
1,361repo stars · whole xdevplatform/xurl

Is it safe? With care — CAUTION, grade B (89/100). We read this skill's source at commit ce13179f57fc and observed network and shell access and no hard-coded secrets. The audit raised 10 findings, 1 critical or high. What it does: A curl-like CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, send or read end-to-end encrypted…

Ask an AI about this pageGChatGPTCClaudePPerplexityGeGeminiXGrok
More
Cite

Cite this page

ModelsAtlas. “xurl (xdevplatform/xurl)”. Retrieved 21 Oct 2026. https://modelsatlas.com/skills/xdevplatform/xurl

Trust audit

Audit 0.4.1 · source read 21 Oct 2026

Trust score89/100!CAUTION B
0 critical1 high0 medium7 low2 info

CAUTION means the audit found things worth knowing before you trust this skill. Grade B is shared by 13,985 of 14,816 audited skills.

What the source does

  • FilesystemNone observedNo reads or writes in the source
  • NetworkDeclared1 observation
  • ShellDeclared2 observations
  • DependenciesPinnedNothing floats
  • SecretsNone foundNo keys in source

Five audit layers

LayerWhat we checkResultFindings
L0 ProvenanceRepo owner, licence, archive status, activityPASS1
L1 Static sourceSecrets, path traversal, supply chain, hidden codePASS5
L2 InstructionsPrompt injection, authority framing, hidden directivesFAIL4
L3 InventoryThe files and declarations match the sourcePASS0
L4 SandboxRun in isolation and watch behaviourSKIPPED why0

Gates applied: no behavioural pass.

Findings (10)

HIGHPrompt injectionprompt.credential_read · SKILL.md:28
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
- Never run `xurl token` in agent/LLM sessions: it prints a live OAuth2 access token to stdout, which is a credential and must not enter the LLM context.
Why
asks the agent to read credentials
Fix
—
LOWInventory / provenanceinv.hidden_file · .goreleaser.yaml
F-13 Inventory / provenanceCWE-1104Layer L0
.goreleaser.yaml
Why
hidden member outside the usual dotfiles
Fix
review its purpose
LOWNetwork egressnet.raw_ip · auth/auth_test.go:239
F-04 Network egressCWE-200 · CWE-319Layer L1
RedirectURI:        "http://127.0.0.1:7777/callback",
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.raw_ip · auth/auth_test.go:249
F-04 Network egressCWE-200 · CWE-319Layer L1
assert.Equal(t, "http://127.0.0.1:7777/callback", a.redirectURI)
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.raw_ip · auth/auth_test.go:482
F-04 Network egressCWE-200 · CWE-319Layer L1
redirectURI:   "http://127.0.0.1:9090/oauth/callback",
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.raw_ip · cli/mcp_test.go:581
F-04 Network egressCWE-200 · CWE-319Layer L1
b := newMCPBridgeWithIO("http://127.0.0.1:0", a, "", strings.NewReader(""), &bytes.Buffer{})
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.raw_ip · cli/mcp_test.go:590
F-04 Network egressCWE-200 · CWE-319Layer L1
b := newMCPBridgeWithIO("http://127.0.0.1:0", a, "", strings.NewReader(""), &bytes.Buffer{})
Why
No further detail recorded for this rule.
Fix
—
LOWPrompt injectionprompt.transfer_instruction · CHANGELOG.md:35
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
- `xurl chat` — an end-to-end encrypted XChat client. Commands: `keys status|restore|import`, `conversations`, `read`, `send`, `listen`, `download`, `rotate`, `add-members`, `mark-read`, and `typing`.
Why
an instruction to move sensitive data to an outside destination
Fix
remove; a skill never needs the user's secrets off the machine
INFOSupply chainprompt.pipe_to_shell · CHANGELOG.md:67
F-08 Supply chainCWE-829 · CWE-1357Layer L2
- [2026-06-29] `install.sh` now uses `id -u` instead of the bash-only `$EUID` to detect root, so `curl ... | sh` (POSIX/dash) installs to `/usr/local/bin` as root instead of silently falling back to `
Why
No further detail recorded for this rule.
Fix
—
INFOSupply chainprompt.pipe_to_shell · README.md:31
F-08 Supply chainCWE-829 · CWE-1357Layer L2
curl -fsSL https://raw.githubusercontent.com/xdevplatform/xurl/main/install.sh | bash
Why
No further detail recorded for this rule.
Fix
—

Audit 0.4.1 · source sha ce13179f57fc · 21 Oct 2026Report an issue or request a re-scan

Provenance

Who published it, and what the verdict is pinned to

  • Publisherxdevplatform GitHub organizationOwner of the repository this skill is read from
  • Source folderxdevplatform/xurlThe exact folder we audited
  • LicenceMITAs the repository states it
  • Commit pinned for this verdictce13179f57fcA new audit runs when the source changes
  • Repository statusNot archivedLast push 21 days ago
  • Sandboxed runNot runSkills are read, not executed; layer L4 is skipped

What it tells the agent

Full source on GitHub ↗

Its description: A curl-like CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, send or read end-to-end encrypted…

---
name: xurl
description: A curl-like CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, send or read end-to-end encrypted XChat messages, upload media, or interact with any X API v2 endpoint. Supports multiple apps, OAuth 2.0, OAuth 1.0a, and app-only auth.
---

# xurl — Agent Skill Reference

`xurl` is a CLI tool for the X API. It supports both **shortcut commands** (human/agent‐friendly one‐liners) and **raw curl‐style** access to any v2 endpoint. All commands return JSON to stdout.

---

## Prerequisites

This skill requires the `xurl` CLI utility: <https://github.com/xdevplatform/xurl>.

Before using any command you must be authenticated. Run `xurl auth status` to check.

### Secret Safety (Mandatory)

- Never read, print, parse, summarize, upload, or send anything under `~/.xurl/` (or copies of it) to the LLM context.
- `~/.xurl/keys.yml` contains XChat **private encryption keys** — the strictest no-read rule applies.
- Never pass `--pin` inline in agent/LLM sessions (`xurl chat keys restore --pin ...` leaks the recovery PIN to context and shell history). Run `xurl chat keys restore` without the flag so the PIN is prompted without echo, or have the user run it manually.
- Never ask the user to paste credentials/tokens into chat.
- The user must fill `~/.xurl/auth.yml` with required secrets manually on their own machine.
- Do not recommend or execute auth commands with inline secrets in agent/LLM sessions.
- Warn that using CLI secret options in agent sessions can leak credentials (prompt/context, logs, shell history).
- Never use `--verbose` / `-v` in agent/LLM sessions; it can expose sensitive headers/tokens in output.
- Never run `xurl token` in agent/LLM sessions: it prints a live OAuth2 access token to stdout, which is a credential and must not enter the LLM context.
- `xurl mcp` is for configuring an MCP client (it bridges stdio↔HTTP and injects the bearer token); it is not something to invoke directly from an agent/LLM session.
- Sensitive flags that must never be used in agent commands: `--bearer-token`, `--consumer-key`, `--consumer-secret`, `--access-token`, `--token-secret`, `--client-id`, `--client-secret`.
- To verify whether at least one app with credentials is already registered, run: `xurl auth status`.

### Register an app (recommended)

App credential registration must be done manually by the user outside the agent/LLM session.
After credentials are registered, authenticate against the app that holds those credentials:

```bash
xurl auth oauth2 --app APP_NAME
```

You can also run `xurl auth default APP_NAME` first and then use `xurl auth oauth2`.

On a remote/headless machine (no reachable browser callback), add `--headless`: `xurl auth oauth2 --app APP_NAME --headless` prints the authorization URL and reads the pasted redirect URL (or code) back, so no localhost callback is needed.

For multiple pre-configured apps, switch between them:
```bash
xurl auth default prod-app          # set default app
xurl auth default prod-app alice    # set default app + user
xurl --app dev-app /2/users/me      # one-off override
xurl auth apps redirect-uri get prod-app
xurl auth apps redirect-uri set prod-app http://localhost:8080/callback
```

### Other auth methods

Examples with inline secret flags are intentionally omitted. If OAuth1 or app-only auth is needed, the user must run those commands manually outside agent/LLM context.

Tokens are persisted to `~/.xurl/auth.yml` in YAML format (a legacy single-file `~/.xurl` is migrated automatically). Each app has its own isolated tokens and may also store a `redirect_uri`. `REDIRECT_URI` in the environment still takes precedence over the stored app value. Do not read this file (or anything under `~/.xurl/`) through the agent/LLM. Once authenticated, every command below will auto‐attach the right `Authorization` header.

---

## Quick Reference

| Action | Command |
|---|---|
| Post | `xurl post "Hello world!"` |
| Reply | `xurl reply POST_ID "Nice post!"` |
| Quote | `xurl quote POST_ID "My take"` |
| Delete a post | `xurl delete POST_ID` |
| Read a post | `xurl read POST_ID` |
| Search posts | `xurl search "QUERY" -n 10` |
| Who am I | `xurl whoami` |
| Look up a user | `xurl user @handle` |
| List a user's posts | `xurl posts @handle -n 10` |
| Home timeline | `xurl timeline -n 20` |
| Mentions | `xurl mentions -n 10` |
| Like | `xurl like POST_ID` |
| Unlike | `xurl unlike POST_ID` |
| Repost | `xurl repost POST_ID` |
| Undo repost | `xurl unrepost POST_ID` |
| Bookmark | `xurl bookmark POST_ID` |
| Remove bookmark | `xurl unbookmark POST_ID` |
| List bookmarks | `xurl bookmarks -n 10` |
| List likes | `xurl likes -n 10` |
| Follow | `xurl follow @handle` |
| Unfollow | `xurl unfollow @handle` |
| List following | `xurl following -n 20` |
| List followers | `xurl followers -n 20` |
| Block | `xurl block @handle` |
| Unblock | `xurl unblock @handle` |
| Mute | `xurl mute @handle` |
| Unmute | `xurl unmute @handle` |
| Send DM | `xurl dm @handle "message"` |
| List DMs | `xurl dms -n 10` |
| Upload media | `xurl media upload path/to/file.mp4` |
| Media status | `xurl media status MEDIA_ID` |
| **Encrypted Chat (XChat)** | |
| Chat key status | `xurl chat keys status` |
| Restore chat keys | `xurl chat keys restore` (PIN prompted; never pass `--pin` in agent sessions) |
| Import chat keys | `xurl chat keys import` (blob prompted; avoid passing it as an argument) |
| List chat inbox | `xurl chat conversations` |
| Read a conversation | `xurl chat read @handle -n 50` |
| Send encrypted message | `xurl chat send @handle "message"` |
| Listen for new messages | `xurl chat listen @handle` |
| Rotate a conversation key | `xurl chat rotate CONV --yes` (write op — see notes) |
| Send with an attachment | `xurl chat send CONV "text" --file path/to/img.png` |
| Reply to a message | `xurl chat send CONV "text" --reply-t

Excerpt, first 6,000 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.

Install

Pinned to the audited commit ce13179

Download folder ↗
npm install -g @xdevplatform/xurl

Commands as the repository documents them: shown, never run by us. Our verdict covers commit ce13179f57fc only.

Works in which agents?

What its own text says, not a test

AgentStatusMore
Claude DesktopMentioned in its text, not testedSkills for Claude Desktop · About Claude Desktop
CursorMentioned in its text, not testedSkills for Cursor · About Cursor
“Mentioned” means the skill’s text names the agent. We have not run it there.

Audit history

Every audit, every source change

  1. !CAUTION B 89 / 100

    first audit · source ce13179f57fc

README badge

For maintainers · shows the latest audit

ModelsAtlas: CAUTION BMODELSATLASCAUTION · B
[![ModelsAtlas: CAUTION B](https://modelsatlas.com/skills/xdevplatform/xurl/badge.svg)](https://modelsatlas.com/skills/xdevplatform/xurl/)

The badge shows our verdict and grade for this skill, and links back to this page. It changes when the audit does.

Similar skills

Add this badge to your README

[![ModelsAtlas: CAUTION B](https://modelsatlas.com/skills/xdevplatform/xurl/badge.svg)](https://modelsatlas.com/skills/xdevplatform/xurl/)

Questions about xurl

What does the xurl skill do?
The official CLI for the X API
Is xurl safe to install?
With care. The audit graded it B (89/100) and found 10 things worth knowing before you trust this skill, listed below with the exact line each was found on.
What can xurl access on my machine?
The audit observed that it reaches the network and runs shell commands. Each of those is consistent with what it says it does. Secrets in the source: none found.
What do I need installed to use xurl?
Its own instructions reference xurl. Dependencies are pinned to exact versions.
Which assistants does xurl work with?
Its documentation mentions claude-desktop and cursor. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (ce13179f57fc), read on 2026-10-21. The repository is watched, and a new audit runs when it changes — this is the first audit.

Sources

Spotted something wrong? Report a correction · Methodology

Keep going in your AI

Opens with this page as the source. We add nothing else to the prompt.