feat(alexandria): default search to web, alexandria, and skills (1.28.1)
Updates the Alexandria CLI for the latest Exchange changes and bumps the package to 1.28.1. With an API key and no --sources, search sends web, alexandria, and skills. Main already published 1.28.0, so this release note moved forward. This does not publish to npm or tag a release. Rebased onto current main.
Commands and flags
The skills surface is four operations: list, read, create, and update. skills list|read|create|update are the same commands as find-skills, read-skill, create-skill, and update-skill.
find-toolsretries once when the scrape returns HTTP 503query_embed_unavailable. It waits forRetry-Afterand never longer than 3 seconds, reuses the same request id, and if the second attempt fails printsretryable: truewith a message to run the command again.- There is no sharing option.
skills createsendsfrom,name,description,body, andslug.skills updatesendsid,baseVersion,name,description,body,enabled, anddiscoverable. Both accept--body-filein place of--bodyand--request-idto retry the same save.--enabledand--discoverableturn a skill off or hide it. There is no delete, and no Exchange route was added for sharing. - A successful
skills createorskills updateprintshttps://www.firecrawl.dev/app/alexandria/skills/<slug>, using the slug without theteam:prefix, and includes that link asurlin--json. ExchangesharePath(/skills/s/<publicId>) is not used. skills listtakes a natural-language goal. Official and provider skills are ranked semantically; team skills still match every word.--provider <provider>sendsprovider,q, andpageand follows pages until the catalogue is covered (including when Exchange omitstotal). It matchesprovider.slugandplugin.idand does not re-filter the server's ranking by literal words. A named provider includes the execution-only skills Exchange returns for it. The unfiltered catalogue does not call the provider-skills endpoint.skills readreads a Firecrawl or team skill by id.--provider,--plugin, and--skillread a provider skill;--filereads its file (GET /exchange/provider-skills/:provider/:plugin/:skill/file).searchacceptsskillsin--sources. With an API key and no--sources, it sendsweb,alexandria, andskills. An explicit--sourceslist is used as given (alexandria is still added when a key is set). A search without a key does not addskills. When the response includesdata.skills(id, name, description, sourceofficialorprovider, optional provider slug, similarity), search prints a Skills section after web results and tools. Official and team cards hintfirecrawl skills read <id>. Provider cards hintfirecrawl skills read --provider <provider> --plugin <plugin> --skill <skill>.--jsonincludes the same cards. A response withoutdata.skillsis unchanged.- No
--asyncflag. People Data Labs async enrichment stays execution-only.
Provider skills are forwarded
apps/api in firecrawl/firecrawl does forward them. GET and PATCH /exchange/provider-skills{/*path} proxy to Exchange /v1/provider-skills (FORWARDED_PATH_ROOTS, Labs rate limit, no exchangeRetrieve requirement; firecrawl/firecrawl#5487). POST, PUT, and DELETE are not registered. The CLI only lists and reads, so it uses GET. Search skill cards use POST /v2/search with source skills (firecrawl/firecrawl#5560).
Prices
src/utils/alexandria-prices.ts records merged execution prices:
- Carbon Arc: 1000 credits per call.
- Influencers.club: the live capability schedule (connected socials 165 per call, search 45 per creator returned or 56 with
return_filter_values, similar creators 50, audience overlap and full enrich 330, and the remaining enrich, content, and free dictionary lookups). - People Data Labs (#1144, now merged):
person/enrichandperson/identify60 per successful call;person/search,person/bulk,company/search, andcompany/bulk50 per returned or matched record;company/enrich50 per successful call; preview, IP enrich, and jobs endpoints 1; cleaners and autocomplete 0. Misses are free.
list and find-tools fill a missing discovery price from that catalog when --include-costs is set. search always omits tool prices.
Tests
Integration coverage is in src/__tests__/alexandria-beta.test.ts (retry cap, unknown --shared rejected, --enabled and --discoverable on update, the app skill link on create and update, --provider query and paging against the live object shape, paging when total is omitted, provider read with --file, default skills on search). Search skill cards, the default source list, and the list-query help are in src/__tests__/commands/search.test.ts. Price and helper checks are in src/__tests__/utils/alexandria-prices.test.ts.


Summary by cubic
Updates the Alexandria CLI for the latest Exchange changes and bumps the package to 1.28.1 without publishing to npm or tagging a release. With an API key and no --sources, search now sends web, alexandria, and skills.
Skills
- Merging main retires the
githubsearch category andresearch search-github; 2xx Exchange envelopes reporting success false are now treated as errors across skill and tool calls. find-toolsretries once on HTTP 503query_embed_unavailable, honoringRetry-Aftercapped at 3 seconds and reusing the request id; a second failure printsretryable: true. The printed request id is also sent asX-Request-ID.- With an API key,
searchsendsweb,alexandria, andskillsunless--sourcesis set; an explicit list is kept as given, and a keyless search adds nothing. A discovery refusal retries only when every discovery source was added by the CLI. skills listtakes a natural-language goal and lists provider-published skills with--provider, including execution-only skills, capping results at 20 by default. It handles flat and grouped payloads, keeps paging when Exchange omitstotal, and keeps provider skills without an id; team skills still match every word.read-skillreads a provider skill with--provider,--plugin, and--skill, or its file with--file, and fails when the file cannot be loaded.create-skillandupdate-skillsendfrom/name/description/body/slugandid/baseVersion/enabled/discoverable; Exchange accepts no sharing option, and--enabled falseor--discoverable falseturn a skill off or hide it. A successful save prints the app skill page, included asurlin--json.searchprints a Skills section after web results and tools whendata.skillsis present and includes it in--json; the skill id line and the read hint print only when the card has an id. Read hints quote provider, plugin, skill, and id values that are not plain tokens. A response without skills is unchanged.
Retries and prices
- Merged prices record Carbon Arc (1000 per call), Influencers.club (per-capability, 56 for search with
return_filter_values, 20 for a TikTok transcript), and People Data Labs (misses free).listandfind-toolsfill missing discovery prices from the catalog with--include-costs;searchalways omits tool prices. People Data Labs async enrichment stays execution-only and has no flag.