← Plugin catalog
Education & Research

SUN

SUN v1.1.4

Podcasts, stories, meditations

Full description ↓

Save this plugin to Following and return to review observed changes. Follow up to 10 plugins free.

Description

From the marketplace listing

Ask SUN to turn any topic into a podcast, or into something to listen to: a guided meditation for sleep, calm or focus, a bedtime story told in chapters, or an original song. Give a podcast a subject and a length or attach files, and SUN writes and narrates a multi-episode course, for example "Make me a 20 minute podcast on the Cuban Missile Crisis". Pick one of SUN's voices, SUN's characters, or your own voice cloned in the SUN app, so a story can be read to your child in your voice. Listen as soon as the first part is ready. You can also schedule recurring audio briefings that arrive in the SUN app.

Language: English · Automatically detected from descriptions.

What changed

SUN

Oct 31, 2026 · 4 saved observations

Skill · Oct 31, 2026 · 15:03 UTC · Compared with Oct 29, 2026 · 19:12 UTC

WHAT CHANGED

Instructions updated for generate

Skill instructions — Now says: when the user asked for a language or wrote the request in one other than English, rather than relying on SUN to detect it. Preserve both the -...

Observed in instructions or declared skills. Runtime behavior has not been tested.

Open full comparison.

Skill instructions

Before

Oct 29, 2026 · 19:12 UTC

only when the user explicitly asked for a language. Preserve both the - `course_language`: only when the user explicitly asks for a language; with a

After

Oct 31, 2026 · 15:03 UTC

when the user asked for a language or wrote the request in one other than English, rather than relying on SUN to detect it. Preserve both the - `course_language`: when the user asks for a language or writes in one other than English...

Supporting files

Before

Oct 29, 2026 · 19:12 UTC

[{"relative_path":"agents/openai.yaml","size_in_bytes":451},{"relative_path":"references/tools.md","size_in_bytes":26464},{"relative_path":"scripts/upload_source_file.sh","size_in_bytes":1914}]

After

Oct 31, 2026 · 15:03 UTC

[{"relative_path":"agents/openai.yaml","size_in_bytes":451},{"relative_path":"references/tools.md","size_in_bytes":27233},{"relative_path":"scripts/upload_source_file.sh","size_in_bytes":1914}]

Read SKILL.md text changes →

Files · Oct 31, 2026 · 15:03 UTC · Compared with Oct 29, 2026 · 19:12 UTC

WHAT CHANGED

Package or technical metadata updated

Package or technical metadata updated

Observed in package metadata. These changes alone do not establish a new customer-facing feature.

Open full comparison.

These are saved file metadata. Open a changed file to read its text edits.

Package file

Before

Oct 29, 2026 · 19:12 UTC

7d019609f086fce7aaf0dd7748722d30e57770e37e7718eea5e07be966602b0a

After

Oct 31, 2026 · 15:03 UTC

5fca63bc6cd5392bd72e370c558b54a8bf2856a2bfd26b23c0e3db7ac421631c

Package file

Before

Oct 29, 2026 · 19:12 UTC

5a3b465551a3de8be4b3a9f5149227e31674f24e943bac04000a821744608d5c

After

Oct 31, 2026 · 15:03 UTC

45be9238d47ea01aa464d1a4ce0b0d311380069309746778180bc3168372361d

Package file

Before

Oct 29, 2026 · 19:12 UTC

6220

After

Oct 31, 2026 · 15:03 UTC

6316

Package file

Before

Oct 29, 2026 · 19:12 UTC

46bd4e3addff5d64d3aefdfac387999ec623b234a1e34bc35606952511fa44df

After

Oct 31, 2026 · 15:03 UTC

d18469fbabb46f1d51aa7bba500c2d2eb6616afc748f8b1c171df2a122b45269

Compare changed files →

Metadata · Oct 31, 2026 · 15:03 UTC · Compared with Oct 29, 2026 · 19:12 UTC

WHAT CHANGED

Package or technical metadata updated

