Ae1
High
- Category
- analysis-evasion
- Content
- `fx-fetch.mjs` — free, no credentials, no state. Calls `api.fxtwitter.com` only.
- Confidence
- 100% confidence
- Finding
- Referenced artifact was not completely inspected
Security audit
Security checks for vulnerabilities and agentic risk
This skill appears purpose-aligned for pulling X/Twitter content, but users should know it sends requested URLs or searches to FxTwitter or xAI and can read an xAI key from a local .env file.
Install only if you are comfortable sending the X/Twitter URLs or search queries you request to FxTwitter or xAI. Keep XAI_API_KEY scoped to xAI, avoid placing unrelated secrets in the working directory .env, and watch the documented paid Grok usage cap.
- `fx-fetch.mjs` — free, no credentials, no state. Calls `api.fxtwitter.com` only.
- `grok-x-search.mjs` — requires `XAI_API_KEY`. Writes `.grok-state.json` next to the script to enforce the daily cap. Calls `api.x.ai` only.
* grok-x-search.mjs replies <url> * grok-x-search.mjs search <query> [--from handle] * * Requires XAI_API_KEY in env or .env in current directory. * Daily cap: 20 calls (override: GROK_DAILY_CAP). */ import https from 'https';
* grok-x-search.mjs replies <url> * grok-x-search.mjs search <query> [--from handle] * * Requires XAI_API_KEY in env or .env in current directory. * Daily cap: 20 calls (override: GROK_DAILY_CAP). */ import https from 'https';
function getKey() {
if (process.env.XAI_API_KEY) return process.env.XAI_API_KEY;
const f = resolve(process.cwd(), '.env');
if (existsSync(f)) { const m = readFileSync(f, 'utf8').match(/^XAI_API_KEY=(.+)$/m); if (m) return m[1].trim(); }
return null;
}tools: [{ type: 'x_search', ...toolParams }],
});
return new Promise((resolve, reject) => {
const req = https.request('https://api.x.ai/v1/responses', {
method: 'POST',
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${apiKey}` },
}, res => {No suspicious patterns detected.