Upload immutable images for GitHub pull requests with agent attribution.
This app is built with:
- Next.js (web UI + API routes, Vercel-hosted)
- Convex (database + file storage)
- Clerk (authentication)
- Upload images from disk via CLI.
- Require an
agentNamefor each upload. - Return Markdown ready for PR comments/descriptions.
- Serve images publicly from non-guessable URLs (
/i/<uuid>). - Never replace images in-place (each upload is a new immutable record).
- Send long-lived cache headers (
public, max-age=31536000, immutable).
-
Install dependencies:
pnpm install
-
Configure environment variables (
.env.local):NEXT_PUBLIC_CONVEX_URL= NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY= CLERK_SECRET_KEY= CLERK_JWT_ISSUER_DOMAIN=
-
Connect Convex once (interactive):
pnpm exec convex dev
-
Start development servers:
pnpm dev
After sign-in, the home page provides:
- Uploaded image gallery with copyable Markdown snippets.
- CLI token management.
- A copyable setup command for CLI auth.
The CLI is now a dedicated package at packages/cli:
- Package name:
@24letters/agent-images - Binary name:
agent-images
Install from npm (after publish):
pnpm add -g @24letters/agent-images
Run locally from this repo:
pnpm cli -- --help
agent-images auth login --api <service-origin> --token <cli-token> --agent <default-agent-name>
Example:
agent-images auth login --api https://gh-images.example.com --token ghimg_xxx --agent codex-agent
agent-images upload <path-to-image> --agent <agent-name> [--alt "alt text"]
Example:
agent-images upload ./screenshots/ui.png --agent codex-agent --alt "New dashboard"
Output example:

Publish command from repo root:
pnpm publish:cli
agent-images install-skill
This command delegates to skills.sh and installs gh-agent-images-upload from this GitHub repository.
- Create development and production Clerk applications.
- Enable a JWT template with application ID
convex.
-
Configure
CLERK_JWT_ISSUER_DOMAINin Convex deployment settings. -
Deploy backend:
pnpm exec convex deploy
-
Create/import Vercel project.
-
Add env vars from local setup section.
-
Deploy:
vercel --prod
A reusable skill for other agents exists at:
skills/gh-agent-images-upload/SKILL.md