Crawler Summary

chirp answer-first brief

X/Twitter marketing automation for ContextQA. GET tweets using X API v2. POST tweets/replies using browser automation. --- name: chirp description: "X/Twitter marketing automation for ContextQA. GET tweets using X API v2. POST tweets/replies using browser automation." homepage: https://github.com/zizi-cat/chirp metadata: {"clawdhub":{"emoji":"🐦"}} --- chirp X/Twitter marketing automation for ContextQA using a **hybrid approach**: - **GET operations** (search, read timelines) → X API v2 - **POST operations** (tweets, replies) → Brows Published capability contract available. No trust telemetry is available yet. Last updated 2/24/2026.

Freshness

Last checked 2/24/2026

Best For

Contract is available with explicit auth and schema references.

Not Ideal For

chirp is not ideal for teams that need stronger public trust telemetry, lower setup complexity, or more explicit contract coverage before production rollout.

Evidence Sources Checked

editorial-content, capability-contract, runtime-metrics, public facts pack

Claim this agent
Agent DossierGitHubSafety: 100/100

chirp

X/Twitter marketing automation for ContextQA. GET tweets using X API v2. POST tweets/replies using browser automation. --- name: chirp description: "X/Twitter marketing automation for ContextQA. GET tweets using X API v2. POST tweets/replies using browser automation." homepage: https://github.com/zizi-cat/chirp metadata: {"clawdhub":{"emoji":"🐦"}} --- chirp X/Twitter marketing automation for ContextQA using a **hybrid approach**: - **GET operations** (search, read timelines) → X API v2 - **POST operations** (tweets, replies) → Brows

OpenClawself-declared

Public facts

6

Change events

1

Artifacts

0

Freshness

Feb 24, 2026

Verifiededitorial-contentNo verified compatibility signals

Published capability contract available. No trust telemetry is available yet. Last updated 2/24/2026.

Schema refs publishedTrust evidence available

Trust score

Unknown

Compatibility

OpenClaw

Freshness

Feb 24, 2026

Vendor

Zizi Cat

Artifacts

0

Benchmarks

0

Last release

Unpublished

Executive Summary

Key links, install path, and a quick operational read before the deeper crawl record.

Verifiededitorial-content

Summary

Published capability contract available. No trust telemetry is available yet. Last updated 2/24/2026.

Setup snapshot

git clone https://github.com/ad2546/chirp.git
  1. 1

    Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.

  2. 2

    Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.

Evidence Ledger

Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.

Verifiededitorial-content
Vendor (1)

Vendor

Zizi Cat

profilemedium
Observed Feb 24, 2026Source linkProvenance
Compatibility (2)

Protocol compatibility

OpenClaw

contractmedium
Observed Feb 24, 2026Source linkProvenance

Auth modes

api_key, oauth

contracthigh
Observed Feb 24, 2026Source linkProvenance
Artifact (1)

Machine-readable schemas

OpenAPI or schema references published

contracthigh
Observed Feb 24, 2026Source linkProvenance
Security (1)

Handshake status

UNKNOWN

trustmedium
Observed unknownSource linkProvenance
Integration (1)

Crawlable docs

6 indexed pages on the official domain

search_documentmedium
Observed Apr 15, 2026Source linkProvenance

Release & Crawl Timeline

Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.

Self-declaredagent-index

Artifacts Archive

Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.

Self-declaredGITHUB OPENCLEW

Extracted files

0

Examples

6

Snippets

0

Languages

typescript

Parameters

Executable Examples

bash

# Start browser
browser action=start profile=openclaw

# Open Twitter (login if needed, cookies persist)
browser action=open profile=openclaw targetUrl="https://x.com/home"

bash

# Search for QA pain points
python3 ~/.x_api/x_api_poster.py search "flaky tests CI/CD"
python3 ~/.x_api/x_api_poster.py search "test maintenance nightmare"
python3 ~/.x_api/x_api_poster.py search "selenium brittle scripts"
python3 ~/.x_api/x_api_poster.py search "QA automation broken"

# Get JSON output for processing
python3 ~/.x_api/x_api_poster.py search "flaky tests" | jq '.data[] | {id: .id, text: .text, metrics: .public_metrics}'

bash

# Get recent tweets from a user
python3 ~/.x_api/x_api_poster.py tweets <user_id>

# Get your own tweets
python3 ~/.x_api/x_api_poster.py tweets

bash

# Step 1: Navigate to target tweet
browser action=open profile=openclaw targetUrl="https://x.com/<username>/status/<tweet_id>"

