From armory
Performs AI-optimized web searches via Tavily API, returning clean AI-ready snippets for current info, news, and research. Supports deep mode, news filtering by days, result count; triggers on general search queries without URLs.
npx claudepluginhub mathews-tom/armory --plugin armoryThis skill uses the workspace's default tool permissions.
Web search and URL content extraction powered by Tavily API. Returns clean, structured results
Implements Playwright E2E testing patterns: Page Object Model, test organization, configuration, reporters, artifacts, and CI/CD integration for stable suites.
Guides Next.js 16+ Turbopack for faster dev via incremental bundling, FS caching, and HMR; covers webpack comparison, bundle analysis, and production builds.
Discovers and evaluates Laravel packages via LaraPlugins.io MCP. Searches by keyword/feature, filters by health score, Laravel/PHP compatibility; fetches details, metrics, and version history.
Web search and URL content extraction powered by Tavily API. Returns clean, structured results optimized for AI consumption — no HTML noise, no cookie banners, no pagination.
| Situation | Tool | Reason |
|---|---|---|
| Need current information on a topic | search.mjs | Tavily aggregates and ranks live results |
| Need news from the last N days | search.mjs --topic news --days N | News mode filters recency |
| Have a specific URL, need full text | extract.mjs | Extracts clean article content from URL |
| Need documentation for a library | search.mjs --deep | Deep mode covers docs sites thoroughly |
| Need a static resource already known | direct fetch or read | Skip Tavily if no live lookup needed |
| Need multiple competing perspectives | search.mjs -n 10 | Increase result count for breadth |
Both scripts exist at scripts/ and require TAVILY_API_KEY in the environment.
scripts/search.mjs — query-based web searchscripts/extract.mjs — full content extraction from a URLnode {baseDir}/scripts/search.mjs "query"
node {baseDir}/scripts/search.mjs "query" -n 10
node {baseDir}/scripts/search.mjs "query" --deep
node {baseDir}/scripts/search.mjs "query" --topic news
node {baseDir}/scripts/search.mjs "query" --topic news --days 3
| Option | Default | Description |
|---|---|---|
-n <count> | 5 | Number of results to return (max: 20). Increase for broader coverage. |
--deep | off | Advanced search mode — slower but more comprehensive. Use for complex research questions, technical deep-dives, or when standard results are insufficient. |
--topic <topic> | general | general for standard search; news for current events filtered by recency. |
--days <n> | — | Only valid with --topic news. Limits results to articles published in the last n days. |
node {baseDir}/scripts/extract.mjs "https://example.com/article"
Use when you already have a URL and need the full page content — Tavily strips navigation, ads, and boilerplate, returning structured article text.
Search results return a JSON array. Each result contains:
[
{
"title": "Article or page title",
"url": "https://source.com/path",
"content": "Clean text snippet (AI-optimized excerpt)",
"score": 0.92
}
]
score is Tavily's relevance ranking (0–1). Higher is more relevant. When parsing results,
use content for summarization and url for attribution. Do not treat content as the full
article — use extract.mjs on the URL if complete text is needed.
Extract output returns a single object:
{
"url": "https://source.com/path",
"raw_content": "Full extracted page text..."
}
| Error | Cause | Resolution |
|---|---|---|
TAVILY_API_KEY not set | Environment variable missing | Set TAVILY_API_KEY before running. Get a key at https://tavily.com |
401 Unauthorized | Invalid API key | Verify the key value; regenerate at Tavily dashboard if needed |
429 Too Many Requests | Rate limit hit | Reduce request frequency; free tier allows 1000 API credits/month |
Empty results array [] | No matches found | Broaden or rephrase the query; try --deep for niche topics |
ETIMEDOUT / timeout | Network or API latency | Retry once; --deep searches take longer (up to 30s) |
| Extract returns empty content | Page blocks scrapers | Use a different source or fall back to a manual fetch approach |
--deep costs more.general mode. Use --topic news for recency-sensitive queries.