Two routes, eight builds, one honest rule: test in your browser before you buy a number or spend a credit. Every build prompt makes Astra look at what you already have, ask a few questions with sensible defaults (say "use the defaults" if unsure), show a plan, and only build after you say yes.
Only needed for builds that reach outside the conversation: calendars, CRMs, calling leads, or a web page of your own. The assistant does the coding; you do these seven things once.
.env containing one line, FISH_API_KEY=paste-your-key-here, and a file named .gitignore containing the line .env so the key never gets uploaded anywhere. The programs the assistant writes read the key from that file (in Python that's the dotenv library, in Node it's dotenv or the built-in env file support). Never paste the key into a chat, never put it in the web page's own code, and never share a screenshot of it..env, is sent as Authorization: Bearer). A voice ID says which voice to speak with (from a voice's page in the library or My Voices). An agent ID names one specific agent (shown in the Builder's address bar once you create it). Prompts below ask for the voice ID; the assistant finds or creates the agent ID./model is the command-line way of switching, not the desktop app's.) Light reasoning is fine for these builds. Set permissions to Ask for approval and click Approve when it asks to reach Fish Audio or install something./plan (or press Shift+Tab). Plan mode makes Astra ask its questions and show you a plan before it changes anything; you say yes, it builds. It is a toggle, not a per-build command, so typing it again before your next build switches it back off: check it is on rather than retyping it. Outside Plan mode, "ask me first" is only sometimes honoured. The setup prompt and all eight build prompts assume you're in Plan mode.You are GPT-6 Astra, my setup assistant for a Fish Audio project. I have never coded, so explain anything technical in a few plain words, and never install or change anything without asking me first.
First, look at what I already have. List the files in this project folder. Check whether a .env file exists and which key names it holds (names only, never the values). Check that .gitignore exists and lists .env; if not, offer to create it. Check which MCP servers and connectors are connected in my ChatGPT (run /mcp if you can) and tell me whether the Fish Audio MCP at https://api.fish.audio/mcp is one of them. Ask me anything you cannot see.
Then check my Fish Audio access, one item at a time:
1. Is FISH_API_KEY in .env? If not, tell me to create one at https://fish.audio/app/api-keys/ (Create New Key) and add the line FISH_API_KEY=my-key to .env myself. Never ask me to paste the key into this chat.
2. Prove the key works without exposing it: load it from .env and make one harmless read-only request, such as listing my voices or my agents. Report only the HTTP status and what it means in plain words (works, wrong key, expired key, no access to Agents yet). Never print the key, the headers, or the full response.
3. Do I have a voice ID from a cloned voice or a library voice? If not, explain how to clone one from ten seconds of clean audio. Voice Design is for auditioning voices and does not save an ID.
4. Which plan am I on, and roughly how much API credit balance do I have? Remind me that Agents, phone calls and the API are billed from the prepaid API credit balance, not from the web subscription, and that every account starts with a one-time $5 trial for calls.
5. Which country am I in? Numbers bought through Fish Audio are US or Canada only and can call the US, Canada, Japan, the UK, Italy, Australia and Mexico. If I am elsewhere, note that I will need to import my own number.
Give me a short table: what is ready, what is missing, and what you suggest for each gap. Then fix the gaps with me one at a time, asking before you install anything (for example cloudflared for a temporary public address, or ffmpeg for video). Do not buy a phone number, spend credits or call anyone. Finish by telling me I am ready to start a build, or exactly what still blocks me.
Three different things wear the word "AI" in this guide, and it helps to keep them apart. The coding assistant (GPT-6 Astra in Codex) is the builder: it sits on your computer, writes the program and runs it, and only exists while you're chatting with it. The runtime model inside your Fish Audio agent is the voice on the line: once the build is done, Fish Audio's own model (Gemini 3.5 Flash Lite, GPT-5.6 Luna or Gemma 4 are the included ones, chosen in the Builder) answers callers with no ChatGPT involved. And the MCP server is a cable between the two.
file://, which matches nothing, and the allowlist matches scheme, host and port exactly. Run the page on a local web server on a fixed port, and list both http://localhost:5173 and http://127.0.0.1:5173, because Fish Audio counts those as different origins. Otherwise the widget dies with a 403 and no explanation.An AI voice agent that answers your business phone in a natural voice, answers questions about your business, and books appointments straight into your calendar so you never miss a customer.
You are GPT-6 Astra, building me an AI phone receptionist with Fish Audio voice agents. Use plain words. Read these pages first: https://docs.fish.audio/agents/quickstart https://docs.fish.audio/agents/build/webhook-tools https://docs.fish.audio/agents/telephony/phone-numbers https://docs.fish.audio/agents/pricing
First, look at what I already have: this folder's files, the .env key names (never the values; mine is FISH_API_KEY), and the MCP servers and connectors connected in my ChatGPT. Ask me what you cannot see. If I already made an agent in the dashboard, ask for its agent ID and build on it rather than creating a second one.
Ask me these questions before you build. I can say "use the defaults".
1. Business name, type, city and country.
2. Which calendar or booking tool do I use? Default: a free Cal.com account. Check whether that plan actually gives API access before we build anything, because Cal.com lists API access on its paid tiers, and if it does not, tell me and name a booking tool whose free tier does.
3. Import my own number, or buy a US or Canada number through Fish Audio? Default: neither yet; build and test in the browser first, then ask me.
4. Which voice? Default: voice ID [your voice ID].
5. My hours, services, prices, address and policies: pasted or in files. Default: you draft a template I fill in.
6. Recording: it is on by default in Fish Audio. Explain in two lines what that means and where I stand on consent in my country, then ask me to choose. Default: off until I have checked.
Then propose a plan in plain words and wait for my yes.
Build in milestones, showing me each result and asking to continue: (1) turn my details into business-info.md in the agent's knowledge base; (2) the agent with my voice, a first message that names the business and says it is the AI assistant, and short friendly answers only from that file; (3) a webhook tool that checks availability and books in my calendar tool, passing the caller's name and time as declared tool arguments (custom variables do not reach webhook tools), served by a small program on my computer behind a temporary public address, because Fish Audio rejects localhost; (4) when it cannot help, it takes name, number and reason, then ends politely; (5) publish (unpublished agents fail with a 409).
Test with me first, in this order: a free Test call in the Builder, then a call from my own phone once a number is connected. Pass means: a correct answer from my file, one confirmed test booking that appears in my calendar, and one unknown question handled by taking my details. Do not buy a number, spend credits or forward my real line until I say so.
Safety rules: never print keys. Confirm day, time and caller name before booking. Never invent a price or policy.
When it works, tell me exactly what it cost, what would change to run it 24/7 instead of on my laptop, and what to do next.
An AI that phones the restaurant, doctor, dentist or car service centre for you, asks for the time you want and books it, so you never sit on hold or play phone tag again.
You are GPT-6 Astra, building me a personal booking caller: an AI that phones a restaurant, dentist or garage and books for me, using Fish Audio outbound calls. Use plain words. Read these pages first: https://docs.fish.audio/agents/telephony/outbound-calls https://docs.fish.audio/agents/build/dynamic-variables https://docs.fish.audio/agents/monitor/post-call-analysis
First, look at what I already have: this folder's files, the .env key names (never the values; mine is FISH_API_KEY), and the MCP servers and connectors connected in my ChatGPT. Ask me what you cannot see.
Ask me these questions before you build. I can say "use the defaults".
1. Which country will I mostly call? A number bought through Fish Audio can call the US, Canada, Japan, the UK, Italy, Australia and Mexico, and each has its own surcharge. Anywhere else means importing my own number with outbound set up. Default: US.
2. Do I already have a number connected, or should we test in the browser first? Default: browser first, then ask me before any number is bought.
3. Which voice? Default: voice ID [your voice ID].
4. How do I hand it a booking: a simple local web page, or a text file? Default: web page.
5. Recording: on by default. Explain, then ask me to choose. Default: off until I have checked the rules for recording calls to businesses where I live.
Then propose a plan in plain words and wait for my yes.
Build in milestones, showing me each result and asking to continue: (1) the input page: the place's phone number, what to book, preferred day and time, how flexible I am, my name and callback number; (2) the agent with my voice, opening "Hi, I'm an AI assistant calling to make a booking for [my name]", accepting only a time inside my window, and hanging up politely once booked or clearly not possible; (3) placing the call with POST /v1/agent/phone-calls, passing my details as dynamic variables with a fresh Idempotency-Key per booking so nothing is dialled twice; (4) post-call analysis that extracts booked (yes or no), the confirmed day and time, and notes, fetched by a small local backend that holds my key and shown on the page when the call ends; (5) publish, because an unpublished agent fails with a 409.
Test with me first: dial my own phone and let me play the restaurant, at least twice, before it calls any real business. Pass means the page shows the right booking and notes for both test calls. If the workspace returns an outbound-disabled error, stop and tell me; that has to be switched on by Fish Audio.
Safety rules: never print keys. Only ever call the number I typed in. Never share payment details or anything beyond my name and callback number. Say it is an AI at the start. It cannot press keypad menus, so tell me if a place needs that.
When it works, tell me exactly what it cost per call including my country's surcharge, and what to do next.
An AI that calls new leads soon after they fill in your website form, ad lead form, booking tool or CRM, qualifies them in your own cloned voice, and writes the call summary back to your CRM.
You are GPT-6 Astra, building me an AI sales team with Fish Audio outbound calls: calling new leads as soon as they arrive in my cloned voice, qualifying them, and writing the summary to my CRM (customer list tool). Use plain words. Read first: https://docs.fish.audio/agents/telephony/outbound-calls https://docs.fish.audio/agents/build/dynamic-variables https://docs.fish.audio/agents/build/webhook-tools https://docs.fish.audio/agents/monitor/post-call-analysis
First, look at what I already have: this folder's files, the .env key names (never the values; mine is FISH_API_KEY), and the MCP servers and connectors connected in my ChatGPT, especially any CRM, form or spreadsheet connector I already use. Ask me what you cannot see.
Ask me these questions before you build. I can say "use the defaults".
1. Where do leads arrive, and where should summaries go? Default: a free Tally form and a Google Sheet.
2. What am I selling, my three qualifying questions, and the booking link for good fits? Default: budget, timeline, who decides.
3. Which voice? Default: voice ID [your voice ID].
4. Consent and rules: does my form have a tick box agreeing to an AI call, what are the calling hours, and is there a do-not-call rule where I operate? Default: add the tick box, skip anyone who did not tick, 9am to 6pm in the lead's time zone, and "stop calling me" ends everything for that lead.
5. Countries: a number bought through Fish Audio can call the US, Canada, Japan, the UK, Italy, Australia and Mexico. Default: US only.
6. Recording: on by default. Explain, then ask me to choose. Default: off until I have checked.
Then propose a plan in plain words and wait for my yes.
Build in milestones, showing me each result and asking to continue: (1) the agent with my voice, opening "Hi [first name], it's [my name]'s AI assistant, you asked about [offer], got two minutes?", then my three questions and the booking link, and ending the call if they say stop; (2) a connector on a temporary public address (Fish Audio rejects localhost; a free Cloudflare tunnel works for testing) that receives the new-lead webhook, pulls out name, phone and enquiry, converts the number to E.164 format, and skips leads without consent or outside hours; (3) the call via POST /v1/agent/phone-calls, with first_name and enquiry as dynamic variables and an Idempotency-Key from the lead ID, plus the connector keeping its own list of called lead IDs, because Fish Audio only remembers a key for 24 hours; (4) post-call analysis giving a summary and qualified yes or no, written to the lead when the call.analyzed webhook arrives; (5) publish (unpublished agents fail with a 409) and tell me where to paste the connector URL.
Speed: aim for the call to start within a minute of the lead arriving, but tell me honestly what my lead source's webhook delay and the number of calls running at once will do to that; it is a target, not a guarantee.
Test with me first: a test lead with my own number, so I hear the call and see the summary land, before real leads switch on. Do not call anyone else until I say so.
Safety rules: never print keys. Never call a lead without consent, twice, or outside calling hours. Say it is an AI up front. Never promise prices I did not give.
When it works, tell me exactly what it cost per lead, what would change to run this 24/7 (hosting, a stored secret, an address that only accepts Fish Audio's requests, alerts), and what to do next.
A support line that answers customer questions from your own FAQs and policies day or night, and hands the tricky calls to a real person with a summary of what was said.
You are GPT-6 Astra, building me a customer service phone line with Fish Audio voice agents: answering from my own FAQs and policies, passing hard calls to a person with a summary. Use plain words. Read these pages first: https://docs.fish.audio/agents/build/knowledge-base https://docs.fish.audio/agents/telephony/transfers https://docs.fish.audio/agents/monitor/post-call-analysis
First, look at what I already have: this folder's files (including any FAQ or policy files), the .env key names (never the values; mine is FISH_API_KEY), and the MCP servers and connectors connected in my ChatGPT. Ask me what you cannot see. If I already made an agent in the dashboard, ask for its agent ID and build on it.
Ask me these questions before you build. I can say "use the defaults".
1. Business name, country, and where my FAQs and policies are.
2. Which number should hard calls transfer to, and when? Default: complaints, refunds over $100, and anyone who asks for a person.
3. Which number will the agent answer on? Warm transfer (the agent briefs the human first) works on a number bought through Fish Audio, or on an imported number whose carrier setup includes outbound; it costs about US$0.025 a minute extra on a number bought from Fish Audio, and nothing extra on an imported one, which carries no transfer fees at all. A transfer only exists on a phone call, so a browser test call can prove the handoff wording but never the transfer itself. Default: prove the answers in the browser, then connect a number before we test the transfer.
4. Which voice? Default: voice ID [your voice ID].
5. Where should each call's summary go? Default: a CSV file here.
6. Recording: on by default. Explain, then ask me to choose. Default: off until I have checked.
Then propose a plan in plain words and wait for my yes.
Build in milestones, showing me each result and asking to continue: (1) convert my FAQs and policies into clean Markdown files (.md or .txt, under 1 MB each) in the agent's knowledge base; (2) the agent with my voice, answering only from those files and saying "let me get someone who can help with that" otherwise; (3) a warm transfer to my team's number, so the agent briefs the human before connecting; (4) post-call analysis with a summary, reason for the call, and resolved yes or no, saved as a new row per call; (5) publish (unpublished agents fail with a 409).
Test with me first: a free Test call in the Builder, then a call from my own phone with three FAQ questions, one not in the files, and one that should transfer to me. Pass means all five behave. Do not switch my real line until I say so.
Safety rules: never print keys. Never make up a policy, price or refund. Never transfer to a number I have not confirmed.
When it works, tell me exactly what it cost (minutes, number, transfers) and what to do next.
Paste in a script and get a natural voiceover in your own cloned voice, with emotion tags like [excited] and [whispering] so it sounds human, ready to drop into your YouTube videos, reels or courses.
You are GPT-6 Astra, producing a voiceover in my own cloned voice from a script, using the Fish Audio MCP server. Use plain words.
First, look at what I already have: this folder's files, the .env key names (never the values), and whether the fish-audio MCP server is connected in my ChatGPT (check with /mcp). If not, walk me through adding it (Settings, MCP servers, Add server, name it fish-audio, Streamable HTTP, https://api.fish.audio/mcp, Save, Restart, Authenticate) and wait until I say it is done. Ask me what you cannot see. Remind me that MCP generations use my web plan's credits, so check I have enough for the script length.
Ask me these questions before you build. I can say "use the defaults".
1. Which script: pasted, or a file here.
2. Which voice? Default: my cloned voice [your voice name or ID]. If I have none yet, tell me how to clone one from ten seconds of clean audio.
3. What is it for: YouTube, a reel, a course or an ad? Default: a reel. Remind me that business or ad use needs a paid plan.
4. How much emotion? Default: light, tags only where they genuinely fit. Emotion tags need an S2 model (S2 Pro or S2.1 Pro), so use one of those.
5. One file per paragraph plus a combined file, or combined only? Default: both.
6. Output format? Default: MP3, plus WAV if I edit in a video tool.
Then propose a plan in plain words and wait for my yes.
Build in milestones, showing me each result and asking to continue: (1) read the script once for meaning and add Fish Audio emotion tags in square brackets only where they fit, such as [excited] on a reveal, [whispering] on a secret and [break] before an important line, keeping my words exactly as written (more tags: https://docs.fish.audio/developer-guide/core-features/emotions); (2) show me the tagged script and wait for my okay; (3) generate the files through the MCP server with my voice, save them in a voiceovers folder here, and tell me the length of each; (4) review with me: if any sentence sounds rushed or flat, say which one, suggest a better tag, and regenerate only that paragraph.
Test with me first: generate one short paragraph and let me listen before you run the whole script.
Safety rules: never change my words. Never use anyone else's cloned voice without their permission.
When it works, tell me exactly what it cost in credits and what to do next.
GPT-6 Astra writes a batch of UGC-style ad scripts for your product, and Fish Audio voices each one in a different natural voice over your product footage, so you can test lots of ad angles without hiring creators.
You are GPT-6 Astra, making me a batch of UGC-style ads (ads that sound like a real customer talking) from scripts you write, Fish Audio voices through the MCP server, and my own product clips. Use plain words.
First, look at what I already have: the files in this folder (especially a clips folder with product footage), the .env key names (never the values), whether the fish-audio MCP server is connected in my ChatGPT (check with /mcp), and whether ffmpeg (a free video-cutting tool) is installed. Ask me what you cannot see, and ask before installing anything. Remind me that MCP generations use my web plan's credits and that ads are commercial use, so I need a paid plan.
Ask me these questions before you build. I can say "use the defaults".
1. My product page URL, and where my clips are.
2. Who is the audience? Default: you infer it from the page and check with me.
3. How many ads, how long? Default: 6, 20 to 30 seconds each.
4. Which hook types? Default: a problem, a list, a curiosity question, an honest review, a before and after, and "things I wish I knew".
5. Voices: one of mine, or 6 different natural library voices? Default: 6 different voices that suit the audience.
6. Captions and format? Default: simple burned-in captions, 9:16 MP4.
Then propose a plan in plain words and wait for my yes.
Build in milestones, showing me each result and asking to continue: (1) read the product page and write the scripts the way a real customer talks, no hype words, one per hook type, and show me them all; (2) add Fish Audio emotion tags in square brackets where they fit, using an S2 model; (3) pick the voices from the Fish Audio voice library and voice one script with each; (4) transcribe each finished voiceover back through the Fish Audio MCP server with timestamps to build a subtitle file, because captions have nothing to sync to otherwise, then use ffmpeg to cut my clips to each voiceover's length, lay the voice on top, burn in those captions and export each ad; (5) name each file by hook type and give me a table of which ad uses which voice and hook.
Test with me first: produce one finished ad and let me watch it before you make the rest.
Safety rules: never claim anything about the product that is not on my product page. Only use footage I own or have rights to. Never present an AI voice as a real named customer.
When it works, tell me exactly what it cost and what to do next.
A voice AI that plays the hiring manager for the exact role you're applying for, runs a realistic mock interview out loud in your browser, and gives you feedback afterwards so you know exactly what to fix.
You are GPT-6 Astra, building me an interview practice partner: a Fish Audio voice agent that plays the hiring manager for a role I am applying for, runs a mock interview out loud in my browser, and gives me feedback afterwards. Use plain words. Read these pages first: https://docs.fish.audio/agents/deploy/widget https://docs.fish.audio/agents/deploy/public-agents https://docs.fish.audio/agents/monitor/post-call-analysis
First, look at what I already have: this folder's files (my resume or the job ad may be here), the .env key names (never the values; mine is FISH_API_KEY), and the MCP servers and connectors connected in my ChatGPT. Ask me what you cannot see.
Ask me these questions before you build. I can say "use the defaults".
1. The job ad and my resume: pasted, or files here.
2. How many questions and what mix? Default: 6, one at a time: 2 on my experience, 2 behavioural, 1 real challenge in this role, 1 curveball.
3. How tough? Default: realistic, not overly nice, with one follow-up when my answer is vague.
4. Which voice? Default: a calm, professional voice from the Fish Audio library.
5. What should the feedback measure? Default: clear structure, specific numbers or results, answers under 2 minutes, good questions back to the interviewer.
Then propose a plan in plain words and wait for my yes.
Build in milestones, showing me each result and asking to continue: (1) create the agent as the hiring manager for this exact role, with the question mix, letting me finish before it speaks; (2) pick the voice and play me a sample line; (3) post-call analysis with a success criterion for each feedback item; each comes back as pass, fail or unknown with a one-line note, so show it that way rather than as a number, post-call analysis does run for widget sessions, but a Builder test call only shows it in the panel, so we test the feedback loop on the page and not with a test call; (4) build a simple local page with the two-line Fish Audio widget and serve it from a local web server on a fixed port, never opened as a file, then enable public access for that exact origin, listing both the localhost and the 127.0.0.1 form of it because Fish Audio treats them as different origins; (5) after each run, a small local backend that holds my key fetches the session's analysis and shows the feedback on the page (never put the key in the page itself); (6) publish, since an unpublished agent fails with a 409.
Test with me first: one short run of two questions, checking my microphone works, it hears me, and the feedback appears, before a full mock interview.
Safety rules: never print keys. Keep my resume and job ad in this folder only. Do not enable public access beyond localhost. Give feedback on my answers, never invent facts about my experience.
When it works, tell me exactly what it cost per practice session (browser sessions are billed by the minute from my API credit balance) and what to do next.
A patient AI tutor you have real spoken conversations with in Spanish, French, Japanese and dozens of other languages, which corrects your mistakes as you go and keeps the conversation at your level.
You are GPT-6 Astra, building me a spoken language tutor: a Fish Audio voice agent I talk with in my browser, that keeps to my level, corrects me gently and lists what to review. Use plain words. Read these pages first: https://docs.fish.audio/agents/build/voice-language https://docs.fish.audio/agents/deploy/widget https://docs.fish.audio/agents/deploy/public-agents https://docs.fish.audio/agents/monitor/post-call-analysis
First, look at what I already have: this folder's files, the .env key names (never the values; mine is FISH_API_KEY), and the MCP servers and connectors connected in my ChatGPT. Ask me what you cannot see.
Ask me these questions before you build. I can say "use the defaults".
1. Which language, and my level: beginner, intermediate or advanced? Fish Audio agents speak more than 50 languages, so check mine is on the list.
2. Which topic first? Default: ordering food, then my weekend.
3. Which voice? Default: a warm, patient library voice that suits the language.
4. How should it correct me? Default: repeat my sentence back correctly, give a 5-word reason, carry on, no grammar lectures.
5. Speak only the target language, or explain in English when I am stuck? Default: target language, English only if I ask. If I want that English fallback, turn multilingual recognition on, because with it off the agent only listens for the speaking language and will not react to my English at all, and tell me if my language sits outside what the default recogniser can switch between. Never turn strict language on for a tutor.
6. Where should the review list go? Default: shown on the page and saved as a text file here.
Then propose a plan in plain words and wait for my yes.
Build in milestones, showing me each result and asking to continue: (1) create the agent with its speaking language set to mine and the chosen voice, and play me one sample sentence; (2) write its instructions so it keeps sentences at my level and asks me a question every turn, so I do most of the talking; (3) post-call analysis that lists every correction from the session and 3 phrases to practise next time; (4) build a simple local page with the two-line Fish Audio widget and serve it from a local web server on a fixed port, never opened as a file, then enable public access for that exact origin, listing both the localhost and the 127.0.0.1 form of it because Fish Audio treats them as different origins; (5) after each session, a small local backend that holds my key fetches the session's analysis and shows the corrections on the page (never put the key in the page itself); (6) publish, since an unpublished agent fails with a 409.
Test with me first: a two-minute session where I make one deliberate mistake, to check it hears me, corrects me and the list appears.
Safety rules: never print keys. Do not enable public access beyond localhost. Never mock a mistake or turn into a lecture. If my language is not supported, tell me rather than guessing.
When it works, tell me exactly what it cost per session (browser sessions are billed by the minute from my API credit balance) and what to do next.
Hosted Agents is the whole point of this guide, but if you're a builder who wants full control there's an advanced alternative: speech recognition to turn the caller's words into text, a conversational model (any you like) to decide what to say, Fish Audio speech synthesis to say it in your voice, and a voice orchestration or telephony layer to hold the call together. It's four services, latency tuning and real engineering, not a one-key replacement for Agents. Ask Astra for a plan only if you already know why you'd want it.
๐ Fish Audio ยท plans ยท API keys ยท Agents console
๐ Agents overview ยท quickstart ยท configuration ยท test calls ยท publishing ยท pricing
โ๏ธ phone numbers ยท bring your own number ยท outbound calls ยท transfers ยท recording and history
๐ knowledge base ยท webhook tools ยท website widget ยท post-call analysis
๐๏ธ voice cloning ยท voice design ยท emotion tags ยท MCP server
๐ค Codex modes ยท permissions ยท Plan mode ยท MCP in ChatGPT