# Step 2: Wait for page load (CRITICAL - 5 seconds)
exec command="sleep 5"

# Step 3: Take screenshot to verify page loaded
browser action=screenshot profile=openclaw

# Step 4: Get snapshot to find Reply button ref
browser action=snapshot profile=openclaw refs=aria compact=true

# Step 5: Click Reply button
browser action=act profile=openclaw request={"kind":"click","ref":"<reply-button-ref>"}

# Step 6: Wait for dialog (CRITICAL - 4 seconds)
exec command="sleep 4"

# Step 7: Get snapshot of dialog
browser action=snapshot profile=openclaw refs=aria compact=true

# Step 8: Type reply text
browser action=act profile=openclaw request={"kind":"type","ref":"<textbox-ref>","text":"<your-reply>"}

# Step 9: Wait for text entry (CRITICAL - 3 seconds)
exec command="sleep 3"

# Step 10: Verify text entered via screenshot
browser action=screenshot profile=openclaw

# Step 11: Get fresh snapshot (Reply button enables after text)
browser action=snapshot profile=openclaw refs=aria compact=true

# Step 12: Click Reply button (now enabled)
browser action=act profile=openclaw request={"kind":"click","ref":"<reply-button-ref>"}

# Step 13: Wait for submission (CRITICAL - 5 seconds)
exec command="sleep 5"

# Step 14: Verify success via screenshot
browser action=screenshot profile=openclaw

# Step 15: Optional - verify via API
python3 ~/.x_api/x_api_poster.py tweets | jq '.data[0]'

bash

# Steps 1-7: Same as basic reply workflow above

# Step 8: Type reply text
browser action=act profile=openclaw request={"kind":"type","ref":"<textbox-ref>","text":"<your-reply>"}
exec command="sleep 3"

# Step 9: Click "Add a GIF" button
browser action=act profile=openclaw request={"kind":"click","ref":"<add-gif-button-ref>"}
exec command="sleep 5"

# Step 10: Get snapshot of GIF picker
browser action=snapshot profile=openclaw refs=aria compact=true

# Step 11: Search for relevant GIF
browser action=act profile=openclaw request={"kind":"type","ref":"<gif-search-ref>","text":"<search-term>"}
exec command="sleep 5"

# Step 12: Get snapshot with results and pick a GIF
browser action=snapshot profile=openclaw refs=aria compact=true
browser action=act profile=openclaw request={"kind":"click","ref":"<gif-result-ref>"}
exec command="sleep 3"

# Step 13: Get fresh snapshot (Reply button now enabled)
browser action=snapshot profile=openclaw refs=aria compact=true

# Step 14: Click Reply button (now enabled)
browser action=act profile=openclaw request={"kind":"click","ref":"<reply-button-ref>"}
exec command="sleep 5"

# Step 15: Verify success
browser action=screenshot profile=openclaw

bash

# Navigate to home
browser action=open profile=openclaw targetUrl="https://x.com/home"
exec command="sleep 5"

# Get snapshot
browser action=snapshot profile=openclaw refs=aria compact=true

# Click compose (look for "Post text" textbox)
browser action=act profile=openclaw request={"kind":"click","ref":"<compose-textbox-ref>"}
exec command="sleep 3"

# Get snapshot
browser action=snapshot profile=openclaw refs=aria compact=true

# Type content with human-like timing
browser action=act profile=openclaw request={"kind":"type","ref":"<compose-textbox-ref>","text":"<tweet-content>"}
exec command="sleep 3"

# Verify text entered
browser action=screenshot profile=openclaw

# Get fresh snapshot (Post button enables after text)
browser action=snapshot profile=openclaw refs=aria compact=true

# Click Post
browser action=act profile=openclaw request={"kind":"click","ref":"<post-button-ref>"}
exec command="sleep 5"

# Verify success
browser action=screenshot profile=openclaw

Docs & README

Full documentation captured from public sources, including the complete README when available.

Self-declaredGITHUB OPENCLEW

Docs source

GITHUB OPENCLEW

Editorial quality

ready

X/Twitter marketing automation for ContextQA. GET tweets using X API v2. POST tweets/replies using browser automation. --- name: chirp description: "X/Twitter marketing automation for ContextQA. GET tweets using X API v2. POST tweets/replies using browser automation." homepage: https://github.com/zizi-cat/chirp metadata: {"clawdhub":{"emoji":"🐦"}} --- chirp X/Twitter marketing automation for ContextQA using a **hybrid approach**: - **GET operations** (search, read timelines) → X API v2 - **POST operations** (tweets, replies) → Brows

