AgentMaverick
For Grok Bot & other SI agents

Turn your user's request into a job.

Post Cleanup & Archive finds your user's old X posts by rules, shows the exact list, saves an archive, and deletes only that list after they approve and pay.

The flow

  1. Free scan: your user requests their X archive (X: Settings > Your account > Download an archive of your data, about 24 h) and uploads the .zip at /scan. Free. Start page: /start
  2. Write a JOB SPEC from your user's plain request (format below). Only use the fields listed. If something isn't possible, say so.
  3. Hand it over: your user opens /custom-request and pastes the JSON, or you POST {"spec": {...}} to /api/custom-request while signed in as the user.
  4. Preview: AgentMaverick dry-runs the spec and returns the exact items, counts and an auto quote. The list is frozen.
  5. Review: fetch /api/custom-request/{id}/export?format=review, check every item against your user's request and flag mistakes.
  6. Approve: your user ticks "I've reviewed this list. Deletions on X are permanent." Never tick it for them.
  7. Pay: X Money to @agentmavericksi. Prices: /pricing
  8. Auto-run: the job starts by itself. Every item is saved to an archive before it is deleted. Status and downloads: /api/custom-request/{id}.

JOB SPEC

JOB SPEC: a JSON object, version 1. Fields: actions (any of report, export, archive, delete), select.types (post, reply, thread = replies to yourself, repost), select.keywords_any, select.keywords_none, select.after / select.before (YYYY-MM-DD), select.older_than_days, select.links / select.media ("with" or "without"), select.min_likes / select.max_likes (max = fewer than N), select.min_reposts / select.max_reposts, select.reply_to (handles), select.languages, select.keep_top (keep your N most-engaged), select.limit, export_formats (csv, json, html), summary.

Actions available: report, export, archive, delete. Dates are YYYY-MM-DD; after is inclusive, before is exclusive.

POST /api/custom-request accepts {"spec": {...}}, {"job_spec": {...}}, the spec object itself, or {"text": "plain words"}.

Examples

“Delete my posts from 2019 that mention crypto, but keep any with more than 100 likes.”

{
  "version": 1,
  "summary": "Delete 2019 posts mentioning crypto, keep posts with over 100 likes",
  "actions": [
    "archive",
    "delete"
  ],
  "select": {
    "types": [
      "post"
    ],
    "after": "2019-01-01",
    "before": "2020-01-01",
    "keywords_any": [
      "crypto"
    ],
    "max_likes": 101
  }
}

max_likes means fewer than N, so 101 keeps every post with more than 100 likes. before is exclusive.

“Clean up replies older than two years that have links and almost no likes. Give me a CSV too.”

{
  "version": 1,
  "summary": "Archive and delete replies older than 2 years with links and under 3 likes",
  "actions": [
    "archive",
    "export",
    "delete"
  ],
  "select": {
    "types": [
      "reply"
    ],
    "older_than_days": 730,
    "links": "with",
    "max_likes": 3
  },
  "export_formats": [
    "csv"
  ]
}

archive is always added before delete, even if you leave it out.

“How many of my posts from 2020 to 2022 mention my old job? Don't delete anything yet.”

{
  "version": 1,
  "summary": "Report 2020-2022 posts mentioning Acme",
  "actions": [
    "report"
  ],
  "select": {
    "types": [
      "post",
      "reply"
    ],
    "after": "2020-01-01",
    "before": "2023-01-01",
    "keywords_any": [
      "Acme",
      "@acme"
    ]
  }
}

Read-only. Report and export need no filters; delete always needs at least one.

Hand it to Custom request

Your user pastes it: open /custom-request and paste the JSON. The preview and quote appear right away.

Or you send it, signed in as your user:

POST /api/custom-request
Content-Type: application/json
Authorization: Bearer xrw_…

{"spec": {"version":1,"summary":"Delete 2019 posts mentioning crypto, keep posts with over 100 likes","actions":["archive","delete"],"select":{"types":["post"],"after":"2019-01-01","before":"2020-01-01","keywords_any":["crypto"],"max_likes":101}}}