Package or technical metadata updated

Observed in package metadata. These changes alone do not establish a new customer-facing feature.

Open full comparison.

Declared skills

Before

Oct 29, 2026 · 19:12 UTC

[{"description":"Generate a podcast on a topic with SUN (optionally from attached files, in a chosen voice or taught by SUN characters), a guided meditation, a bedtime story or other fiction, or an original song, and surface its first pl...

After

Oct 31, 2026 · 15:03 UTC

[{"description":"Generate a podcast on a topic with SUN (optionally from attached files, in a chosen voice or taught by SUN characters), a guided meditation, a bedtime story or other fiction, or an original song, and surface its first pl...

Composer icon url

Before

Oct 29, 2026 · 19:12 UTC

https://files.openai.com/content?id=file_00000000e3188243909c2878b860f34a

After

Oct 31, 2026 · 15:03 UTC

https://files.openai.com/content?id=file_00000000dc3481fda605abf1d480c53e

Logo url

Before

Oct 29, 2026 · 19:12 UTC

https://files.openai.com/content?id=file_00000000166081f5a2e76f7200463a66

After

Oct 31, 2026 · 15:03 UTC

https://files.openai.com/content?id=file_00000000c6e481f8a55f6110b088ed6f

Version

Before

Oct 29, 2026 · 19:12 UTC

1.1.3

After

Oct 31, 2026 · 15:03 UTC

1.1.4

Metadata: full comparison →Listing: full comparison →
Earlier changes · 2 more observation days on this page
SUN

Oct 29, 2026 · 5 saved observations

Capabilities & instructions

Instruction wording changed from “Identify the `job_id`. If the conversation does not contain one, ask for it.” to “Find the `job_id` in the result of the create tool earlier in this”. 3 additional added or edited lines are in the evidence.

Skill evidence →
Capabilities & instructions

Instruction wording changed from “`course_id`, and immediately tell the user the job ID” to “`course_id` for the tool calls, but never show the”. 4 additional added or edited lines are in the evidence.

Skill evidence →
Technical updates

Package contents changed in 5 files: .codex-plugin/plugin.json, plugin.json, skills/generate/SKILL.md, …. Open the file diff to inspect the edits.

Files evidence →
1 more changes that day

Published version changed from 1.1.2 to 1.1.3. Supporting listing metadata also changed.

Metadata evidence →Listing evidence →
SUN

Oct 28, 2026 · 4 saved observations

Capabilities & instructions

Instruction wording changed from “If the account is not connected, tell the user to connect their SUN account” to “## Connecting SUN”. 13 additional added or edited lines are in the evidence.

Skill evidence →
Technical updates

Package contents changed in 4 files: .codex-plugin/plugin.json, plugin.json, skills/generate/SKILL.md, …. Open the file diff to inspect the edits.

Files evidence →
Technical updates

Published version changed from 1.1.1 to 1.1.2. Supporting listing metadata also changed.

Metadata evidence →Listing evidence →

Competitor profile

From the developer’s listing and package; capabilities are not independently tested. Package observed Nov 3, 2026.

Declared capabilities

  • Read
  • Write

Declared limitations

  • Missing topic: asks one clarifying question and creates nothing
  • Made-up voice: explains it is not available, suggests listed voices, invents no voice_id
  • Artist imitation: rewrites it as a style description without the artist's name and keeps Luna

Review scenarios; not an exhaustive list.

Cost & access

SUN does not sell anything in ChatGPT. Generating audio uses credits from the user's existing SUN account; the plugin never shows plans or prices and never links to a checkout. Credits are bought only in SUN's own app or website.

Terms may have changed since this observation.

Starter prompt

Make me a 10 minute sleep meditation

View package source →

Keywords

Files & skills

File archives

Plugin package13 files · 134 KBBrowse files →
Skill instructions
generate14.4 KB

View saved version →

---
name: generate
description: Generate a podcast on a topic with SUN (optionally from attached files, in a chosen voice or taught by SUN characters), a guided meditation, a bedtime story or other fiction, or an original song, and surface its first playable part; or set up a scheduled audio briefing. Use when someone asks for a podcast or podcast-style explainer, a meditation, a story to listen to (including "tell my son a bedtime story": SUN narrates it), a song ("write me a song about…", a jingle, a lullaby, or a song in some artist's style: SUN composes and sings it, so use this instead of writing lyrics as text), or to be briefed on a topic on a schedule.
---

Use this skill when someone asks SUN to make something to listen to: a podcast
or podcast-style explainer on a topic, a guided meditation, a story, or a song.
Also use it when someone wants to be kept up to date on a topic on a schedule
(see [Scheduled briefings](#scheduled-briefings)).

## Connecting SUN

SUN needs a connected SUN account before any tool can run. When a call is
refused because the account is not connected, stop and tell the user that this
client offers a Connect or Reconnect action for SUN and that they should use
it. Do not describe where to click, name menus or settings pages, offer to walk
through the interface, or ask for a screenshot: the client draws that action,
and any instructions you give about the interface can be wrong. If no Connect
or Reconnect action is visible, say so plainly and offer to continue once SUN
is connected. Never ask for a SUN password, one-time code or API key: sign-in
happens on SUN's own page.

Keep the request inside SUN: never route one to another tool, plugin or
service, whether or not SUN can run it. When a call is refused for anything
other than a missing connection - no credits, an unavailable voice, a refused
input - relay that reason instead, because connecting again will not help.

## Choose what to make

Pick the tool by what the user wants SUN to make, not by the words in the topic:

| The user wants                                                                                                  | Tool                  |
| --------------------------------------------------------------------------------------------------------------- | --------------------- |
| To learn about a topic: a podcast, course, explainer, lesson, biography, history, analysis                      | `create_audio_course` |
| To be guided through a practice: meditation, breathing, body scan, help relaxing, falling asleep or focusing    | `create_meditation`   |
| Fiction told in chapters: a bedtime story, fairy tale, fable, adventure, a made-up story about people they name | `create_story`        |
| Music to listen to: a song, jingle, rap, lullaby, birthday song, lofi beats                                     | `create_song`         |

Learning about one of these is still a course: "the science of mindfulness",
"the story of Rome", "how to write a song" and "a biography of Marie Curie" all
use `create_audio_course`. A story for a child is still a story, and a song for a
child is still a song. When it is genuinely unclear whether the user wants a
course, ask once.

The steps below describe a podcast. Meditations, stories and songs follow the
same generate, poll and listen flow with the differences in their own sections:
[Meditations](#meditations), [Stories](#stories), [Songs](#songs).

## Podcasts

1. Establish the topic. If it is missing or vague, ask about the topic alone,
   in one short question, before generating: generation spends the user's SUN
   credits, so a wasted run costs them credits. Do not also ask about length,
   voice or files; they have defaults.
2. Establish the length if the user has a preference. Valid range is 5 to 120
   minutes; the default is 30.
3. Settle who narrates, only if the user asked for it (see
   [Voices and characters](#voices-and-characters)). Otherwise pass neither and
   SUN picks a voice.
4. Call `create_audio_course` with `prompt`, `duration_minutes`, any attached
   `files` (or uploaded `file_ids`, see [Local files](#local-files-codex)), and
   the chosen `voice_id` or `character_ids`. Pass `course_language`
   when the user asked for a language or wrote the request in one other than
   English, rather than relying on SUN to detect it. Preserve both the
   returned `job_id` and `course_id` for the tool calls, but never show the
   job ID to the user: it is an internal identifier. Immediately tell the user
   that generation usually takes one to five minutes.
5. Unless the user explicitly asks for an asynchronous handoff, wait for the
   first playable audio in the same turn: call `wait_for_course` with the
   `job_id`, and call it again each time it returns `state: waiting`. It waits
   on SUN's side, so do not poll `get_course_status` or pause in between.
6. On `state: failed`, report the error and stop. On `state: timed_out`, the
   job is still valid: say it is still generating, offer to check again, and
   do not start another generation.
7. On `state: playable`, give the user the listening link below at once. Do
   not wait for every lecture.

## Meditations

Call `create_meditation` with the user's own words in `request`, including any
breathing pattern or reason they gave.

- `duration_minutes`: 3 to 30; the default is 10.
- `purpose` (`calm`, `sleep`, `focus`, `body_scan`): pass it only when the user
  said what the meditation is for or named a practice. If they did not, ask
  once; when they want to just start, omit it. Keep the user's first words in
  `request` and add their answer, rather than replacing the request with it.
- Voice: meditations use SUN's calm meditation voices. A `voice_id` is kept
  only for some of the user's own cloned voices; otherwise the result carries
  a `voice_note` saying the voice was replaced, which you pass on to the user.
- Characters are not available for meditations.

A meditation plays as one continuous session, even though `get_course` returns
it in several parts.

## Stories

Call `create_story` with the user's own words in `request`, keeping every name
and detail (their child's name, friends, the animal, the place).

- `duration_minutes`: 5 to 30; the default is 10.
- A story is read by one narrator voice, never by characters. If the user asks
  for a character to tell it, say stories are read by one voice and offer a
  voice instead.
- "In my own voice": call `list_voices` and pass a `kind: "cloned"`
  `voice_id`. If the user has no cloned voice, say they can clone their voice in
  the SUN app (https://sunapp.ai) and offer one of SUN's voices; do not generate
  until they choose.
- `course_language`: when the user asks for a language or writes in one other
  than English; with a voice it must match the voice's language.

## Songs

A request to write, compose or make a song, jingle or lullaby is for SUN to
sing: call `create_song` instead of writing the lyrics yourself.

Call `create_song` with the user's request in `song_request`, in their own
words and language, keeping every name, detail, mood and genre.

- `length_seconds`: 10 to 300, only when the user named a length. Songs default
  to 180 seconds; do not ask.
- A song has no narrator voice, characters or course language; its lyrics
  follow the request's language. If the user asks for a voice, say songs are
  sung by SUN's music engine and continue.
- Songs cannot imitate a real artist, band, song, album or composer, or use
  existing lyrics. Replace only the imitation with a description of that sound
  (genre, era, instruments, tempo, mood, vocal delivery), so the imitated
  artist's name does not appear in `song_request` at all. When you share the
  song, tell the user it does not imitate that artist and that you described
  the sound instead. An artist who is the song's subject stays as written. A
  `song_imitates_artist` refusal means the request still names who to imitate:
  reword it that way and call again; no credits were used.
- `get_course` returns the song's `lyrics`; share them with the listening link.

## Attached files

When the user attaches files and wants the podcast built from them, pass them
in `files`: text-based PDF, Word, PowerPoint, Excel, EPUB, text, Markdown, CSV,
HTML or code, up to 20 files. Scanned images cannot be read. A file-grounded
course opens with a short spoken intro about the files (`intro` in
`get_course`). If a file fails, `get_source_file_status` gives the reason to pass
on so the user can re-upload.

### Local files (Codex)

In Codex an attachment is only a path on the user's computer, which SUN cannot
read, so `files` does not apply. Upload each file first; never generate a
"from the file" course without it, because that spends credits on a course the
user did not ask for.

1. Call `create_source_file_upload` with the file's name and, when known, its
   size and MIME type. The link works once and expires after 10 minutes, so
   request it right before uploading.
2. Run this skill's script with the absolute path and the returned values:

   ```bash
   SUN_UPLOAD_TOKEN="<upload_token>" scripts/upload_source_file.sh "/path/to/file.pdf" "<upload_url>"
   ```

   It prints JSON with the `file_id`. On an error, report it and request a new
   link instead of re-running the script with the same token.

3. Pass every `file_id` in `create_audio_course`'s `file_ids` (not `files`).
   Optionally check `get_source_file_status` first; a file whose status is
   `error` cannot be used.
4. If the upload cannot be done (no shell access, or the user declines), say so
   and ask whether to build the course from the topic alone before generating.

## Voices and characters

- A voice: call `list_voices` (optionally with `language`) and pass one of its
  `voice_id` values. "My own voice" means a `kind: "cloned"` entry. The course
  follows the voice's language, so do not also pass a different
  `course_language`.
- Characters: call `list_characters` and pass one or two `id` values in
  `character_ids`. One narrates alone; two share every lecture and the first
  leads. A character's `primary_language` is persona background only.
- Use a voice or characters, never both.
- Never make up a `voice_id` or character id, including for a celebrity or a
  voice that is not listed. Say it is not available and offer what the list
  returns.
- When a call is refused (`voice_not_available`, `voice_language_mismatch`,
  `unsupported_character_combination`, and the others in
  [tools.md](references/tools.md)), relay the message and ask the user how to
  proceed. Nothing was generated and no credits were used, so do not retry the
  same call.

## Listening link

`listen_url` is the page where the user listens. It is set only once some
audio can play (`wait_for_course` returns `state: playable`, or `get_course`
returns an `audio_url`) and is null before that, because the page cannot play
yet. Use it exactly as returned; never build the URL yourself.

Present the name and `listen_url` as a normal clickable Markdown link. For a
podcast or story, also state how many of the returned lectures currently have
audio ready.

## Downloaded-audio fallback

If the user reports that the listening page cannot open or play, or explicitly
asks for local audio, call `get_course` with `include_partial: true` again to
refresh its seven-day signed URLs. Download each currently playable lecture in
lecture-number order. Prefer `sun audio get <job_id> --partial --out
<output-dir>` when an authenticated SUN CLI is already available; otherwise use
the host's download capability without printing the signed URL. Present the
downloaded MP3 files as local audio players when the surface supports them; in
Codex, use `![Episode title](/absolute/path/to/episode.mp3)` for each file.

Never cache or reuse an old `audio_url`. Do not download audio preemptively when
the website works.

Do not invent a `job_id`, `course_id`, podcast title, artwork, duration, or
episode content. Report only what the user supplied or the tools returned.

## Credits

Generating spends credits from the user's SUN account, charged by the actual
length of the audio (60 credits per minute); nothing is charged if a
generation fails. A started generation's result states its estimated cost (or
that it is free); pass that on as the tool words it.

If a create tool refuses with `no_entitlement`, `insufficient_credits`,
`too_many_requests` or `billing_unavailable`, relay its message as it is and
stop. Do not retry. When an `insufficient_credits` message says a shorter
version fits, you may offer to generate that length instead. Do not recommend
buying, upgrading or subscribing, and do not state prices or plans. Only if
the user asks how to get more credits, say they can manage their account on
the SUN website or app and share https://sunapp.ai/faq#billing.

When the user asks how many credits or minutes they have left, call
`get_credit_balance` and tell them the minutes and credits it reports, for
example "about 90 minutes of SUN credits (5,400 credits)".

## Scheduled briefings

Use `schedule_briefing`, not `create_audio_course`, when the user wants
something on a schedule: "every weekday at 8", "each Monday", "keep me posted
on X", "brief me tomorrow morning".

1. Establish the topic and what should count as news, and the time. Ask one
   short question when the time of day is unknown.
2. Ask which city the user is in and pass its IANA region time zone (for
   example `America/New_York`). Never guess it, and never pass an abbreviation
   or offset such as `EST` or `GMT+8`.
3. Call `schedule_briefing` once. Voices, characters, and `course_language`
   follow the rules above.
4. Tell the user it is set up only if the call succeeds. Describe when it will
   arrive and where: a push notification from the SUN app, which plays the
   briefing when tapped. Nothing is being generated now.
5. If the result has `app_required: true`, tell the user they need the SUN app
   on their phone to receive it and give them `app_download_url`.
6. If the call fails, do not simply call it again: call
   `list_scheduled_briefings` first so a briefing is not created twice.

To see or stop briefings, use `list_scheduled_briefings` (it includes ones set
up in the SUN app) and `cancel_scheduled_briefing` with a `task_id` from that
list. If more than one briefing could match, ask which one first. Briefings
cannot be edited: to change the time or topic, offer to cancel and schedule a
new one, and do it only after the user agrees.

The first briefing call on an older connection may ask the user to reconnect
SUN once; that grants course and briefing access together.

See [tools.md](references/tools.md) for the exact tool contracts.

Referenced files: 3 — file references are metadata, not package contents.

status2.02 KB

View saved version →

---
name: status
description: Check the progress of a podcast, meditation, story or song generated by SUN and fetch it when ready. Use when someone asks whether it is done, how far along it is, or for the finished audio.
---

Use this skill when someone asks about a podcast, meditation, story or song that
is already generating or wants the finished audio.

1. Find the `job_id` in the result of the create tool earlier in this
   conversation. Never ask the user for it or show it to them: it is an
   internal identifier they never see. If the conversation has none, say you
   can only check a generation started in this conversation.
2. Call `get_course_status`. It reports `PENDING`, `PROCESSING`, `SUCCESS`, or
   `ERROR`, and a `progress` value from 0 to 100 once available.
3. While it is `PENDING` or `PROCESSING` and the user wants to wait, call
   `wait_for_course` instead of polling yourself, and again each time it
   returns `state: waiting`; a 30-minute podcast typically takes 60 to 300
   seconds before its first audio.
4. Once it reaches `SUCCESS` (or `wait_for_course` returns `state: playable`),
   call `get_course` and report the name with its `listen_url` as a clickable
   link. Describe the result by its `content_type`:
   - `course`: present the returned `lectures` as episodes with their audio
     links.
   - `meditation`: one guided session, even though it arrives in several parts.
   - `story`: its `lectures` are the chapters.
   - `song`: share the `lyrics` when present; a song without lyrics is
     instrumental.
5. If the user is impatient, call `get_course` with `include_partial` set to
   `true` to surface parts that have already finished; its `listen_url` plays
   them, and is null while nothing can play yet.

Audio links expire after seven days. Say so when sharing them, and never treat
an audio link as a durable identifier. `listen_url` does not expire.

On `ERROR`, report the error the tool returns. Do not retry automatically and
do not start a new generation without asking, since that spends the user's
credits.

Referenced files: 1 — file references are metadata, not package contents.

Release notes

SUN 1.1.4. More languages: ask in French, German, Italian, Dutch, Portuguese, Russian, Ukrainian, Arabic and its dialects, as well as English, Spanish, Hindi and Chinese, or simply write in your own language, and SUN creates the audio in it. Turn any topic into a narrated podcast, from a topic and a length or from files you attach. Create a guided meditation for sleep, calm, focus or a body scan. Get a bedtime story or other fiction told in chapters, with your child's name and the details you give. Compose an original song, jingle or lullaby, with its lyrics. Choose one of SUN's voices or characters, or use your own voice cloned in the SUN app. Listen as soon as the first part is ready. Schedule recurring or one-off audio briefings that arrive as SUN app notifications, and list or cancel them from ChatGPT.

Declared in the saved package. Remote tools may change independently.

Package details

Publisher declarations from the archived package. These are separate from our research and the live service's terms.

Package author
SUN
Keywords
See keywords
Commerce declaration
Does not support commerceThis does not establish whether access is free or paid.
Review scenarios
5 positive · 3 negativeScenario counts, not test results.

Declared capabilities

  • Read
  • Write

Package observed Nov 3, 2026.

Technical details
First seen
Oct 26, 2026 · 06:00 UTC
Last seen
Nov 3, 2026 · 18:00 UTC
Latest observed change
Oct 31, 2026 · 15:03 UTC
Collection status
Collected

plugin_asdk_app_6acb787799448191baa6d03b181d30bb

Download plugin data (JSON)