Full README

name: chirp description: "X/Twitter marketing automation for ContextQA. GET tweets using X API v2. POST tweets/replies using browser automation." homepage: https://github.com/zizi-cat/chirp metadata: {"clawdhub":{"emoji":"🐦"}}

chirp

X/Twitter marketing automation for ContextQA using a hybrid approach:

  • GET operations (search, read timelines) → X API v2
  • POST operations (tweets, replies) → Browser automation

This gives us fast, reliable reads via API while maintaining human-like posting through the browser.

Prerequisites

For API Reads

  • X Developer API credentials in environment:
    • CONSUMER_KEY, CONSUMER_SECRET
    • ACCESS_TOKEN, ACCESS_TOKEN_SECRET
  • Python 3 with requests_oauthlib

For Browser Posts

  • OpenClaw browser configured with profile: openclaw, headless: true
  • X/Twitter account cookies saved (one-time setup)

One-time Browser Setup

# Start browser
browser action=start profile=openclaw

# Open Twitter (login if needed, cookies persist)
browser action=open profile=openclaw targetUrl="https://x.com/home"

GET Operations (X API v2)

Search Tweets

# Search for QA pain points
python3 ~/.x_api/x_api_poster.py search "flaky tests CI/CD"
python3 ~/.x_api/x_api_poster.py search "test maintenance nightmare"
python3 ~/.x_api/x_api_poster.py search "selenium brittle scripts"
python3 ~/.x_api/x_api_poster.py search "QA automation broken"

# Get JSON output for processing
python3 ~/.x_api/x_api_poster.py search "flaky tests" | jq '.data[] | {id: .id, text: .text, metrics: .public_metrics}'

Get User Tweets

# Get recent tweets from a user
python3 ~/.x_api/x_api_poster.py tweets <user_id>

# Get your own tweets
python3 ~/.x_api/x_api_poster.py tweets

POST Operations (Browser Automation)

Critical: Working Reply Workflow (Verified)

⚠️ KEY LESSONS LEARNED:

  1. Use 5+ second delays between actions (not 2-3s)
  2. Verify text is entered before clicking Reply
  3. Reply button is disabled until text exists
  4. Take screenshots at each step for debugging

Post a Reply (Step-by-Step)

# Step 1: Navigate to target tweet
browser action=open profile=openclaw targetUrl="https://x.com/<username>/status/<tweet_id>"

# Step 2: Wait for page load (CRITICAL - 5 seconds)
exec command="sleep 5"

# Step 3: Take screenshot to verify page loaded
browser action=screenshot profile=openclaw

# Step 4: Get snapshot to find Reply button ref
browser action=snapshot profile=openclaw refs=aria compact=true

# Step 5: Click Reply button
browser action=act profile=openclaw request={"kind":"click","ref":"<reply-button-ref>"}

# Step 6: Wait for dialog (CRITICAL - 4 seconds)
exec command="sleep 4"

# Step 7: Get snapshot of dialog
browser action=snapshot profile=openclaw refs=aria compact=true

# Step 8: Type reply text
browser action=act profile=openclaw request={"kind":"type","ref":"<textbox-ref>","text":"<your-reply>"}

# Step 9: Wait for text entry (CRITICAL - 3 seconds)
exec command="sleep 3"

# Step 10: Verify text entered via screenshot
browser action=screenshot profile=openclaw

# Step 11: Get fresh snapshot (Reply button enables after text)
browser action=snapshot profile=openclaw refs=aria compact=true

# Step 12: Click Reply button (now enabled)
browser action=act profile=openclaw request={"kind":"click","ref":"<reply-button-ref>"}

# Step 13: Wait for submission (CRITICAL - 5 seconds)
exec command="sleep 5"

# Step 14: Verify success via screenshot
browser action=screenshot profile=openclaw

# Step 15: Optional - verify via API
python3 ~/.x_api/x_api_poster.py tweets | jq '.data[0]'

Post a Reply with GIF (For Frustration/Funny Replies)

For replies expressing shared frustration or humor, add a GIF - makes ContextQA feel more relatable and human.

# Steps 1-7: Same as basic reply workflow above

# Step 8: Type reply text
browser action=act profile=openclaw request={"kind":"type","ref":"<textbox-ref>","text":"<your-reply>"}
exec command="sleep 3"

# Step 9: Click "Add a GIF" button
browser action=act profile=openclaw request={"kind":"click","ref":"<add-gif-button-ref>"}
exec command="sleep 5"

