Chalk Labs
Need help deploying bolta-post-media?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/boltaai-bolta-post-media
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/bolta-post-media
What's inside
- Skill name
bolta-post-media- Description
- Attach images or video to a Bolta post. Use this skill when the user asks to "add this image to the post", "attach the video", "post with the picture I uploaded", "use the image you generated", "put this photo on the draft", "make an image for this post", or "create a branded visual". Handles both ChatGPT-generated images and user-attached files (image or video) on new and existing posts, and covers generating on-brand images grounded in the workspace's Business DNA.
- License
- MIT
- Instructions
- 99 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Bolta — Attach Media
Add images or video to a post. Both **ChatGPT-generated images** and **user-attached files**
arrive as the same file-object shape and pass straight through to Bolta, which re-hosts them to
durable storage automatically.
## When to use
The user has an image or video (generated in-chat or uploaded) and wants it on a Bolta post —
either a brand-new post or one that already exists.
## Tools this skill uses
| Tool | Why |
|-|-|
| `list-workspaces` | Resolve `workspace_id` if unknown. |
| `list-accounts` | Get `account_ids` when creating a new post with media. |
| `create-post` | New post with `media` attached. |
| `update-post` | Add `media` to an existing post (append-only). |
| `get-post` | Read the current post to see what media is already attached. |
| `list-business-dna` / `get-business-dna` | Brand identity (colors, fonts, visual aesthetics, logo) — ground image generation in it. |
## Generating an image for a post — ground it in Business DNA
When the user wants a NEW image for a post (rather than attaching an existing one), generate it
yourself — but make it on-brand first:
1. `list-business-dna` → `get-business-dna` for the default record.
2. Fold the brand's **colors, fonts, visual aesthetics, logo guidance, and tagline** into the
image prompt (e.g. "flat illustration in #7B23CB and warm neutrals, minimal, no text overlay"
— whatever the DNA actually says). If `custom_image_instructions` exists, follow it verbatim.
3. Generate the image, then attach it via `media` exactly as below — you do NOT need the user to
ask twice: generating an image for a post implies attaching it to that post.
If no Business DNA exists, say so and generate from the post content alone.
## The `media` shape (critical)
`media` is an **array of file objects**. Each object uses ChatGPT's documented file schema:
| Field | Required | Notes |
|-|-|-|
| `download_url` | yes | Where Bolta fetches the file to re-host. |
| `file_id` | yes | The file's id. |
| `mime_type` | no | e.g. `image/png`, `video/mp4`. |
| `file_name` | no | Original name, if known. |
Pass the file objects **exactly as they arrive** — do not rewrite URLs, re-encode, or invent
fields. This applies identically to images ChatGPT just generated and files the user attached
(image or video). Bolta downloads from `download_url` and stores a durable copy.
## Prerequisites
- `workspace_id` — resolve once via `list-workspaces`, reuse. Auth is automatic via the Bolta
connector's OAuth grant — never ask for an API key. Default new content to Draft; confirm
before publish/delete.
- The media file object(s) — from a ChatGPT image generation or a user upload.
- For a new post: `account_ids` from `list-accounts` and the post `content`.
- For an existing post: the `post_id`.
## Workflow
### New post with media
1. `list-workspaces` → `workspace_id`; `list-accounts` → `account_ids`.
2. Assemble `media` as an array of the file object(s) (pass through unchanged).
3. `create-post(workspace_id, content, account_ids, media)`. Omit `requested_action` → Draft.
4. Confirm the Draft is saved with media attached.
### Existing post — add media (append-only)
1. Resolve `post_id` (ask, or `list-workspace-posts` to find it).
2. Optional: `get-post(post_id)` to see what media is currently attached.
3. `update-post(post_id, media=[...])` with **only the NEW file object(s)**. **Note:**
`update-post` **appends** — the array is added to whatever is already attached; it never
replaces or removes anything, and there is no way to delete media through this tool.
Do NOT re-send items that are already on the post: they get re-downloaded and attached
again as duplicates.
4. Confirm the media was added. If the user wants media *removed* or *swapped*, say that has
to be done in the Bolta app — this tool can only add.
### Re-hosting — what actually happens
Re-hosting is **synchronous**: Bolta downloads the file and stores a durable copy before the
call returns, so a successful response means the copy exists — no "still processing" wait.
Two silent caveats:
- If the download or upload fails, Bolta attaches the **original URL** instead and still
reports success — the failure is never surfaced in the response. Since ChatGPT file URLs
are short-lived, that attachment can be dead by publish time.
- Files over **100MB** are never re-hosted; the original URL is attached as-is. For large
video, prefer a durable source URL the user controls.
## Failure handling
- Missing `download_url` or `file_id` → cannot attach; ask the user to re-share/re-upload the file.
- Re-host failure (bad/expired URL) → the call still succeeds with the original URL attached
(see above) — you cannot detect this from the response. If the source URL was short-lived,
warn the user the attachment may not survive to publish and offer to re-attach a fresh file.
- Unsupported mime type for the target platform → flag the platform's media limits, don't force it.
- Permission error → the whole update fails; **nothing** is saved, media or text. Report the
missing role/scope and don't claim any part of the edit went through.
## Example
User (after generating an image): "Add this to a Threads draft."
1. `list-workspaces` → workspace_id; `list-accounts(platform="threads")` → account_ids.
2. `media = [{ download_url, file_id, mime_type: "image/png" }]` (the generated image, unchanged).
3. `create-post(workspace_id, content, account_ids, media)` → Draft with the image.
4. "Saved as a Draft with your image attached. Want it scheduled?"From boltaai/bolta-skills, MIT.
More from boltaai/bolta-skills
- 0.557score
bolta-review-queue
boltaai
Work the Bolta review and approval queues.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
reddit-engagement
boltaai
Find Reddit threads this brand can genuinely help with, read them, draft native replies, publish them after approval, and verify the canonical URL.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
social-publishing
boltaai
Write, schedule and publish the brand's own social content — one post or many, one platform or several.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
bolta-setup
boltaai
Get a Bolta workspace from zero to automation-ready, and recover from setup/entitlement errors.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
lucia-test
boltaai
The end-to-end acceptance run: understand the brand, inspect its presence, publish something useful, discover third-party conversations, reply to them, work…
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
analytics-review
boltaai
Read what actually happened — reach, engagement, follower movement, which posts worked — and say what to do about it.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
bolta-platform-tailoring
boltaai
Set per-platform options on a Bolta post — polls, flair, titles, privacy, boards.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
cross-platform-engagement
boltaai
Run one outbound engagement pass across Threads, Bluesky, Mastodon, X and LinkedIn — discover conversations where discovery exists, read them, draft native…
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
social-inbox
boltaai
Work the inbound side — comments and mentions on the brand's own content across every connected platform — and reply to them.
SkillBFreshness: B★ 2Claude Code +9 - 0.548score
wordpress-blog
boltaai
Research, write, visually art-direct, QA, and publish a genuinely high-quality long-form SEO article to the WordPress account connected through Bolta.
SkillBFreshness: B★ 2Claude Code +9 - 0.512score
brand-voice-generate
boltaai
Synthesize a discovery report into a finished, enforceable Bolta Brand Voice Guideline.
SkillCFreshness: C★ 2Claude Code +9 - 0.512score
brand-voice-enforce
boltaai
Transform and produce content in the brand's established voice.
SkillCFreshness: C★ 2Claude Code +9
Signals
- Stars
- 2
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Jul 21, 2026 (3 months ago)
- Last release
- Feb 16, 2026 (8 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/boltaai/bolta-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from boltaai
- 0.557score
reddit-engagement
boltaai
Find Reddit threads this brand can genuinely help with, read them, draft native replies, publish them after approval, and verify the canonical URL.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
social-publishing
boltaai
Write, schedule and publish the brand's own social content — one post or many, one platform or several.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
bolta-setup
boltaai
Get a Bolta workspace from zero to automation-ready, and recover from setup/entitlement errors.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
lucia-test
boltaai
The end-to-end acceptance run: understand the brand, inspect its presence, publish something useful, discover third-party conversations, reply to them, work…
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
analytics-review
boltaai
Read what actually happened — reach, engagement, follower movement, which posts worked — and say what to do about it.
SkillBFreshness: B★ 2Claude Code +9 - 0.557score
bolta-review-queue
boltaai
Work the Bolta review and approval queues.
SkillBFreshness: B★ 2Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get bolta-post-media running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
bolta-post-media skill. Agent Mart. https://agentmart.dev/skills/boltaai-bolta-post-media (last updated 2026-10-24)