AI Install
Install useful.json with an agent
This page gives AI agents a stable prompt for creating a listing-ready `useful.json`. It also tells them what to ask founders first and which fields can sync automatically later versus which ones still need admin review.
The canonical schema lives at /api/useful-json-schema. The canonical agent instructions live at /ai/useful-json-instructions.
Ask first
The agent should question the founder before drafting the file, including whether they are active in the builder community on X.
Auto-sync fields
Core marketing copy, tags, logo, social metadata, and release updates can sync after approval.
Admin-reviewed fields
Category suggestions and any protected editorial changes still stay in the moderation loop.
Installation prompt
Copy this directly into an AI agent conversation.
You are helping a founder install a useful.json file for theuseful.website listing sync.
Your job:
1. Ask the user for the missing information before writing the file.
2. Then generate a valid useful.json file.
3. Keep the output factual and compact.
4. Return strict JSON only with no comments.
Ask these questions first:
- What is the exact product name and canonical website URL?
- What is the sharpest one-sentence tagline?
- What does the product do, and who is it for?
- What pricing model fits best: free, paid, freemium, or enterprise?
- If the product has package pricing, what plans and display prices should appear?
- Is there a current version number and a short "what's new" summary to show?
- Is there a discount code users should see?
- What 3-5 short tags should appear publicly?
- What X/Twitter handle should be shown, if any?
- Are you part of the builder community on X, and if yes what handle or profile should we associate with the listing?
- What recent launches, releases, or improvements should appear under updates?
- Where will useful.json live on your site?
- What category seems best? Note: category suggestions may still need admin approval.
Then return JSON only using this shape:
{
"name": string,
"tagline": string,
"description": string,
"url": string,
"agentInstallUrl": "https://theuseful.website/ai/installation",
"agentUpdateUrl": "https://theuseful.website/ai/update-listing",
"category": string,
"tags": string[],
"pricing": "free" | "paid" | "freemium" | "enterprise",
"price": [{ "name": string, "price": string }],
"version": string,
"whatsNew": string,
"discountCode": string,
"twitter": string,
"logo": string,
"usefulJsonUrl": string,
"updates": [
{
"id": string,
"title": string,
"summary": string,
"url": string,
"publishedAt": ISO8601 string
}
]
}
Important sync rules for the user:
- These fields can auto-sync after approval: name, tagline, description, pricing, price, version, whatsNew, discountCode, tags, logo, twitter, and updates.
- Category changes do not auto-apply. They require admin review.
- The listing itself must still be approved before it appears publicly.
- version, whatsNew, and updates should only describe user-facing changes such as launches, shipped features, integrations, pricing changes, or visible UX improvements.
- Do not use those fields for internal refactors, infrastructure work, or invisible maintenance.
- JSON does not support comments. Do not append comments or notes after the closing brace.
- Do not invent facts, dates, or logos.
After generating the file, do all of the following:
1. Persist the update URL in the project.
Add a note to CLAUDE.md (or create docs/USEFUL_JSON.md if CLAUDE.md does not exist) with this content:
---
## theuseful.website listing
- useful.json path: <path where the file was saved>
- Update instructions: https://theuseful.website/ai/update-listing
When asked to update the listing or bump the version, fetch that URL first for the latest agent instructions before making any changes.
---
2. Tell the user explicitly:
"Whenever you ship something new and want to update your listing on theuseful.website, tell me to update your useful.json. I will fetch the latest update instructions from https://theuseful.website/ai/update-listing before making changes."
3. Offer to create a local Claude Code skill (slash command) for future updates.
If the user says yes, create the file .claude/commands/update-useful-json.md with this content:
---
Fetch the update instructions at https://theuseful.website/ai/update-listing, then follow them to update the useful.json in this project with any recent product changes.
---
Tell the user they can run /update-useful-json in Claude Code any time they want to refresh their listing.Example useful.json
Copy this directly into an AI agent conversation.
{
"name": "Example Tool",
"tagline": "Turn launch updates into clean, shareable product changelogs.",
"description": "Example Tool helps indie founders publish release notes, feature updates, and launch recaps in one lightweight workflow.",
"url": "https://example.com",
"agentInstallUrl": "https://theuseful.website/ai/installation",
"agentUpdateUrl": "https://theuseful.website/ai/update-listing",
"category": "Marketing",
"tags": ["changelog", "launches", "release notes"],
"pricing": "freemium",
"price": [
{ "name": "Free", "price": "$0" },
{ "name": "Pro", "price": "$19/mo" }
],
"version": "2.4.0",
"whatsNew": "Added embeddable release widgets and cleaner changelog sharing flows.",
"discountCode": "LAUNCH20",
"twitter": "@example",
"logo": "https://example.com/logo.png",
"usefulJsonUrl": "https://example.com/useful.json",
"updates": [
{
"id": "launch-widget",
"title": "Launched embeddable release widgets",
"summary": "Teams can now embed the latest release notes directly on their website.",
"url": "https://example.com/changelog/launch-widget",
"publishedAt": "2026-04-01T00:00:00.000Z"
}
]
}