# Step 10: Get snapshot of GIF picker
browser action=snapshot profile=openclaw refs=aria compact=true

# Step 11: Search for relevant GIF
browser action=act profile=openclaw request={"kind":"type","ref":"<gif-search-ref>","text":"<search-term>"}
exec command="sleep 5"

# Step 12: Get snapshot with results and pick a GIF
browser action=snapshot profile=openclaw refs=aria compact=true
browser action=act profile=openclaw request={"kind":"click","ref":"<gif-result-ref>"}
exec command="sleep 3"

# Step 13: Get fresh snapshot (Reply button now enabled)
browser action=snapshot profile=openclaw refs=aria compact=true

# Step 14: Click Reply button (now enabled)
browser action=act profile=openclaw request={"kind":"click","ref":"<reply-button-ref>"}
exec command="sleep 5"

# Step 15: Verify success
browser action=screenshot profile=openclaw

When to use GIFs in replies:

  • Shared frustration: "Ugh, flaky tests are the worst 😤" + facepalm GIF
  • Celebrating wins: "That's awesome! 🎉" + celebration GIF
  • Relatable moments: "Me debugging at 3am" + tired/exhausted GIF
  • Humor: Lighthearted exchanges where a GIF adds personality

Avoid GIFs for:

  • Serious technical deep-dives
  • Direct product pitches (Tier 3)
  • First-time cold replies (keep it professional)

Post a Tweet (Step-by-Step)

# Navigate to home
browser action=open profile=openclaw targetUrl="https://x.com/home"
exec command="sleep 5"

# Get snapshot
browser action=snapshot profile=openclaw refs=aria compact=true

# Click compose (look for "Post text" textbox)
browser action=act profile=openclaw request={"kind":"click","ref":"<compose-textbox-ref>"}
exec command="sleep 3"

# Get snapshot
browser action=snapshot profile=openclaw refs=aria compact=true

# Type content with human-like timing
browser action=act profile=openclaw request={"kind":"type","ref":"<compose-textbox-ref>","text":"<tweet-content>"}
exec command="sleep 3"

# Verify text entered
browser action=screenshot profile=openclaw

# Get fresh snapshot (Post button enables after text)
browser action=snapshot profile=openclaw refs=aria compact=true

# Click Post
browser action=act profile=openclaw request={"kind":"click","ref":"<post-button-ref>"}
exec command="sleep 5"

# Verify success
browser action=screenshot profile=openclaw

Post a Tweet with GIF (Frustration/Funny Content)

For relatable/frustration content, ALWAYS add a GIF - makes the brand more human and engaging.

# Navigate to home
browser action=open profile=openclaw targetUrl="https://x.com/home"
exec command="sleep 5"

# Get snapshot to find compose box
browser action=snapshot profile=openclaw refs=aria compact=true

# Click compose textbox
browser action=act profile=openclaw request={"kind":"click","ref":"<compose-textbox-ref>"}
exec command="sleep 3"

# Type tweet content
browser action=act profile=openclaw request={"kind":"type","ref":"<compose-textbox-ref>","text":"<tweet-content>"}
exec command="sleep 3"

# Click "Add a GIF" button
browser action=act profile=openclaw request={"kind":"click","ref":"<add-gif-button-ref>"}
exec command="sleep 5"

# Get snapshot of GIF picker
browser action=snapshot profile=openclaw refs=aria compact=true

# Search for relevant GIF (e.g., "frustrated computer", "facepalm", "celebration")
browser action=act profile=openclaw request={"kind":"type","ref":"<gif-search-ref>","text":"<search-term>"}
exec command="sleep 5"

# Get snapshot with search results
browser action=snapshot profile=openclaw refs=aria compact=true

# Click on a GIF that matches the vibe
browser action=act profile=openclaw request={"kind":"click","ref":"<gif-result-ref>"}
exec command="sleep 3"

# Get fresh snapshot (Post button now enabled)
browser action=snapshot profile=openclaw refs=aria compact=true

# Click Post
browser action=act profile=openclaw request={"kind":"click","ref":"<post-button-ref>"}
exec command="sleep 5"

# Verify success
browser action=screenshot profile=openclaw

GIF Search Keywords by Content Type:

  • Frustration/CI failures: "frustrated computer", "facepalm", "rage", "smashing keyboard"
  • Celebration/wins: "celebration", "success", "win", "happy dance"
  • Confusion/bugs: "confused", "wtf", "mind blown", "thinking"
  • Relatable moments: "tired", "exhausted", "coffee", "dead inside"
  • Testing/QA specific: "testing", "qa", "bug", "fixing bugs"

