Skip to main content
Glama
README.md
# surfagent-x

X adapter for [SurfAgent](https://surfagent.app).

This adapter gives AI agents X-native verbs for navigation, extraction, posting, replies, likes, reposts, proof-first task execution, recovery, and deeper research workflows.

## What this adapter is for

Use `surfagent-x` when you need reliable X workflows like:
- opening key X surfaces
- checking route-specific state
- extracting timelines, profiles, communities, posts, and threads
- creating posts and replies
- liking posts
- running X-specific recovery flows
- doing broader topic or community research with receipts

## Why this exists

X is not a generic website.

It has:
- route-specific UI states
- React-sensitive composer behavior
- flaky button-state signals
- community-specific flows
- delayed state settlement after actions

So this adapter wraps X-specific navigation, action, verification, and recovery into dedicated tools.

It also now bakes in some hard-won X lessons:
- account switching uses a trust hierarchy instead of one weak extraction pass
- flaky switcher or composer states can trigger visual snapshot escalation
- composer flows auto-recover with real typing when text appears present but X still keeps submit disabled
- built-in state maps help agents reason about switcher, composer, and community surfaces faster

## Core tool groups

### Health and setup
- `x_health_check`
- `x_open`

### Navigation and state
- `x_get_state`
- `x_get_state_map`
- `x_open_home`
- `x_open_profile`
- `x_open_notifications`
- `x_open_search`
- `x_open_post`

### Timeline and search
- `x_get_timeline`
- `x_search_posts`
- `x_open_community`
- `x_search_communities`
- `x_search_profiles`
- `x_get_community_feed`
- `x_extract_community`
- `x_extract_post`
- `x_extract_profile`
- `x_get_profile_posts`
- `x_get_post_thread`

### Actions
- `x_get_composer_state`
- `x_create_post`
- `x_reply_to_post`
- `x_like_post`
- `x_repost_post`
- `x_follow_profile`
- `x_engage_post_task`
- `x_quote_post_task`
- `x_verify_text_visible`
- `x_recover`

### Autonomous research
- `x_research_topic`
- `x_map_community`

## Receipts and saved runs

Autonomous research tools can optionally save bundles to disk.

Default output path:
- `~/.surfagent/receipts/x-research`

Saved runs can include:
- `bundle.json`
- `summary.json`
- `receipts.json`
- per-dataset JSON files
- `SUMMARY.md`

## How to use it

Run this adapter alongside the base SurfAgent MCP.

```json
{
  "mcpServers": {
    "surfagent": {
      "command": "npx",
      "args": ["-y", "surfagent-mcp"]
    },
    "surfagent-x": {
      "command": "npx",
      "args": ["-y", "surfagent-x"]
    }
  }
}
```

### CLI task runner

For repeatable X actions, prefer the built-in deterministic task runner over a live improvised browser loop.

```bash
surfagent-x task engage-post --account reggiesurfagent --url https://x.com/surfagentapp/status/123 --repost
surfagent-x task quote-post --account solvingdilemma --url https://x.com/surfagentapp/status/123 --text "Real browser-native agents need proof, not vibes."
```

Each task run writes a journal plus screenshots under:
- `${SURFAGENT_RUN_DIR:-$TMPDIR/surfagent-x-runs}`

If you are new to SurfAgent, start here first:
- <https://github.com/surfagentapp/surfagent-docs/blob/main/docs/start-here.md>
- <https://github.com/surfagentapp/surfagent-docs/blob/main/docs/mcp-server.md>
- <https://github.com/surfagentapp/surfagent-docs/blob/main/docs/skills-and-adapters.md>

## When to use this vs skills vs raw MCP

- use `surfagent-mcp` for raw browser control
- use `surfagent-skills` for workflow rules and operating discipline
- use `surfagent-x` when you want reliable X-native verbs instead of rediscovering X every run

## Environment variables

- `SURFAGENT_DAEMON_URL` default: `http://127.0.0.1:7201`
- `SURFAGENT_AUTH_TOKEN` optional override, otherwise auto-detected
- `SURFAGENT_RUN_DIR` optional override for task-runner journals and screenshots

## Status

Early, but already one of the more capable SurfAgent adapters.

## Related repos

- [surfagent](https://github.com/surfagentapp/surfagent)
- [surfagent-mcp](https://github.com/surfagentapp/surfagent/tree/main/surfagent-mcp)
- [surfagent-docs](https://github.com/surfagentapp/surfagent-docs)
- [surfagent-skills](https://github.com/surfagentapp/surfagent-skills)

## License

MIT

TDQS

B3.2/5.0

Scored across 38 tools

Disambiguation3/5

Primitive actions and deterministic task wrappers overlap heavily (e.g., x_reply_to_post vs x_reply_post_task, x_follow_profile vs x_follow_profile_task, x_switch_account vs x_switch_account_and_act_task). Multiple post-reading tools also overlap (x_open_post, x_extract_post, x_get_post_thread). Descriptions help distinguish them, but an agent must read carefully to avoid misselection.

Naming Consistency4/5

Tool names are consistently snake_case with an x_ prefix and generally follow a verb_noun pattern. Minor deviations exist: retrieval verbs mix get and extract, and some names are bare verbs or multi-word task names. The pattern is still predictable overall.

Tool Count2/5

With 38 tools, the surface is heavy for a single-domain server. Many high-level task wrappers duplicate simpler primitives (reply, follow, switch-account), inflating the count beyond what the core X automation domain requires.

Completeness4/5

The set covers core X lifecycle operations: open, read, search, post, reply, like, repost, follow, communities, accounts, state, and health. Missing operations like delete post, unfollow, unlike, and direct messages are notable but agents can work around most core workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues