Add ask-web and tts: the two AI tools we already pay for - #17
Merged
Conversation
Working from a list of 131 AI tools, the question was which of them are
actually ours. The team vault answers it: of the thirteen keys in
profullstack-sharable-keys--prod, five appear on that list, and two of
those five had no command here.
ask-web Perplexity — a question answered from the live web, with the
pages it came from
tts ElevenLabs — text read aloud in a named voice, audio kept
Not named `ask` or `say`: both already resolve to something else on PATH,
and a command that shadows another one silently is worse than a longer
name. No pit alias for the same reason.
`ask-web` numbers its source list from the response's positional
`citations` field, whose order *is* the [n] numbering, and joins titles
on by URL from `search_results`, which arrives in its own order —
numbering from the titles would mislabel every source, quietly. A marker
the answer cites with no source behind it is a warning on stderr rather
than a line dropped.
`tts` resolves a voice by ID, full label, or the human part of it, since
the account's are called things like "River - Relaxed, Neutral,
Informative". An ambiguous prefix is an error naming the candidates: a
silent pick would change narrator the day the account gains a voice.
Voice settings are omitted unless asked for, so a call cannot overwrite
what a shared account tuned in the dashboard.
KNOWN_KEYS gains perplexity and elevenlabs. The rule that kept it at two
still holds — a key earns its place by being read by a command here, not
by being one the team owns — and the vault's remaining nine stay in the
vault.
Gemini was the third candidate and is deliberately absent: the vault's
GEMINI_API_KEY returns 400 "User location is not supported for the API
use" from here, so a provider built on it would ship broken.
Both verified against the live APIs. Suite is 224 tests.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ThreatCrush Security Scan6 finding(s) MEDIUM: 1 | LOW: 5
Snippets are redacted; ThreatCrush never prints matched credential material. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
From a list of 131 AI tools, the useful question was which of them are actually ours. The team vault answers it: of the 13 keys in
profullstack-sharable-keys--prod, five appear on that list — OpenAI, Anthropic, Perplexity, ElevenLabs, Gemini — and two of those had no command here.ask-webttsNeither is named
askorsay— both already resolve to something else onPATH, and a command that shadows another one silently is worse than a longer name. No pit alias, for the same reason.The parts worth reviewing
ask-webnumbers its sources fromcitations, notsearch_results. The response carries both, and they are not redundant:citationsis a positional URL list whose order is the[n]the model wrote, whilesearch_resultscarries the titles in whatever order it likes. Numbering from the titles would mislabel every source, quietly. A marker the answer cites with no source behind it is reported on stderr rather than dropped.ttsrefuses an ambiguous voice. Voices are called things likeRiver - Relaxed, Neutral, Informative, so a name may be an ID, the full label, or just the human part. A prefix matching two voices is an error naming both — a silent pick would change narrator the day the account gains a voice, with nothing on screen to explain why.voice_settingsis omitted entirely unless asked for, so a call cannot overwrite what a shared account tuned in the dashboard.KNOWN_KEYSgainsperplexityandelevenlabs. The rule that kept it at two still holds — a key earns its place by being read by a command here, not by being one the team owns — and the vault's other nine stay in the vault.Gemini is deliberately absent
It was the third candidate. The vault's
GEMINI_API_KEYreturns400 User location is not supported for the API usefrom this network, so a provider built on it would ship broken. Worth knowing before someone tries again.Verification
pnpm typecheckclean.cli-tools listandcli-tools configpick both up.🤖 Generated with Claude Code