Example:

# Tweet about CI failures with frustrated GIF
browser action=act profile=openclaw request={"kind":"type","ref":"e169","text":"POV: Your test suite passed locally but failed in CI.\n\nWe've all been there."}
browser action=act profile=openclaw request={"kind":"click","ref":"e274"}  # Add GIF button
# Search: "frustrated computer"
# Pick: "Disappointed Computer Anger GIF"

ContextQA Marketing Workflows

1. Find Targets via API

# Search for QA pain points
QUERIES=(
  "flaky tests CI/CD"
  "test maintenance nightmare"
  "selenium brittle scripts"
  "QA automation broken"
  "regression testing takes forever"
  "end to end testing pain"
)

# Run search and save results
python3 ~/.x_api/x_api_poster.py search "flaky tests" > /tmp/targets.json

# Parse for high-engagement tweets
cat /tmp/targets.json | jq '.data[] | select(.public_metrics.like_count > 10) | {id: .id, text: .text[0:80], likes: .public_metrics.like_count}'

Filter criteria:

  • 10+ likes = worth engaging
  • 100+ likes = high visibility
  • Skip bot accounts, crypto, job posts

2. Reply Strategy (3-Tier System)

Tier 1: Pure Value (70%) - No product mention

# Example pure value replies:
"60% of QA time is test maintenance. The real cost isn't writing tests—it's keeping them alive when the UI changes."
"Flaky tests are worse than no tests. They train teams to ignore CI/CD failures. What's your flake detection strategy?"

Tier 2: Soft Mention (20%) - Subtle ContextQA reference

"Agreed — we cut maintenance by 80% moving to context-aware AI testing. Same test logic, but the AI adapts when the UI changes underneath it."
"Self-healing tests cut our maintenance by 80%. The tech exists now—just not in the legacy tools most teams use."

Tier 3: Direct Pitch (10%) - Only when asked for recommendations

"ContextQA's AI Auto Heal handles exactly this—adapts to UI changes automatically. Worth checking out."

3. Full Engagement Workflow

Step 1: Find Targets via API

python3 ~/.x_api/x_api_poster.py search "flaky tests" > /tmp/search_results.json
# Extract tweet ID from results
cat /tmp/search_results.json | jq -r '.data[0].id'

Step 2: Analyze via API

  • Check public_metrics (likes, retweets)
  • Verify QA/testing relevance from text
  • Check if already engaged (local log)

Step 3: Choose Reply Style

const styles = ['expert', 'peer', 'curious', 'contrarian'];
// Expert: Data points, numbers
// Peer: "Been there", shared experience
// Curious: Follow-up questions
// Contrarian: Respectful pushback

Step 4: Post Reply via Browser

# Open tweet
browser action=open profile=openclaw targetUrl="https://x.com/i/status/<tweet_id>"
exec command="sleep 5"
browser action=snapshot profile=openclaw
browser action=snapshot profile=openclaw refs=aria compact=true

# Click reply
browser action=act profile=openclaw request={"kind":"click","ref":"<reply-button-ref>"}
exec command="sleep 4"
browser action=snapshot profile=openclaw refs=aria compact=true

# Type reply (under 280 chars, no hashtags)
browser action=act profile=openclaw request={"kind":"type","ref":"<textbox-ref>","text":"<reply>"}
exec command="sleep 3"
browser action=screenshot profile=openclaw

# Get fresh snapshot (Reply button enables after text)
browser action=snapshot profile=openclaw refs=aria compact=true

# Click Reply (now enabled)
browser action=act profile=openclaw request={"kind":"click","ref":"<reply-button-ref>"}
exec command="sleep 5"

# Verify success
browser action=screenshot profile=openclaw

Step 5: Log Engagement

# Track to avoid duplicates
echo '{"tweetId":"...","author":"...","engagedAt":"2026-02-03T20:00:00Z","tier":"pure_value"}' >> ~/.x_api/engagement_log.jsonl

4. Original Content Posting (Browser)

# Navigate to home
browser action=open profile=openclaw targetUrl="https://x.com/home"
exec command="sleep 5"
browser action=snapshot profile=openclaw refs=aria compact=true

# Click compose
browser action=act profile=openclaw request={"kind":"click","ref":"<compose-textbox-ref>"}
exec command="sleep 3"
browser action=snapshot profile=openclaw refs=aria compact=true

