The system
How the system worksThe DirectoryDispatchThe LedgerAI modelsAI agentsYour installationThe appThe research libraryWhat changes for your businessUse it from your softwareEverything it can do
Messaging
iMessageWhatsApp
Ads and leads
AdsCreativeLeads
Devices
Devices
Industries
RealtorsRestaurantsHome services
Explore
How it worksPermissions and limitsCompareSet upQuestionsText me

The skill for writing JSON articles

The instructions any model gets before it writes or edits an article here: the calls, the object, the widgets, the ontology and the house style. The Markdown copy at /a/json-article-writing-skill.md is the skill file itself.

Writing JSON articles for miscsubjects.com

An article is one JSON object. The site draws the page (/a/<slug>), the Markdown (/a/<slug>.md) and the machine copy (/a/<slug>.json) from it. You never write HTML. Read the live guide first: https://miscsubjects.com/a/json-articles-how-they-work (its JSON view shows the whole object behind it).

Calls

Key: header x-sheets-key: $(cat /Users/cyrusmassoumi/.misc-sheets-key); JSON bodies with content-type: application/json. Base: https://miscsubjects.com.

CallUse
POST /api/jarticlescreate (body = the article). 409 if the slug exists
GET /api/jarticles/<slug>read whole, with hash
PATCH /api/jarticles/<slug> + if-match: <hash>change pieces: {"ops":[{"op":"set","path":"facts.a.b","value":1}]}; ops: set, merge, delete, append, insert (path is a list index like body[2]), move (from → path); if_piece = sha256 of that piece from /at makes one op conditional
PUT /api/jarticles/<slug> + if-matchreplace whole
GET /api/jarticles/<slug>/at?path=facts.xone piece + piece_hash
GET /api/jarticles/<slug>/grep?q=<regex>matches with the path to edit each; GET /api/jarticles/grep?q= across all
POST /api/jarticles/<slug>/verifyfetch every source URL, store snapshot_sha256, quote_found
POST /api/jarticles/<slug>/comments{"model":"<openrouter id>","text":"…"}
POST /api/jarticles/cliObsidian commands: files, read, create, append, prepend, delete, move/rename (rewrites links everywhere), links, backlinks, unresolved, outline, search, grep, property:read, property:set, property:remove, properties, tags, patch. file = slug or title
GET /api/jarticles/theme, PATCH + if-matchthe look; every variable listed at /article-theme.json
GET /api/jarticles/modelsthe OpenRouter catalog (ids for model/comment widgets)
GET /schemas/jarticle.jsonthe schema

A 412 means someone changed it after you read it: read again, reapply, resend. Never retry blindly.

The object

json
{
  "slug": "ca-sr1-accident-report",            // /a/<slug>; lowercase, digits, dashes
  "title": "Report a car accident to the California DMV (SR-1)",
  "kind": "procedure",                          // badge: person, house, company, procedure, vertical, model, place…
  "status": "draft",                            // "published" only after verify passes
  "summary": "One or two sentences. Also the text on this article's card elsewhere.",
  "tags": ["dmv", "california"],
  "facts": { "authority": {"name": "California DMV", "url": "https://www.dmv.ca.gov"}, "deadline_days": 10, "fee_usd": 0 },
  "card_fields": ["deadline_days", "fee_usd"],  // what a card of this article shows (≤6 paths under facts)
  "ontology": { "above": ["vertical-dmv-vehicle-administration"], "below": [], "adjacent": ["ca-vehicle-damage-claim"], "nested": [], "show_position": false },
  "body": [ "Markdown…", {"type": "json", "ref": "#facts"}, "More Markdown…" ],
  "sources": [ { "url": "https://www.dmv.ca.gov/…", "title": "…", "publisher": "California DMV", "source_type": "official_agency", "quote": "the exact words on the page that support a fact" } ],
  "comments": []
}
Line 14, Column 1JSON

The build adds schema, created, updated, version, hash, a source id and quote_sha256 for each source.

Body

body is a Markdown string or a list of blocks (a block is Markdown, {"md":"…"}, or a widget object). Marks: bold, italic, ` code , words, slug / words (link), ## heading, > quote, lists, | tables |`. On a line of its own:

  • ![[slug]] or ![[slug|relation]] — that article as a card (Obsidian transclusion)
  • ![[slug#facts.path]] — one piece of that article as a JSON widget
  • [[widget:<id or n>]] — widgets[n] or the widget with that id

Widgets

json {value | ref:"slug#path" | ref:"#path", title, open_depth} · article {slug, relation, fields} · articles {slugs, title} · model {id} · models {author?} · comment {model, text} · theme · position · source {url, title, publisher, quote, source_type} · quote {text, cite} · stat {value, label} · note {title, text} · caveat / thread {items} · gallery · wikipedia · site_embed · reddit x youtube instagram tiktok facebook linkedin imessage whatsapp (the old site's shapes).

Two articles that carry each other

A house holds facts.residents: ["person-slug"] and ![[person-slug|lives here]] in its body; the person holds facts.home: "house-slug" and {"type":"article","slug":"house-slug","relation":"home"}. Each card is read live from the other's object: one copy of every fact. Example pair: /a/example-house-14-cypress-lane and /a/example-person-dana-reyes.

Ontology

above = broader (the vertical, the parent procedure). below = narrower. adjacent = beside (same event, alternative path). nested = drawn inside this one as cards at the end. Links stay in the JSON; the page shows no link lists unless show_position: true.

House style (the owner's law)

  • Plain English. Name every thing by what it is. Short sentences. No marketing tone, no filler, no "in today's world".
  • Data only, never editorial: no scores, rankings, recommendations, advice, pitches or letters.
  • No invented numbers. A value no source states is the string "UNKNOWN". Every number has a source.
  • Every fact a reader could check has a source with the exact quote. Run verify; publish only when every quote_found is true.
  • Never the site owner's personal name anywhere.
  • Never call a model through the build to write or test; comments from models are added only when the owner asks for those calls.
  • Facts live in facts; prose explains them. Do not repeat a number in prose that is not in facts.

Done means

GET /a/<slug>.json shows status: "published", every source has snapshot_sha256 and quote_found: true, and https://miscsubjects.com/a/<slug> answers 200.

Workbook

Tasks and data: build workbook procedure-verticals (GET https://miscsubjects.com/api/wb/procedure-verticals/values?sheet=TASKS with the key), tabs VERTICALS (BLS QCEW 2024 numbers per vertical), APPLICATIONS (351 procedures, each with its slug), TASKS (70 zero-context tasks), MEASURED VOLUMES, COMPANIES, LIFE EVENTS, PROCEDURE DETAIL, API CALLS. A copy: /Users/cyrusmassoumi/Downloads/procedure-verticals-2026-10-04.xlsx.