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"
    }
  ]
}