Integrations Technical Skill
How Posting Works
- •Agent creates files in
agent/outputs/{platform}/ - •
process-outputs.ymlworkflow runs on push - •Calls
agent/integrations/{platform}/post.shfor each file - •Success → file moves to
posted/ - •Failure → file stays for next run
X (Twitter) Integration
Credentials (OAuth 1.0a - preferred)
Stable tokens that don't expire.
| Name | Type | Description |
|---|---|---|
X_API_KEY | var | Consumer API Key |
X_API_KEY_SECRET | secret | Consumer API Secret |
X_ACCESS_TOKEN | secret | Access Token |
X_ACCESS_TOKEN_SECRET | secret | Access Token Secret |
Credentials (OAuth 2.0 - fallback)
⚠️ Refresh token rotates on each use - not recommended.
| Name | Type | Description |
|---|---|---|
X_CLIENT_ID | var | OAuth 2.0 Client ID |
X_CLIENT_SECRET | secret | OAuth 2.0 Client Secret |
X_REFRESH_TOKEN | secret | Refresh token (rotates!) |
Rate Limits
- •Free tier: 17 tweets per 24-hour rolling window (observed limit; official docs say higher but enforcement is stricter)
- •Workflow adds 5s delay between posts
- •On 429 error, stops processing remaining files
Evidence: Week 1 (2026-02-03) hit 429 after 17th tweet. See agent/memory/learnings/2026-02-03-x-rate-limits.md.
Diagnostics
Check credentials configured
bash
gh variable list | grep X_
If variables exist, presume secrets are also configured.
Check posting runs
bash
gh run list --workflow=process-outputs.yml --limit 5 gh run view <run-id> --log
Common Issues
| Symptom | Cause | Fix |
|---|---|---|
| 429 errors | Rate limit | Wait 15+ min |
Files in posted/ but not posted | Bad exit code | Check post.sh returns 1 on failure |
| Auth errors | Missing credentials | Check gh variable list |
Adding New Platforms
- •Create
agent/integrations/{platform}/post.sh- •Takes content as arg:
post.sh "content" - •Returns 0 on success, 1 on failure
- •Takes content as arg:
- •Create
agent/outputs/{platform}/ - •Add credentials to
process-outputs.ymlenv section