Cindy Zhu.
Free guides
Building Fish Audio

8 things you can build with GPT-6 Astra and Fish Audio

Hey, it's Cindy ๐ŸŒฑ Here are all 8 builds from the reel, with the prompts, the clicks, and the honest bits in between.
btw the waitlist for AI System Club is now open! If you're keen on using AI to automate your content, video editing, job search, business or build AI agents, feel free to sign up (only if you want to hehe). Ps. the waitlist gets first dibs:)

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.


read this first

Two ways to do this

๐ŸŸ Route 1: the Fish Audio dashboard (start here)
You create an agent in your browser, give it a job and a voice, talk to it, and publish it. No code, no API key, nothing to install. Every build below has a dashboard version of its first step, and this is how you find out in ten minutes whether the idea works for you.
๐Ÿ‘ฉโ€๐Ÿ’ป Route 2: a custom build with a coding assistant
You open a coding assistant (this guide uses GPT-6 Astra inside the ChatGPT desktop app), paste a build prompt, and it writes a small program that talks to Fish Audio's API with an API key you create. This is what you need the moment an agent has to book a calendar, write to a CRM, call leads on its own, or run inside a web page.
โš ๏ธ Being signed in to Fish Audio in Chrome does not connect it to your coding assistant. The assistant only reaches Fish Audio through an API key you save in your project (route 2) or through the Fish Audio MCP server you add in the ChatGPT app (it generates speech, transcribes audio and makes images and video, but it cannot create agents, see below). Nothing is connected until you do one of those two things.

route 1, about ten minutes

Build and test an agent in the Fish Audio dashboard

  1. Open Agents. Go to fish.audio/app/agents in your Fish Audio account and click New agent. Give it a name and you land in the Builder. Agents is in public beta and open to every account, nothing to apply for, and every account starts with a one-time US$5 trial balance, about 60 minutes of conversation, and it pays for real usage of every kind: web sessions, phone calls and API calls. The Builder's own test calls are free and never draw on it.
  2. Give it a job. On the Configuration page, write the system prompt in plain English: who it is, who it talks to, what it may and may not say, what to do when it doesn't know. Keep it under about 1,500 words: Fish Audio recommends staying under 2,000 tokens, and anything past the 32,000-token hard cap is rejected outright. There's no save button; edits save automatically as a draft (watch for Saved bottom-left).
  3. Set the first message. Under First message choose Fixed message and type the greeting, for example "Hi, you've reached Cindy's Studio, I'm the AI assistant, how can I help?" Say it's an AI here; people should never have to guess.
  4. Pick the voice and language. In the voice panel click Choose a voice (More voices opens the library, My Voices holds your clones) and set the Speaking language. Picking a voice doesn't change the language, so set both. Speed and expressive mode live here too.
  5. Add what it needs to know. Open the Knowledge base tab and click New private file. Paste your hours, services, prices, address and policies. Only Markdown or plain text works (PDFs and Word files have to be converted first), up to 1 MB per file.
  6. Talk to it. Click Test call in the top bar, then Start call, and let the browser use your microphone. Ask it something from your file, then something that isn't in it. Test calls run your draft, are free, and stop after ten minutes (or your agent's own maximum call duration, whichever is shorter).
  7. Publish. When it behaves, click Publish. That freezes a version; real sessions, phone calls and the web widget only ever connect to a published version. Builder test calls always run your draft, so they never need a publish. Everything outside the Builder (the web widget, a phone call, your own page) fails with a 409 error until you publish, which is Fish Audio's way of saying "publish first".
๐ŸŒฑ Your route 1 finish line. In one test call the agent answers a question that is in your knowledge file correctly, says it can't help with one that isn't (instead of making something up), and takes your name and number to pass on. Get that, then publish. If you only ever need a browser agent that answers questions, you're done, and you never touched a key.
๐Ÿ’ก A test call is a test call. It proves the brain and the voice, in your browser, with your microphone. It is not a phone line. For real calls the published agent needs a number: buy a US or Canada number from the workspace Phone numbers page ($1.20 a month; the docs describe this through the API, so the console may or may not offer a buy button on your account), or click Import number to connect a number you already own through your carrier's SIP trunk (the only way to use a non-US number). Bookings, CRM updates and anything outside the conversation need a webhook tool pointing at a small program you host, which is exactly what route 2 builds.
๐Ÿง One note on access. Two separate Fish Audio doc pages now say Agents is in public beta, open to every account, no application needed, so you should see New agent the moment you open that page. My contact there was still talking about beta access in mid September, so in the unlikely event you get a waitlist button instead, apply and nudge support.

route 2, do this once