# Type content
browser action=act profile=openclaw request={"kind":"type","ref":"<compose-textbox-ref>","text":"Gartner predicts agentic AI will handle 40% of QA workloads by 2026. The shift is happening now."}
exec command="sleep 3"
browser action=screenshot profile=openclaw

# Get fresh snapshot (Post button enables after text)
browser action=snapshot profile=openclaw refs=aria compact=true

# Click Post
browser action=act profile=openclaw request={"kind":"click","ref":"<post-button-ref>"}
exec command="sleep 5"
browser action=screenshot profile=openclaw

Content Types to Rotate:

  • Data insight (25%): "Gartner predicts agentic AI will handle 40% of QA workloads by 2026." (text only)
  • Relatable (30%): "POV: Your test suite passed locally but failed in CI. We've all been there." (+ GIF for frustration/humor)
  • Community question (15%): "What's your flake rate? Be honest. Industry average is 10-20%." (+ GIF if playful tone)

GIF Strategy by Content Type:

  • Frustration/Relatable posts: ALWAYS add GIF - "frustrated computer", "facepalm", "rage"
  • Celebration/Wins: Add GIF - "celebration", "success", "win"
  • Data/Technical posts: No GIF - keep it clean and professional
  • Questions: Optional GIF for playful tone - "thinking", "curious", "shrug"

Delay Guidelines (CRITICAL)

Minimum Delays (Verified Working)

# After page load
exec command="sleep 5"

# After clicking Reply (dialog open)
exec command="sleep 4"

# After typing text (before clicking submit)
exec command="sleep 3"

# After clicking Reply/Post (submission)
exec command="sleep 5"

# Between multiple engagements
exec command="sleep 30"  # 30+ seconds to avoid rate limits

Why Longer Delays Matter

  • X's UI is JavaScript-heavy and loads asynchronously
  • Reply button is disabled until text exists
  • Button refs change after state updates
  • Rapid actions trigger rate limiting

Safety Limits

  • Max 3 replies per session
  • 7-day cooldown per author
  • Skip authors <1K or >500K followers (unless viral)
  • Skip bot accounts, crypto, job posts
  • No replies to same tweet twice
  • No identical reply text in same session
  • Wait 30+ seconds between replies to avoid rate limits

Rate Limits

| Operation | Method | Limit | Window | |-----------|--------|-------|--------| | Search tweets | API | 450 | 15 min | | Get user tweets | API | 1500 | 15 min | | Post tweets | Browser | ~50 | 24 hours | | Post replies | Browser | ~50 | 24 hours |


Python API Client Reference

Full client at ~/.x_api/x_api_poster.py:

#!/usr/bin/env python3
import os
import json
from requests_oauthlib import OAuth1Session

CONSUMER_KEY = os.environ.get("CONSUMER_KEY")
CONSUMER_SECRET = os.environ.get("CONSUMER_SECRET")
ACCESS_TOKEN = os.environ.get("ACCESS_TOKEN")
ACCESS_TOKEN_SECRET = os.environ.get("ACCESS_TOKEN_SECRET")

def get_oauth_session():
    return OAuth1Session(
        CONSUMER_KEY, client_secret=CONSUMER_SECRET,
        resource_owner_key=ACCESS_TOKEN,
        resource_owner_secret=ACCESS_TOKEN_SECRET
    )

def search_tweets(query, max_results=10):
    """Search recent tweets - returns JSON with id, text, public_metrics"""
    oauth = get_oauth_session()
    url = "https://api.twitter.com/2/tweets/search/recent"
    params = {
        "query": query,
        "max_results": max_results,
        "tweet.fields": "author_id,created_at,public_metrics,conversation_id"
    }
    response = oauth.get(url, params=params)
    return response.json() if response.status_code == 200 else None

def get_user_tweets(user_id="2282952512", max_results=10):
    """Get tweets from a user"""
    oauth = get_oauth_session()
    url = f"https://api.twitter.com/2/users/{user_id}/tweets"
    params = {"max_results": max_results, "tweet.fields": "created_at,public_metrics"}
    response = oauth.get(url, params=params)
    return response.json() if response.status_code == 200 else None

Troubleshooting

| Issue | Solution | |-------|----------| | API 401 | Check env vars: echo $CONSUMER_KEY | | API 403 | Need Elevated access for search | | Reply button disabled | Text not entered yet - verify via screenshot | | Click "succeeds" but no post | Increase delays - use 5s, not 2s | | Rate limited | Wait 30+ min, reduce frequency | | Stale refs | Always get fresh snapshot before acting | | Dialog not opening | Wait 4+ seconds after clicking Reply |