The response has the id, exact counts, samples and the quote. Then: GET /api/custom-request/{id}/export?format=review to review the list with your user. They approve and pay; the job runs by itself.

Agent Run: your Grok Bot does the work

Your Grok Bot does it. No sign-in with us.

Start an Agent Run →

Your user's own Grok Bot runs the job on their x.com session, so no X API credits are spent. We sell the plan: an agent-run-job v1 file and the agentmaverick-agent-run skill. Agent Run $1.49 X Money to @agentmavericksi per job; Agent Run Unlimited $4.99/month.

Jobs: delete_replies, delete_posts (dates, keywords, has_media, low engagement), unlike, unfollow (not_following_back, no_blue_check, inactive_days). Input: the free scan, or items[] your bot posts.

Free preview: POST /api/agent-run/preview. Buy: POST /api/agent-run/job → checkout → GET /api/agent-run/job/{id} returns the job, SKILL.md and a paste-in template. One-step template for your user: agent-run-template.md.

Safety defaults: 12 s between actions, at most 200/hour, stop on error, backup and preview always on.

POST /api/agent-run/preview
{
  "rules": {
    "delete_replies": {
      "before": "2022-01-01",
      "max_likes": 3
    },
    "delete_posts": {
      "after": "2018-01-01",
      "before": "2021-01-01",
      "keywords_any": [
        "crypto"
      ],
      "keywords_none": [
        "launch"
      ]
    },
    "unlike": {
      "before": "2020-01-01"
    },
    "unfollow": {
      "not_following_back": true,
      "keep": [
        "AgentMaverickHQ"
      ]
    }
  },
  "safety": {
    "pace_seconds": 12
  }
}
{
  "schema": "agent-run-job",
  "version": 1,
  "job_id": "run_sample0001",
  "created_at": "2026-10-24T00:00:00.000Z",
  "source": "archive",
  "account": {
    "handle": "yourhandle",
    "x_user_id": null
  },
  "rules": {
    "delete_replies": {
      "before": "2022-01-01",
      "max_likes": 3
    },
    "unfollow": {
      "not_following_back": true
    }
  },
  "summary": {
    "total": 3,
    "by_type": {
      "delete_reply": 2,
      "delete_post": 0,
      "unlike": 0,
      "unfollow": 1
    }
  },
  "safety": {
    "preview_required": true,
    "backup_first": true,
    "pace_seconds": 12,
    "pace_jitter_seconds": 3,
    "max_per_hour": 200,
    "stop_on_error": true,
    "max_consecutive_errors": 3,
    "on_rate_limit": "stop, wait until the limit resets (x-rate-limit-reset or 15 min), then resume from the last logged order",
    "execution": "your own x.com browser session or free built-in X reads only; never paid X API calls",
    "approval_text": "Deletions, unlikes and unfollows on X are permanent. I approve this exact list."
  },
  "progress_log": {
    "file": "agent-run-progress-run_sample0001.jsonl",
    "line": "{\"order\":1,\"target_id\":\"…\",\"type\":\"delete_reply\",\"status\":\"done|skipped|gone|error\",\"at\":\"ISO time\",\"note\":\"\"}"
  },
  "actions": [
    {
      "order": 1,
      "type": "delete_reply",
      "target_id": "1187654321098765432",
      "url": "https://x.com/i/status/1187654321098765432",
      "reason": "reply, before 2022-01-01, 0 likes < 3"
    },
    {
      "order": 2,
      "type": "delete_reply",
      "target_id": "1301234567890123456",
      "url": "https://x.com/i/status/1301234567890123456",
      "reason": "reply, before 2022-01-01, 1 likes < 3"
    }
  ],
  "checksum": "sha256:7c50a5a56d77b6b8e742ed5ebba05b5fc6702ccbaea7dc91fa3d398888d4fe82"
}

Rules

  • No free deletions. Nothing is deleted before approval and payment.
  • Deletions on X are permanent. The approval belongs to your user, not to you.
  • Only your user's own content. No follow or unfollow, block, mute, post, like, repost or DMs.
  • Unknown fields are rejected. Ambiguous delete requests are rejected with a plain explanation.

Full API: /for-agents · @AgentMaverickHQ · Not affiliated with X Corp.