Set up the custom-build route

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.

  1. Pick a plan that matches the use. Free is for personal projects only: about seven minutes of generated speech a month, a 500-character limit per generation (Plus lifts that to 15,000, which matters the moment a script runs longer than a paragraph), and the plan page's FAQ limits it to non-commercial use. The feature table on that same page confusingly shows a commercial-use bullet on Free, so if you spot that, the FAQ is the restrictive one. Anything for a business, a client or an ad needs Plus or above (Plus is US$11 a month billed annually, US$132 a year, or US$15 month to month) on the Fish Audio plans page. Agents, phone calls and the API are billed separately from that subscription; keep reading.
  2. Clone your voice. In your Fish Audio account, clone your own voice from at least ten seconds of clean audio (one to two minutes sounds better) following the voice cloning docs. Copy the voice ID from the voice's page. Note that Voice Design (describing a voice in words) is for auditioning; it doesn't save a reusable ID. Library voices and clones do.
  3. Create an API key. Go to fish.audio/app/api-keys, click Create New Key, name it (for example "receptionist build") and set an expiry if you like. Copy it once; you won't see it again. One key covers both speech and Agents. Treat it like a password.
  4. Store the key where the code can read it. Make a folder for the project. Inside it create a file named .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.
  5. Know your three IDs. You'll be handling three different strings and they are not interchangeable. The API key proves it's your account (from the API keys page, goes in .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.
  6. Open GPT-6 Astra in Codex. In the ChatGPT desktop app, open the dropdown above the message box and choose Codex, then open your project folder. Choose Local under the message box: Codex's cloud mode strips secrets and blocks internet access by default, so the easy path is your own computer. Astra is not offered in Codex cloud at all, which makes Local the only route to it. Use the model and reasoning control beneath the message box. It lists presets rather than raw model names, so pick Astra Light, or open Advanced to choose the model yourself. Plus gets a limited number of Astra messages a day. If Astra isn't offered at all, that is your plan, the rollout, your sign-in method or your client, not an out-of-date app. (/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.
  7. Turn Plan mode on, and leave it on. Type /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.
๐Ÿง  Paste this once: the setup prompt
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.
๐ŸŒฑ Run it in Plan mode with your Fish Audio account open in another tab. The one request it makes is read-only and costs nothing. It ends with either "you're ready" or the exact list of what's missing.

MCP or API? Two doors, two wallets

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.

๐Ÿ”Œ The MCP server
A bridge you add once in the ChatGPT app (Settings, then MCP servers, then Add server: name it fish-audio, choose Streamable HTTP, paste https://api.fish.audio/mcp, Save, Restart, Authenticate; type /mcp to check). It lets the assistant browse the voice library, generate speech, transcribe audio, and make images and video, and it bills your web plan's package credits, the same pool the website uses. It cannot create agents, buy numbers or place calls. Builds 5 and 6 use it; the phone builds don't.
๐Ÿ”‘ The developer API
What the key in your .env unlocks: everything, including Agents, phone numbers, outbound calls, transfers and post-call analysis. It bills a separate prepaid API credit balance that you top up in your account. Your web subscription doesn't cover it, and the $5 trial lives here. Builds 1 to 4, 7 and 8 use this.

Costs, recording and the rules you own

๐Ÿ’ก What it actually costs (API credit balance). Everything here is in US dollars. Conversations are US$0.06 a minute with the basic models included. Phone calls add a carrier surcharge on top: US$0.01 a minute for most calls, but Australian mobiles add US$0.09, so an Australian mobile is about US$0.15 a minute all in rather than US$0.07. Japanese mobiles add US$0.22, UK and Italian mobiles US$0.03 to US$0.05. A bought number is US$1.20 a month, transfers add US$0.015 (cold) or US$0.025 (warm) a minute, and ringing that isn't answered is free. Full table on the agent pricing page. Bringing your own number removes the rental, the Fish surcharge and the transfer fees, but your carrier still bills you, and outbound calling and warm transfer only work on it if your carrier setup supports them.
๐ŸŽ™๏ธ Decide about recording before you publish, don't inherit it. Recording is on by default in every new agent. Telling callers "this is an AI" is not the same as getting consent to record; many places need explicit consent or a spoken notice. So make a real decision: keep recording on and add the notice your jurisdiction needs, or turn it off in the agent's Settings and rely on the post-call summary. The prompts below default to off until you've checked.
๐Ÿ“ต If your agent calls people (builds 2 and 3), you own the rules. Get consent before an AI calls someone, honour an opt-out ("stop calling me" must work), respect calling hours and any do-not-call list where you operate, and have the agent say it's an AI up front. Fish Audio's docs don't handle this for you. Outbound calling also has to be switched on for your workspace; if a call comes back with an outbound-disabled error, that's what it means, and the docs don't say how it's enabled, so ask their support.
๐Ÿงฑ Five things that break builds silently. Paste these into Astra if it gets stuck.
1. An agent has to be published. Editing the draft isn't enough. A 409 error saying there's no published version means this.
2. Webhooks can't point at your laptop. Fish Audio rejects localhost and private addresses, so any build with a webhook needs a public HTTPS address. For testing, a free Cloudflare quick tunnel works with no account.
3. Custom variables don't reach webhook tools. Only tool arguments and the built-in system variables do, so booking details must be declared as tool arguments.
4. The widget needs a served page and an exact origin (builds 7 and 8). Opening the HTML file by double-clicking it gives an origin of 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.
5. An answering machine now counts as answered (builds 2 and 3). Fish Audio removed answering-machine detection, so a call that rolls to voicemail still reports as answered and your agent will happily talk to the beep. Tell it to hang up if nobody answers its first question, and read the transcript before you trust a "booked" or "qualified" result.

Testing on your laptop is not running it for real

๐Ÿงช Fine for testing
A program running on your laptop with a temporary Cloudflare tunnel, keys in a local .env, and you watching the terminal. This is how every build below is meant to be tried. It stops the moment your laptop sleeps or the tunnel closes, and the tunnel address changes every time.
๐Ÿ Needed to run it for real
A small always-on host for the program (any cheap cloud box or app host), the key stored as a secret on that host rather than a file, a fixed HTTPS address that only accepts requests from Fish Audio (check the signature or a shared secret), logs you can read, and an alert when calls fail. Ask Astra for exactly this once a build has passed its test; it's a separate step, not the default.

build 1

AI receptionist

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 provide: your business details, a calendar tool (Cal.com is free, but check its free tier gives you API access), and a number: bought or imported.
What gets built: a published agent with your knowledge file, a webhook tool that checks and books slots, a fallback that takes a message.
Finish line: in one test call from your own phone it answers a question from your business file, completes a booking you can see in your calendar after it confirms day, time and your name, and handles a question it can't answer by taking your details instead of guessing.
๐Ÿ“ž Build my AI receptionist
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.
๐Ÿ’ก Booking API reference, if Astra asks: Cal.com create a booking.

build 2

Automated bookings

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 provide: the place's number, what you want booked and how flexible you are, plus a number Fish Audio can call from.
What gets built: a small page where you type the booking, an agent that makes the call, and a result that tells you what got booked.
Finish line: with your own phone playing the restaurant, it calls, asks for a table inside the window you set, hangs up politely, and the page shows booked, the time, and notes.
๐Ÿ“… Build my booking caller
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.
โš ๏ธ It works wherever a person picks up. Automated phone menus ("press 1 for...") are the one thing it can't get through: Fish Audio's docs list no keypad-tone tool, so treat that as unsupported.

build 3

AI sales team

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 provide: wherever your leads arrive (a form, a CRM), your three qualifying questions, a booking link, and consent from the lead.
What gets built: a connector that receives each new lead and places the call, an agent that qualifies, and a summary written back to the lead.
Finish line: you submit a test lead with your own number, your phone rings, the agent asks your three questions, and the summary and a qualified yes or no land on that lead in your CRM or sheet.
โšก Build my AI sales team
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.
๐Ÿ’ก If your CRM can't send new leads out automatically, a Tally form webhook fires instantly on the free plan and is the easiest lead source to start with.

build 4

AI customer service

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 provide: your FAQs and policies as text, a person's number for hard calls, and a connected phone number.
What gets built: a published agent that only answers from your files, a warm transfer to your team, and a per-call summary.
Finish line: from your own phone: three questions from your FAQ answered correctly, one question not in the files met with "let me get someone", and one complaint transferred to you with the agent briefing you first.
๐Ÿ’ฌ Build my support line
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.

build 5

Content voiceovers

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 provide: a script and a cloned voice.
What gets built: a tagged script you approve, then audio files per paragraph plus one combined file.
Finish line: you listen to one paragraph before the rest is made, and the finished files play back in your voice with the tags sounding natural.
๐ŸŽ™๏ธ Voice my script
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.
๐Ÿ’ก More tags and how they work: Fish Audio emotion control.

build 6

UGC ads

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 provide: your product page and a folder of clips you own.
What gets built: six scripts you approve, six voiced and captioned 9:16 ads, and a table of which uses which voice and hook.
Finish line: you watch one finished ad before the rest are made, and every ad plays with the right voice, captions in sync, and nothing claimed that isn't on your product page.
๐ŸŽฌ Make my UGC ad batch
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.
๐Ÿ’ก Six voiced ads use far more than the free plan's seven minutes, and ads are commercial use, so plan on Plus. Only use footage you own or have the rights to.

build 7

Interview practice partner

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 provide: the job ad and your resume.
What gets built: a published agent playing the hiring manager, a local page with the Fish Audio widget, and feedback after each run.
Finish line: you have a real spoken exchange in your browser: it asks, you answer out loud, it follows up, and feedback appears after the session.
๐ŸŽค Build my interview practice partner
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.

build 8

Language tutor

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 provide: your language, your level and a topic.
What gets built: a published agent in that language, a local page with the widget, and a review list after each session.
Finish line: a two-minute spoken session where you make one deliberate mistake, it corrects you in a sentence and carries on, and the review list appears afterwards.
๐Ÿ—ฃ๏ธ Build my language tutor
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.
๐Ÿ’ก Fish Audio agents speak more than 50 languages; the full list is on the voice and language page.

Prefer to build your own voice stack?

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.


The links

๐ŸŸ 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

the waitlist is now open

AI System Club is launching soon

Build AI systems with me through recorded lessons you can follow at your own pace. Join the waitlist for first access and the founding price.

btw this list gets first dibs
the moment doors open :)