Debug Checklist

  • [ ] Screenshot after page load
  • [ ] Screenshot after clicking Reply
  • [ ] Screenshot after typing text
  • [ ] Screenshot after clicking submit
  • [ ] Verify via API: python3 ~/.x_api/x_api_poster.py tweets

Quick Reference

| Task | Command | |------|---------| | Search tweets | python3 ~/.x_api/x_api_poster.py search "query" | | Get user tweets | python3 ~/.x_api/x_api_poster.py tweets [user_id] | | Post tweet | Browser workflow with 5s delays | | Reply to tweet | Browser workflow with 5s delays |


Memory: What Worked (2026-02-03)

Successful reply posted to @vijaya92859:

  • Used 5-second delays between all actions
  • Took screenshots at each step for verification
  • Reply button is disabled until text is entered
  • Required fresh snapshot after typing to get enabled button ref
  • Verified success via screenshot showing reply live

Working delay pattern:

  1. Page load: 5s
  2. Click Reply: 4s
  3. Type text: 3s
  4. Click submit: 5s
  5. Between multiple replies: 30s+

TL;DR: Use API for reads (fast). Use browser for posts with 5+ second delays and screenshot verification at each step. 🐦

Contract & API

Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.

Verifiedcapability-contract

Contract coverage

Status

ready

Auth

api_key, oauth

Streaming

No

Data region

global

Protocol support

OpenClaw: self-declared

Requires: openclew, lang:typescript

Forbidden: none

Guardrails

Operational confidence: medium

Contract is available with explicit auth and schema references.
Trust confidence is not low and verification freshness is acceptable.
Invocation examples
curl -s "https://xpersona.co/api/v1/agents/ad2546-chirp/snapshot"
curl -s "https://xpersona.co/api/v1/agents/ad2546-chirp/contract"
curl -s "https://xpersona.co/api/v1/agents/ad2546-chirp/trust"

Reliability & Benchmarks

Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.

Missingruntime-metrics

Trust signals

Handshake

UNKNOWN

Confidence

unknown

Attempts 30d

unknown

Fallback rate

unknown

Runtime metrics

Observed P50

unknown

Observed P95

unknown

Rate limit

unknown

Estimated cost

unknown

No benchmark suites or observed failure patterns are available.

Media & Demo

Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.

Missingno-media
No screenshots, media assets, or demo links are available.

Related Agents

Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.

Self-declaredprotocol-neighbors
GITHUB_REPOSactivepieces

Rank

70

AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents

Traction

No public download signal

Freshness

Updated 2d ago

OPENCLAW
GITHUB_REPOScherry-studio

Rank

70

AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs

Traction

No public download signal

Freshness

Updated 5d ago

MCPOPENCLAW
GITHUB_REPOSAionUi

Rank

70

Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!

Traction

No public download signal

Freshness

Updated 6d ago

MCPOPENCLAW
GITHUB_REPOSCopilotKit

Rank

70

The Frontend for Agents & Generative UI. React + Angular

Traction

No public download signal

Freshness

Updated 23d ago

OPENCLAW
Machine Appendix

Contract JSON

{
  "contractStatus": "ready",
  "authModes": [
    "api_key",
    "oauth"
  ],
  "requires": [
    "openclew",
    "lang:typescript"
  ],
  "forbidden": [],
  "supportsMcp": false,
  "supportsA2a": false,
  "supportsStreaming": false,
  "inputSchemaRef": "https://github.com/ad2546/chirp#input",
  "outputSchemaRef": "https://github.com/ad2546/chirp#output",
  "dataRegion": "global",
  "contractUpdatedAt": "2026-02-24T19:57:22.652Z",
  "sourceUpdatedAt": "2026-02-24T19:57:22.652Z",
  "freshnessSeconds": 4423568
}

Invocation Guide

{
  "preferredApi": {
    "snapshotUrl": "https://xpersona.co/api/v1/agents/ad2546-chirp/snapshot",
    "contractUrl": "https://xpersona.co/api/v1/agents/ad2546-chirp/contract",
    "trustUrl": "https://xpersona.co/api/v1/agents/ad2546-chirp/trust"
  },
  "curlExamples": [
    "curl -s \"https://xpersona.co/api/v1/agents/ad2546-chirp/snapshot\"",
    "curl -s \"https://xpersona.co/api/v1/agents/ad2546-chirp/contract\"",
    "curl -s \"https://xpersona.co/api/v1/agents/ad2546-chirp/trust\""
  ],
  "jsonRequestTemplate": {
    "query": "summarize this repo",
    "constraints": {
      "maxLatencyMs": 2000,
      "protocolPreference": [
        "OPENCLEW"
      ]
    }
  },
  "jsonResponseTemplate": {
    "ok": true,
    "result": {
      "summary": "...",
      "confidence": 0.9
    },
    "meta": {
      "source": "GITHUB_OPENCLEW",
      "generatedAt": "2026-04-17T00:43:31.628Z"
    }
  },
  "retryPolicy": {
    "maxAttempts": 3,
    "backoffMs": [
      500,
      1500,
      3500
    ],
    "retryableConditions": [
      "HTTP_429",
      "HTTP_503",
      "NETWORK_TIMEOUT"
    ]
  }
}

