Agents · JSON twins

Ping one URL. Rebuild the context.

Hanging Context is a public temporal context layer for AI agents, built by Synorb. It turns source-grounded activity across industries into timestamped, claim-oriented, machine-readable pages and JSON twins that agents can retrieve, verify, and cite. No API keys, no rate limits, no auth. Start with /agents.json: it points to the full public aggregate twins, panel JSON, render specs, stream catalogs, samples, media, and public-safe manifest bundles. Hanging Context is temporal context for agents and reasoning systems: claims from primary primitives, rendered as visual panels for inspection and JSON twins for use. The snapshots below power the homepage panels and are rebuilt every 12 hours, served as flat files from a CDN. The full firehose — live delivery, per-manifest briefs, signals, and record metadata — lives at api.synorb.com under a paid plan. What's here is the tip.

Endpoints

These are the public endpoints agents can discover from the one-shot contract. Every page at /data/* also ships a <link rel="alternate" type="application/json"> in its head so agents can discover the JSON twin by parsing HTML.

Attribution and verification flow

Cite Hanging Context x Synorb when using the public context layer. A link back to the relevant Hanging Context page is appreciated when the format allows it. For high-stakes use, verify important claims against primary sources where available. See citation guidance, methodology, and limitations.

{
  "page_url": "https://hangingcontext.com/questions/example/",
  "json_twin_url": "https://hangingcontext.com/data/questions/example.json",
  "source_url": "https://original-source.example/article",
  "claim_id": "when available",
  "manifest_id": "when available",
  "stream_id": "when available",
  "published_timestamp": "source timestamp when available",
  "as_of": "Hanging Context rebuild timestamp"
}
Data shape

Snapshots are intentionally flat. No nested pagination, no cursor tokens. If it doesn't fit in one JSON, the window is too wide. Here's a trimmed skeleton of /data/windows/24h.json — the same shape applies to the 168-hour snapshot (7d.json):

{
  "schema_version": 1,
  "window": "24h",
  "window_label": "Last 24 hours",
  "window_hours": 24,
  "window_coverage": "rolling",
  "range": { "start": "2026-04-21T...", "end": "2026-04-22T..." },
  "as_of": "2026-04-22T01:48:00Z",
  "refresh_analysis": {
    "comparison_basis": "rolling_window_vs_previous_build",
    "summary": "Since the previous refresh, the rolling claim count rose..."
  },

  "totals": {
    "claims": 20464,
    "manifests": 2564,
    "records": 2564,
    "sources": 100,
    "entities": 0,
    "domains": 9
  },

  "claims_by_day": [
    { "day": "2026-04-21T01:00:00Z", "claims": 847 },
    { "day": "2026-04-21T02:00:00Z", "claims": 912 }
  ],

  "top_sources": [
    { "source_name": "codename-one-engineering-blog",
      "claim_count": 6288, "record_count": 759, "manifest_count": 759 }
  ],

  "top_entities": [
    { "tag_id": 123, "name": "Anthropic", "type": "organization",
      "claim_count": 412, "slug": "anthropic" }
  ],

  "claim_types":       { "publication": 42100, "announcement": 38211 },
  "evidence_types":    { "paraphrase": 13294, "direct_quote": 6842 },
  "confidence_levels": { "stated": 19285, "implied": 652 },
  "sentiment_levels":  { "neutral": 11483, "positive": 6021, "mixed": 1884 },
  "domains":           { "engineering-technology": 14897 },

  "tag_graph": {
    "nodes": [ { "id": 1, "name": "LLM", "type": "topic", "weight": 420 } ],
    "edges": [ { "a": 1, "b": 2, "weight": 87 } ]
  },

  "highlights": [
    { "claim_id": 123,
      "text": "Anthropic released Claude Opus 4.7 with a 1M-token context window.",
      "source": "anthropic-news",
      "source_url": "https://anthropic.com/...",
      "published_date": "2026-04-21",
      "evidence_type": "direct_quote",
      "confidence": "stated",
      "domain": "engineering-technology",
      "entities": [ { "name": "Anthropic", "type": "organization" } ]
    }
  ],

  "verified_samples": [
    { "claim_id": 456,
      "text": "OpenAI said developers can now inspect per-run retrieval traces in the console.",
      "source": "openai-news",
      "source_display": "OpenAI",
      "source_url": "https://openai.com/...",
      "source_channel_display": "OpenAI",
      "published_date": "2026-04-22T00:45:00Z",
      "verified_at": "2026-04-22T01:12:00Z",
      "sentiment": "positive",
      "confidence": "stated",
      "evidence_type": "direct_quote",
      "media_type": "text",
      "claim_type": "publication"
    }
  ],

  "samples": [ /* 60 recent claims, any confidence */ ]
}
Minimal subscribe

Poll hourly and diff — or parse the as_of field to detect fresh builds:

import urllib.request, json, time

def pull():
    with urllib.request.urlopen("https://hangingcontext.com/agents.json") as r:
        contract = json.load(r)
    with urllib.request.urlopen(contract["latest"]["full"]) as r:
        return json.load(r)

last_as_of = None
while True:
    snap = pull()
    if snap["as_of"] != last_as_of:
        print(f"fresh: {snap['totals']['claims']} claims, {snap['totals']['sources']} sources")
        for h in snap["highlights"][:3]:
            print(f"  - {h['text']} ({h['source']})")
        last_as_of = snap["as_of"]
    time.sleep(3600)
Honest limits
What's not here

Per-manifest brief + signal + claims + record metadata are the paid surface at api.synorb.com — including real-time delivery over REST, MCP, S3 export, or WebSocket firehose. Hanging Context shows you the kind of thing the pipeline produces; the API is how you act on it continuously.