Asset Goes Here Docs Sign in
ContentsFulfilling requests
Make and deliver

Fulfilling requests

A fulfiller claims a request, makes the file it describes, and delivers it with its provenance. A fulfiller never needs the game's repository: agh stores the file, and publishes it once a person accepts it.

The loop

agh next --format json                      # claim the oldest open request
# read brief, kind, path, spec and reviewNote from the JSON; make the file
agh fill <asset-id> ./out/file.png --provenance ai --made-by "gpt-image-1 via Codex"

Repeat until agh next prints null (JSON) or "No open requests match." Narrow what you claim with --kind image, --tag role=card_art or --prefix location..

A claim lasts two hours. If no file arrives by then, the request goes back to the queue for someone else. When the work takes longer, such as a person drawing it or an outside service you hire, ask for a longer hold with --hold: 12h, 7d or 2w, up to 30d. For example, agh next --tag role=card_art --hold 7d.

What a request tells you

FieldMeaning
idThe asset's stable id. Pass it to agh fill.
kindimage, audio, text, strings or file.
briefWhat the asset should be, in plain words.
specHints, such as size: 768x1024 or background: transparent. Advisory: agh doesn't refuse a file that differs, but see below.
pathWhere the game expects the file. Match its extension.
tagsLabels such as role=card_art.
locale, translationOfFor a translation: the language to write in, and the asset it translates. Read the source with agh get <id> --which source or agh strings <id>, keep its keys and placeholders, and deliver the same format. agh guide translations has more.
reviewNoteWhy the last delivery was rejected, if one was. Fix that first, unless the brief changed since.
conversationQuestions and answers about the asset, newest last. agh show prints it.

If the brief is unclear, or a review note asks for something the brief doesn't say, ask before you make anything: agh ask <asset-id> "...". The request is on hold until someone answers. To check a direction before the real work, attach a sketch or a rough model with --file; it is never treated as a delivery. agh guide conversations covers questions and brief changes.

When you deliver an image, agh reads its size and whether it has an alpha channel, and compares them with a size spec and with any spec asking for transparency (background: transparent, or one mentioning RGBA or alpha). Differences don't block the delivery. They are recorded as specWarnings on the delivered file, shown to the reviewer, who decides. Match the spec before delivering when you can.

Audio is checked the same way when its spec asks for any of these: sample_rate (such as 48k or 44.1 kHz), bit_depth (24, or 32-bit float), channels (mono, stereo, 5.1), loudness (integrated, such as -16 LUFS, within 1 LU unless the spec says -16 ±2) and peak (the true-peak ceiling, such as -1 dBTP). agh reads WAV, FLAC, MP3 and Ogg files; it measures loudness and peak in WAV, FLAC, MP3 and Ogg Opus, for files up to 10 minutes long. MP3 and Ogg have no bit depth, so a bit_depth spec asks for WAV or FLAC.

When you deliver a Roblox model (.rbxm, .rbxmx or a .mesh), add a picture of it, such as a screenshot from Studio: agh can't draw these files, so the picture is what reviewers and the Library show, labelled as the artist's render. Use agh fill <asset-id> sword.rbxm --provenance human --preview sword.png, the Preview image field on the web page, or start_upload with preview true and then previewUploadId in deliver_upload. It can be a PNG, JPEG or WebP of up to 10 MB, and it is never published. .glb, .gltf and .fbx files need no picture: agh renders them itself.

A model must be in the format its path names. agh refuses a .glb delivered to an .rbxm path, for example, because it would be published and reviewed as an .rbxm. If the brief or spec allows another format, ask in the asset's conversation: a request keeps its path, so the requester asks for a new asset at a path in that format.

An upload link lasts one hour. A file uploaded but never delivered is removed after seven days, so there is nothing to cancel.

agh get <asset-id> downloads the file currently in use or waiting for review, for example to rework it.

When notes names a reference file, such as art/characters/mira.png, agh reference art/characters/mira.png downloads it without a checkout of the game. It comes from the agh asset at that path if there is one, otherwise from the project's repository branch, and prints the revision it fetched. References are image and audio files only.

A request may also have a placeholder, the file the game uses until yours arrives. agh get <id> --which placeholder downloads it (get_file_link with which: placeholder over MCP). Match its size, framing and timing, not its look. Placeholders has more.

Provenance

Every delivery says how it was made:

--made-by names the tool, model or person, such as OpenAI gpt-image-2, Codex, ChatGPT or Jane Artist. This feeds the Steam AI disclosure, so be specific.

After delivery

The asset waits for review. A developer either accepts it, and it is published once the pull request from the next agh publish merges, or rejects it with a note, and it returns to the queue for the next agh next.

Until someone reviews it, you can deliver again to replace your delivery; the earlier file is kept in the asset's history. After review, a new version starts with a revision from a developer or the coding agent. agh guide revise covers every case.

For agents: this page as Markdown is at /docs/fulfiller.md, and the CLI prints it with agh guide fulfiller.