Trust JSON

{
  "status": "unavailable",
  "handshakeStatus": "UNKNOWN",
  "verificationFreshnessHours": null,
  "reputationScore": null,
  "p95LatencyMs": null,
  "successRate30d": null,
  "fallbackRate": null,
  "attempts30d": null,
  "trustUpdatedAt": null,
  "trustConfidence": "unknown",
  "sourceUpdatedAt": null,
  "freshnessSeconds": null
}

Capability Matrix

{
  "rows": [
    {
      "key": "OPENCLEW",
      "type": "protocol",
      "support": "unknown",
      "confidenceSource": "profile",
      "notes": "Listed on profile"
    }
  ],
  "flattenedTokens": "protocol:OPENCLEW|unknown|profile"
}

Facts JSON

[
  {
    "factKey": "docs_crawl",
    "category": "integration",
    "label": "Crawlable docs",
    "value": "6 indexed pages on the official domain",
    "href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
    "sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
    "sourceType": "search_document",
    "confidence": "medium",
    "observedAt": "2026-04-15T05:03:46.393Z",
    "isPublic": true
  },
  {
    "factKey": "protocols",
    "category": "compatibility",
    "label": "Protocol compatibility",
    "value": "OpenClaw",
    "href": "https://xpersona.co/api/v1/agents/ad2546-chirp/contract",
    "sourceUrl": "https://xpersona.co/api/v1/agents/ad2546-chirp/contract",
    "sourceType": "contract",
    "confidence": "medium",
    "observedAt": "2026-02-24T19:57:22.652Z",
    "isPublic": true
  },
  {
    "factKey": "auth_modes",
    "category": "compatibility",
    "label": "Auth modes",
    "value": "api_key, oauth",
    "href": "https://xpersona.co/api/v1/agents/ad2546-chirp/contract",
    "sourceUrl": "https://xpersona.co/api/v1/agents/ad2546-chirp/contract",
    "sourceType": "contract",
    "confidence": "high",
    "observedAt": "2026-02-24T19:57:22.652Z",
    "isPublic": true
  },
  {
    "factKey": "schema_refs",
    "category": "artifact",
    "label": "Machine-readable schemas",
    "value": "OpenAPI or schema references published",
    "href": "https://github.com/ad2546/chirp#input",
    "sourceUrl": "https://xpersona.co/api/v1/agents/ad2546-chirp/contract",
    "sourceType": "contract",
    "confidence": "high",
    "observedAt": "2026-02-24T19:57:22.652Z",
    "isPublic": true
  },
  {
    "factKey": "vendor",
    "category": "vendor",
    "label": "Vendor",
    "value": "Zizi Cat",
    "href": "https://github.com/zizi-cat/chirp",
    "sourceUrl": "https://github.com/zizi-cat/chirp",
    "sourceType": "profile",
    "confidence": "medium",
    "observedAt": "2026-02-24T19:43:14.176Z",
    "isPublic": true
  },
  {
    "factKey": "handshake_status",
    "category": "security",
    "label": "Handshake status",
    "value": "UNKNOWN",
    "href": "https://xpersona.co/api/v1/agents/ad2546-chirp/trust",
    "sourceUrl": "https://xpersona.co/api/v1/agents/ad2546-chirp/trust",
    "sourceType": "trust",
    "confidence": "medium",
    "observedAt": null,
    "isPublic": true
  }
]

Change Events JSON

[
  {
    "eventType": "docs_update",
    "title": "Docs refreshed: Sign in to GitHub · GitHub",
    "description": "Fresh crawlable documentation was indexed for the official domain.",
    "href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
    "sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
    "sourceType": "search_document",
    "confidence": "medium",
    "observedAt": "2026-04-15T05:03:46.393Z",
    "isPublic": true
  }
]

Sponsored

Ads related to chirp and adjacent AI workflows.