{"id":46614,"plugin_id":"plugin_asdk_app_6a9d533d1bd08191af522be547ae1e97","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-24T13:30:30.290Z","digest":"fb0aff714d7e6503f6ad76c422c30d04a927ef0911723a048007b845a0b54eda","against":null,"payload":{"description":"Realtime and backtestable financial news wire — novelty-clustered headlines with entity mentions, sector and asset tags, and trust/importance scores. Operations are list_wire and wire_storyline.","included_files":[],"name":"wire","skill_md_contents":"---\nname: wire\ndescription: Realtime and backtestable financial news wire — novelty-clustered headlines with entity mentions, sector and asset tags, and trust/importance scores. Operations are list_wire and wire_storyline.\n---\n\n# Wire\n\nThe Wire is Ultralayer’s structured news firehose: short, fact-dense headlines with novelty links, entity mentions, sector/asset tagging, and trust/importance scores. Public surface exposes **metadata + headline only** (no article body).\n\n| Operation | Role |\n|-----------|------|\n| `list_wire` | Filter + return the most recent matching wire items |\n| `wire_storyline` | Expand one item into its novelty ancestor chain + first-degree branches |\n\n---\n\n## When to use\n\n**Use the Wire when you need to:**\n- Scan what is moving now (earnings, guidance, geopolitics, rates, M&A)\n- Monitor a company, commodity, country, sector, or publisher\n- Deduplicate the firehose via `novelty` (`new` / `update` vs `duplicate`)\n- Reconstruct how a story evolved (updates, corrections, cross-publisher copies)\n- Backtest a window with `start_timestamp` / `end_timestamp`\n- Build alert-ready conditions (same filter fields power `list_wire` alerts)\n\n**Do not use the Wire when you need:**\n- Open-web research (article body, quotes, filings, prices) → your native web search tool\n- A full entity package → `retrieve_entity`\n- Semantic “find similar stories by meaning” — `list_wire` is filter/recency, not embedding search\n\n---\n\n## Use cases\n\n**Realtime desk scan** — See the latest material earnings and guidance prints without the syndication noise.\n```json\n{\n  \"max_records\": 25,\n  \"novelty\": [\"new\", \"update\", \"correction\"],\n  \"categories\": [\"earnings\", \"guidance\"],\n  \"min_importance_score\": 0.5,\n  \"min_trustworthiness_score\": 0.7\n}\n```\n\n**Company name watch** — Pull only headlines where a specific company is a primary or major subject.\n```json\n{\n  \"max_records\": 20,\n  \"entities\": [\"Tesla, Inc.\"],\n  \"entity_relevance\": [\"primary\", \"significant\"],\n  \"novelty\": [\"new\", \"update\", \"correction\"]\n}\n```\n\n**Strong ± sentiment on a name** — Surface mentions that are clearly bullish or bearish on the company, not mild noise.\n```json\n{\n  \"entities\": [\"easyJet plc\"],\n  \"entity_relevance\": [\"primary\", \"significant\"],\n  \"min_entity_sentiment\": 0.3,\n  \"max_entity_sentiment\": -0.3,\n  \"max_records\": 20\n}\n```\n\n**Geopolitics → commodities** — Catch geopolitics that matter for energy and commodities.\n```json\n{\n  \"max_records\": 20,\n  \"sectors\": [\"energy\"],\n  \"asset_classes\": [\"commodities\"],\n  \"categories\": [\"geopolitics\"],\n  \"novelty\": [\"new\", \"update\"],\n  \"min_importance_score\": 0.5\n}\n```\n\n**Issuer originals only** — Read what the company itself released, not second-hand rewrites.\n```json\n{\n  \"content_type\": [\"press_release\"],\n  \"source_relationship\": [\"first_party\"],\n  \"novelty\": [\"new\", \"update\", \"correction\"],\n  \"max_records\": 20\n}\n```\n\n**Scheduled / future events** — Find upcoming earnings and policy dates, not just what already printed.\n```json\n{\n  \"recency\": [\"report_of_future\"],\n  \"categories\": [\"earnings\", \"monetary\"],\n  \"max_records\": 20\n}\n```\n\n**Backtest a window** — Reconstruct what looked important during a specific trading session.\n```json\n{\n  \"start_timestamp\": \"2026-07-21T14:00:00Z\",\n  \"end_timestamp\": \"2026-07-21T18:00:00Z\",\n  \"novelty\": [\"new\", \"update\"],\n  \"min_importance_score\": 0.6,\n  \"max_records\": 50\n}\n```\n\n**Storyline with syndication** — See how a story evolved and which outlets copied it.\n```json\n{\n  \"wire_id\": 67337,\n  \"novelty\": [\"new\", \"update\", \"duplicate\", \"correction\"]\n}\n```\n\n---\n\n## Response detail\n\nBoth operations accept `detail`. **Default is `full`.** Reduced levels **drop keys** only — surviving fields keep the same names and paths as `full`. Pricing does not change with `detail`; this is about **response token cost** in the agent context (wire lists can be large).\n\n| Level | What you get | Rough token savings vs `full` |\n|-------|----------------|-------------------------------|\n| `essential` | `wire_id`, `source_timestamp`, `headline`, `publisher`, `novelty`, thinned `entities` (name / relevance / sentiment) | Large — drops url, scores, `about`, taxonomy, most entity identifiers |\n| `standard` | essential + `url` for citation | Between essential and full (url only vs essential) |\n| `full` | Every field (`about`, scores, content type, categories, full entity detail, …) | — |\n\nExact wire percentages are not published yet; treat essential as the big cut and standard as the usual cite-ready middle. **Prefer `detail: \"standard\"`** for normal agent calls. Use `essential` for dense scans; use `full` when you need scores, `about`, or full entity identifiers.\n\n```json\n{\n  \"max_records\": 25,\n  \"novelty\": [\"new\", \"update\", \"correction\"],\n  \"detail\": \"standard\"\n}\n```\n\n---\n\n## What you get back\n\nEach item is a compact decision object. Headlines are usually one dense sentence with numbers, entities, and the delta.\n\n| Field | Notes |\n|-------|-------|\n| `headline` | Primary content |\n| `wire_id` | Pass to `wire_storyline` |\n| `timestamp` | Wire clock — **filters** use this |\n| `source_timestamp` | Publisher time — **list_wire sorts by this descending** |\n| `novelty` + `prior_wire_id` | Cluster membership. `new` usually has `prior_wire_id: null` |\n| `importance_score` / `trustworthiness_score` | 0–1 |\n| `factuality` | `confirmed` / `reported` / `rumor` / `speculation` / `forecast` |\n| `content_type` | `news`, `analysis`, `opinion`, `press_release`, `data_release` |\n| `recency` | `realtime` / `report_of_past` / `report_of_future` |\n| `source_relationship` | `first_party` / `reporting` / `second_hand` |\n| `about` | `sectors`, `industries`, `countries` (ISO alpha-2 lowercase), `asset_classes` |\n| `entities[]` | `canonical_name`, `entity_type`, `relevance`, `sentiment` (−1..1), `identifiers` |\n| `publisher` | Exact string for filters; values are inconsistent (`bloomberg`, `seeking alpha`, `dow_jones`) |\n\nPrefer `novelty: [\"new\",\"update\",\"correction\"]` and `max_records` 10–30 with tight filters.\n\n---\n\n## list_wire\n\nReturns up to `max_records` (1–100, default 20) matching items, newest by `source_timestamp`. Pass `detail` (default `full`; prefer `standard` — see **detail** above).\n\n### Filtration vs sort\n\n- **Filters** apply on `timestamp` (wire clock).\n- **Response order** is `source_timestamp` descending.\n- A tight time window can include items whose source time looks slightly outside the window. Prefer slightly wider windows when backtesting.\n\nFuture `end_timestamp` values are treated as realtime (no upper bound).\n\n### Novelty\n\n| Value | Meaning | Typical `prior_wire_id` |\n|-------|---------|-------------------------|\n| `new` | First material print of a cluster | `null` |\n| `update` | Material change / next beat | prior in chain |\n| `duplicate` | Same substance, often another publisher | prior (often a `new`) |\n| `correction` | Number/fact fix; rare but market-critical | prior wrong print |\n\nDefault monitoring set: `[\"new\", \"update\", \"correction\"]` — cuts roughly half the firehose noise from cross-publisher copies while keeping beats and fixes.\n\nExample: Lundbeck FDA Fast Track — `pr_newswire` item `novelty=new`, Reuters copy minutes later `novelty=duplicate` with `prior_wire_id` → the PR.\n\n### Entity filter\n\n`entities` is include-any.\n\nPair with `entity_relevance` and `min_entity_sentiment` / `max_entity_sentiment`. When both sentiment bounds are set, `min` must be **greater than** `max` (directional OR: strong positive **or** strong negative).\n\nSentiment bounds apply to the matching mention, not the whole item.\n\n### Other high-value filters\n\n| Filter | Notes |\n|--------|-------|\n| `categories` | Free-form. Common: `earnings`, `guidance`, `geopolitics`, `trade`, `m&a`, `regulation`, `macro`, `monetary`, `product`, `tech`, `litigation`. Wrong tags silently return fewer hits. |\n| `sectors` | Closed GICS-like enum (`information_technology`, `energy`, …) |\n| `industries` | Free-form as stored (e.g. `\"semiconductors\"`) |\n| `countries` | Lowercase ISO-3166-1 alpha-2 |\n| `asset_classes` | `equities`, `fixed_income`, `commodities`, `currencies`, `crypto`, `real_estate` |\n| `publisher` | Exact match; discover from results |\n| `content_type` + `source_relationship` | `press_release` + `first_party` for issuer originals |\n| `factuality` | `rumor` / `speculation` for soft takes |\n| `recency` | `report_of_future` for scheduled/future prints |\n| `min_importance_score` | Unfiltered stream is full of 0.2–0.3 items |\n| `min_trustworthiness_score` | Filters thin social sources |\n\nFilters combine with AND across dimensions; within multi-value arrays, include-any (OR).\n\nKeep filter lists tight: across `categories`, `entities`, `sectors`, `industries`, `countries`, `asset_classes`, and `publisher`, at most **12 values total** are allowed in one request.\n\n---\n\n## wire_storyline\n\nGiven a `wire_id`, returns the novelty storyline: linear `prior_wire_id` ancestors plus first-degree children of every chain node.\n\n```json\n{\n  \"seed_wire_id\": 67583,\n  \"root_wire_id\": 49200,\n  \"items\": [ ]\n}\n```\n\nItems are chronological by `source_timestamp` ascending.\n\n| Param | Notes |\n|-------|-------|\n| `max_ancestor_depth` | Default 32, max 64. Caps the linear prior walk (including the seed). |\n| `max_children` | Default 32, max 64. Caps first-degree children across the whole chain. |\n| `detail` | Default `full`. Prefer `standard`. |\n\n### Topology\n\n1. Walk seed → `prior_wire_id` → … until root, time-window break, or `max_ancestor_depth`.\n2. Ancestors are walked even through duplicates so the chain stays connected; novelty filtering is applied when projecting the response (seed always kept).\n3. Children: only direct children of chain nodes, capped by `max_children`.\n4. `root_wire_id` is set only if the walk reached a row with `prior_wire_id: null`. **`root_wire_id: null` means truncated** (time window or depth).\n5. Seed outside the requested time window → **404**. Unknown `wire_id` → **404**.\n\n### Default novelty trap\n\n`wire_storyline` defaults to `novelty: [\"new\", \"update\", \"correction\"]` — **duplicates excluded**. That hides cross-publisher fanout.\n\n- Default: good for “how did the story evolve?”\n- Include `\"duplicate\"` when you need “who else printed this?”\n\nExample — easyJet earnings: default novelty → only the Reuters `new` seed; with duplicates → Reuters + Bloomberg + FT copies.\n\nExample — earnings correction chain: `new` → `correction` → `update` → later conflicting `correction`. Storyline is how you catch conflicting prints.\n\nExample — multi-day geopolitics: seed linked through consecutive updates to a root days earlier; a tight time window truncates the chain and returns `root_wire_id: null`.\n\n---\n\n## Workflow\n\n| User intent | Approach |\n|-------------|----------|\n| “What’s moving markets right now?” | `list_wire` with novelty without duplicates, `min_importance_score` ≥ 0.5 |\n| “Any news on Company X?” | `entities` + primary/significant → storyline on the best hit |\n| “Did guidance change?” | `categories: [\"guidance\",\"earnings\"]`, then storyline |\n| “Is this a correction?” | `novelty: [\"correction\"]` or storyline and look for correction nodes |\n| “Who reported it first?” | Storyline with duplicates; earliest `new` / first_party press release is usually the root |\n| “Oil / Red Sea / rates?” | `asset_classes` + `sectors` + geopolitics/macro categories |\n| “What looked important on date D?” | Timestamp window + importance floor + novelty new/update |\n\n1. Clarify scope (entity / sector / theme / time).\n2. `list_wire` with novelty `new|update|correction`, an importance floor, and the tightest true filters.\n3. Pick the highest-importance hit → `wire_storyline` (add `duplicate` if coverage breadth matters).\n4. Brief from headlines + novelty path; escalate to your native web search tool (or the URL) for body text.\n\n---\n\n## Limitations\n\n- No full article text on the public wire surface.\n- `publisher`, `industries`, and `categories` are messy real-world strings.\n- Storyline is shallow by design (linear ancestors + one hop of children).\n- Unfiltered `list_wire` is noisy — bias novelty + importance.\n- `importance_score` is relative rank, not a guarantee.\n\n---\n\n## FAQ\n\n**Q: Why doesn’t storyline show Bloomberg/FT copies?**  \nA: Default novelty drops `duplicate`. Add it explicitly.\n\n**Q: `root_wire_id` is null but items exist.**  \nA: Ancestry was truncated by time window or `max_ancestor_depth`. Widen `start_timestamp`, raise the depth cap, or treat as a partial chain.\n\n**Q: Sort order looks wrong vs IDs.**  \nA: `list_wire` sorts by `source_timestamp` desc, not `wire_id`. Filtration still uses `timestamp`.\n\n**Q: list_wire vs alerts?**  \nA: Same filter vocabulary. The Wire is the pull API; alerts can poll `list_wire` conditions on a schedule.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}