[{"slug":"ZV-2026-1020","server_name":"api.smry.ai","severity":"breaking","title":"api.smry.ai: Type of item on get_saved_article changed object → unset.","summary":"[breaking] Type of item on get_saved_article changed object → unset. [breaking] Type of item on save_article changed object → unset. [breaking] Type of item on save_content changed object → unset. [breaking] Type of item on update_library_item changed object → unset.","changes":[{"kind":"output_type_changed","path":"outputSchema.properties.item","tool":"get_saved_article","after":"unset","before":"object","detail":"Type of `item` on `get_saved_article` changed object → unset.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.item","tool":"save_article","after":"unset","before":"object","detail":"Type of `item` on `save_article` changed object → unset.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.item","tool":"save_content","after":"unset","before":"object","detail":"Type of `item` on `save_content` changed object → unset.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.item","tool":"update_library_item","after":"unset","before":"object","detail":"Type of `item` on `update_library_item` changed object → unset.","severity":"breaking"}],"published_at":"2026-09-13T07:56:16.915Z"},{"slug":"ZV-2026-0997","server_name":"api.smry.ai","severity":"breaking","title":"api.smry.ai: Type of limit on get_library_changes changed integer → number.","summary":"[breaking] Type of limit on get_library_changes changed integer → number. [breaking] Type of content_max_characters on get_library_object changed integer → number. [breaking] Type of limit on list_library changed integer → number. [breaking] Type of content_max_characters on list_library changed integer → number. [breaking] Type of limit on list_library_objects changed integer → number.","changes":[{"kind":"input_type_changed","path":"inputSchema.properties.limit","tool":"get_library_changes","after":"number","before":"integer","detail":"Type of `limit` on `get_library_changes` changed integer → number.","severity":"breaking"},{"kind":"input_type_changed","path":"inputSchema.properties.content_max_characters","tool":"get_library_object","after":"number","before":"integer","detail":"Type of `content_max_characters` on `get_library_object` changed integer → number.","severity":"breaking"},{"kind":"input_type_changed","path":"inputSchema.properties.limit","tool":"list_library","after":"number","before":"integer","detail":"Type of `limit` on `list_library` changed integer → number.","severity":"breaking"},{"kind":"input_type_changed","path":"inputSchema.properties.content_max_characters","tool":"list_library","after":"number","before":"integer","detail":"Type of `content_max_characters` on `list_library` changed integer → number.","severity":"breaking"},{"kind":"input_type_changed","path":"inputSchema.properties.limit","tool":"list_library_objects","after":"number","before":"integer","detail":"Type of `limit` on `list_library_objects` changed integer → number.","severity":"breaking"}],"published_at":"2026-09-12T05:08:21.329Z"},{"slug":"ZV-2026-0803","server_name":"api.smry.ai","severity":"breaking","title":"api.smry.ai: Type of followed on create_news_query changed unset → integer.","summary":"[safe] Description of create_monitor changed (11% word delta). [safe] Description of create_news_query changed (20% word delta). [breaking] Type of followed on create_news_query changed unset → integer. [risky] Description of discover_feed_inputs changed (82% word delta). [safe] Description of follow_feeds changed (14% word delta). [breaking] Type of followed on follow_feeds changed unset → integer. [safe] Description of get_feed_changes changed (8% word delta). [breaking] Type of limit on get_feed_changes changed unset → integer. [breaking] Type of consumer_id on get_feed_changes changed unset → integer. [safe] Description of manage_collections changed (20% word delta). [breaking] Type of id on manage_collections changed unset → integer. [safe] Description of manage_feed_consumers changed (12% word delta). [breaking] Type of id on manage_feed_consumers changed unset → integer. [risky] Description of manage_feed_filter changed (30% word delta). [breaking] Type of expectedRevision on manage_feed_filter changed unset → integer. [risky] Description of mutate_feeds changed (86% word delta). [safe] Description of query_feeds changed (11% word delta). [breaking] Type of limit on query_feeds changed unset → integer. [breaking] Type of per_source_limit on query_feeds changed unset → integer. [safe] Description of set_feed_feedback changed (21% word delta). [breaking] Field entryId on set_feed_feedback is now required. [breaking] Type of entryId on set_feed_feedback changed unset → integer. [breaking] Type of entryId on set_feed_feedback changed unset → integer.","changes":[{"kind":"description_changed","tool":"create_monitor","after":"Create a scheduled web-change monitor whose detected changes arrive as an ordinary followed source — query, watch, and mutate it like any feed. Naming a collection that does not exist creates it. Active monitor limits are Free 3, Patron 10, and Pro 100; scheduled monthly credits are 150, 720, and 7,200, respectively. Page and sitemap runs reserve 1 credit; extract runs reserve 10. The shortest interval is 60 minutes and the default schedule is daily. The response reports remaining slots and scheduled credits.\nExample: {\"name\":\"Example page changes\",\"target\":{\"type\":\"page\",\"url\":\"https://example.com\"},\"collection\":\"Research\"}","before":"Create a scheduled web-change monitor whose detected changes arrive as an ordinary followed source — query, watch, and mutate it like any feed. Naming a collection that does not exist creates it. Active monitor limits are Free 3, Patron 10, and Pro 100; scheduled monthly credits are 150, 720, and 7,200, respectively. Page and sitemap runs reserve 1 credit; extract runs reserve 10. The shortest interval is 60 minutes and the default schedule is daily. The response reports remaining slots and scheduled credits.","detail":"Description of `create_monitor` changed (11% word delta).","severity":"safe","descriptionDelta":0.10810810810810811},{"kind":"description_changed","tool":"create_news_query","after":"Creates a Collection-compatible news query. Google News RSS is the current adapter and is intentionally hidden behind this durable product type.\nExample: {\"query\":\"open source databases\",\"collection\":\"Research\"}","before":"Creates a Collection-compatible news query. Google News RSS is the current adapter and is intentionally hidden behind this durable product type.","detail":"Description of `create_news_query` changed (20% word delta).","severity":"safe","descriptionDelta":0.19999999999999996},{"kind":"output_type_changed","path":"outputSchema.properties.followed","tool":"create_news_query","after":"integer","before":"unset","detail":"Type of `followed` on `create_news_query` changed unset → integer.","severity":"breaking"},{"kind":"description_changed","tool":"discover_feed_inputs","after":"Find public feeds by topic or find a site's published feeds. This is the compact Developer API discovery adapter; use search_feeds for language, ranking, and source-type controls. Discovery does not subscribe; pass result feedUrl values to follow_feeds.\nExample: {\"query\":\"https://www.nasa.gov\",\"mode\":\"site\"}","before":"Search public RSS, Atom, podcast, Reddit, and YouTube feeds by topic, or discover the feeds a site URL publishes. Discovery only — follow the results with followFeeds.","detail":"Description of `discover_feed_inputs` changed (82% word delta).","severity":"risky","descriptionDelta":0.8245614035087719},{"kind":"description_changed","tool":"follow_feeds","after":"Follow up to 20 feed or site URLs in one call. Site URLs are resolved to their published feed. Naming a collection that does not exist creates it. Returns a per-URL outcome — partial success is normal and legible, never all-or-nothing.\nExample: {\"urls\":[\"https://www.nasa.gov/feed/\"],\"collection\":\"Research\"}","before":"Follow up to 20 feed or site URLs in one call. Site URLs are resolved to their published feed. Naming a collection that does not exist creates it. Returns a per-URL outcome — partial success is normal and legible, never all-or-nothing.","detail":"Description of `follow_feeds` changed (14% word delta).","severity":"safe","descriptionDelta":0.13953488372093026},{"kind":"output_type_changed","path":"outputSchema.properties.followed","tool":"follow_feeds","after":"integer","before":"unset","detail":"Type of `followed` on `follow_feeds` changed unset → integer.","severity":"breaking"},{"kind":"description_changed","tool":"get_feed_changes","after":"One stream, two checkpoint owners. Stateful callers pass cursor:\"latest\", then store each next_cursor themselves. Stateless scheduled agents pass consumer_id; smry retains the acknowledged position and the consumer's saved where predicate. Pass exactly one. Managed batches repeat until their next_cursor is acknowledged. Every response also carries source-health attention.\nExample: {\"cursor\":\"latest\",\"limit\":20}\nExample: {\"consumer_id\":7,\"limit\":20}","before":"One stream, two checkpoint owners. Stateful callers pass cursor:\"latest\", then store each next_cursor themselves. Stateless scheduled agents pass consumer_id; smry retains the acknowledged position and the consumer's saved where predicate. Pass exactly one. Managed batches repeat until their next_cursor is acknowledged. Every response also carries source-health attention.","detail":"Description of `get_feed_changes` changed (8% word delta).","severity":"safe","descriptionDelta":0.08333333333333337},{"kind":"input_type_changed","path":"inputSchema.properties.limit","tool":"get_feed_changes","after":"integer","before":"unset","detail":"Type of `limit` on `get_feed_changes` changed unset → integer.","severity":"breaking"},{"kind":"input_type_changed","path":"inputSchema.properties.consumer_id","tool":"get_feed_changes","after":"integer","before":"unset","detail":"Type of `consumer_id` on `get_feed_changes` changed unset → integer.","severity":"breaking"},{"kind":"description_changed","tool":"manage_collections","after":"list: Returns the same owner-scoped Collections shown in /feeds, including canonical filter state and revision. Required fields: none.\nExample: {\"action\":\"list\"}\ncreate: Creates the same named Collection used by the production /feeds UI. Required fields: name.\nExample: {\"action\":\"create\",\"name\":\"Research\"}\nupdate: Membership is a complete replacement, matching the production Collection editor. Required fields: id.\nExample: {\"action\":\"update\",\"id\":12,\"name\":\"Engineering\"}\ndelete: Deletes a custom Collection and moves its inputs to Unsorted. Required fields: id.\nExample: {\"action\":\"delete\",\"id\":12}","before":"list: Returns the same owner-scoped Collections shown in /feeds, including canonical filter state and revision.\ncreate: Creates the same named Collection used by the production /feeds UI.\nupdate: Membership is a complete replacement, matching the production Collection editor.\ndelete: Deletes a custom Collection and moves its inputs to Unsorted.","detail":"Description of `manage_collections` changed (20% word delta).","severity":"safe","descriptionDelta":0.19999999999999996},{"kind":"input_type_changed","path":"inputSchema.properties.id","tool":"manage_collections","after":"integer","before":"unset","detail":"Type of `id` on `manage_collections` changed unset → integer.","severity":"breaking"},{"kind":"description_changed","tool":"manage_feed_consumers","after":"create: Save a where predicate and let smry retain one processing checkpoint. New consumers start at the current high-water mark, so they receive future discoveries rather than replaying history. For history, create the Consumer first, query the historical window separately, then poll; that order closes the query/create race. Create one per independent processing loop, not per source. Retrying the same case-insensitive name and predicate returns the existing Consumer; the same name with another predicate is a 409. Required fields: name.\nExample: {\"action\":\"create\",\"name\":\"Engineering briefing\",\"where\":{\"collection\":[\"Research\"]}}\nlist: List each saved consumer, its opaque acknowledged_cursor, delivery and acknowledgement timestamps, and how many matching entries are waiting past that checkpoint. Required fields: none.\nExample: {\"action\":\"list\"}\nack: After processing every event returned by getFeedChanges for this consumer, acknowledge that response's next_cursor. Crashes before ack cause safe redelivery; stale, foreign, and invented cursors are rejected. Required fields: id, cursor.\nExample: {\"action\":\"ack\",\"id\":7,\"cursor\":\"<next_cursor from get_feed_changes>\"}\ndelete: Remove only the saved predicate and checkpoint. Followed sources, entries, and human read state are untouched. Required fields: id.\nExample: {\"action\":\"delete\",\"id\":7}","before":"create: Save a where predicate and let smry retain one processing checkpoint. New consumers start at the current high-water mark, so they receive future discoveries rather than replaying history. For history, create the Consumer first, query the historical window separately, then poll; that order closes the query/create race. Create one per independent processing loop, not per source. Retrying the same case-insensitive name and predicate returns the existing Consumer; the same name with another predicate is a 409.\nlist: List each saved consumer, its opaque acknowledged_cursor, delivery and acknowledgement timestamps, and how many matching entries are waiting past that checkpoint.\nack: After processing every event returned by getFeedChanges for this consumer, acknowledge that response's next_cursor. Crashes before ack cause safe redelivery; stale, foreign, and invented cursors are rejected.\ndelete: Remove only the saved predicate and checkpoint. Followed sources, entries, and human read state are untouched.","detail":"Description of `manage_feed_consumers` changed (12% word delta).","severity":"safe","descriptionDelta":0.1166666666666667},{"kind":"input_type_changed","path":"inputSchema.properties.id","tool":"manage_feed_consumers","after":"integer","before":"unset","detail":"Type of `id` on `manage_feed_consumers` changed unset → integer.","severity":"breaking"},{"kind":"description_changed","tool":"manage_feed_filter","after":"preview: Classifies a bounded recent sample and returns both binary decisions, uncertainty counts, reasons, and degradation status. Save with applyFeedFilter using this preview token and Collection revision. Required fields: collection, filter.\nExample: {\"action\":\"preview\",\"collection\":{\"id\":12},\"filter\":{\"prompt\":\"Software engineering articles\",\"whenUncertain\":\"include\"}}\napply: Atomically applies the exact preview when the Collection revision still matches. Passing a preview created with filter:null clears the filter. Required fields: previewToken, expectedRevision.\nExample: {\"action\":\"apply\",\"previewToken\":\"<previewToken from preview>\",\"expectedRevision\":0}","before":"preview: Classifies a bounded recent sample and returns both binary decisions, uncertainty counts, reasons, and degradation status. Save with applyFeedFilter using this preview token and Collection revision.\napply: Atomically applies the exact preview when the Collection revision still matches. Passing a preview created with filter:null clears the filter.","detail":"Description of `manage_feed_filter` changed (30% word delta).","severity":"risky","descriptionDelta":0.30188679245283023},{"kind":"input_type_changed","path":"inputSchema.properties.expectedRevision","tool":"manage_feed_filter","after":"integer","before":"unset","detail":"Type of `expectedRevision` on `manage_feed_filter` changed unset → integer.","severity":"breaking"},{"kind":"description_changed","tool":"mutate_feeds","after":"Preview changes to matching sources, entries, or collections. Default dry_run:true returns would_affect, sample, and commit_token without changing them. Commit by sending the same op and commit_token; retries replay the recorded result. Explicit dry_run:false applies immediately. sources.move needs set.collection; sources.rename needs set.title; collections.create/rename need set.name. Collections rename/delete need exactly one where.collection. Use manage_collections for direct collection CRUD. Check partial and each outcome after committing.\nExample: {\"op\":\"collections.create\",\"set\":{\"name\":\"Research\"}}\nExample: {\"op\":\"sources.move\",\"where\":{\"source\":{\"include\":[42]}},\"set\":{\"collection\":\"Research\"}}\nExample: {\"op\":\"sources.move\",\"commit_token\":\"<commit_token from preview>\"}","before":"Mutate by predicate, not by id list. The first call is always a dry run: it returns the blast radius (would_affect + samples) and a commit_token. Committing with the token executes once and records the outcome — resending the same token replays the recorded result instead of double-running. Commits return per-item outcomes; partial success is explicit.","detail":"Description of `mutate_feeds` changed (86% word delta).","severity":"risky","descriptionDelta":0.8645833333333334},{"kind":"description_changed","tool":"query_feeds","after":"One predicate, three shapes. select:\"entries\" returns rows (default: newest-discovered first, summaries excluded, per_source_limit available for fair allocation). select:\"sources\" returns cursor-paginated per-source health — last_published_at, entries_7d/28d, unread, silent_days, and a health verdict (active/quiet/stalled/erroring/never) — so dead sources are data, not inference. select:\"aggregate\" returns counts grouped by source, collection, or day, with optional window-vs-baseline trend. Every response carries total and omitted so a filtered view is never mistaken for an empty world. Time inputs accept \"7d\"/\"36h\"/\"45m\" or ISO dates.\nExample: {\"select\":\"entries\",\"where\":{\"unread\":true},\"limit\":10}\nExample: {\"select\":\"sources\",\"having\":{\"silent_days\":{\"gte\":30}},\"limit\":10}\nExample: {\"select\":\"aggregate\",\"group_by\":\"collection\",\"where\":{\"discovered_after\":\"7d\"}}","before":"One predicate, three shapes. select:\"entries\" returns rows (default: newest-discovered first, summaries excluded, per_source_limit available for fair allocation). select:\"sources\" returns cursor-paginated per-source health — last_published_at, entries_7d/28d, unread, silent_days, and a health verdict (active/quiet/stalled/erroring/never) — so dead sources are data, not inference. select:\"aggregate\" returns counts grouped by source, collection, or day, with optional window-vs-baseline trend. Every response carries total and omitted so a filtered view is never mistaken for an empty world. Time inputs accept \"7d\"/\"36h\"/\"45m\" or ISO dates.","detail":"Description of `query_feeds` changed (11% word delta).","severity":"safe","descriptionDelta":0.11494252873563215},{"kind":"input_type_changed","path":"inputSchema.properties.limit","tool":"query_feeds","after":"integer","before":"unset","detail":"Type of `limit` on `query_feeds` changed unset → integer.","severity":"breaking"},{"kind":"input_type_changed","path":"inputSchema.properties.per_source_limit","tool":"query_feeds","after":"integer","before":"unset","detail":"Type of `per_source_limit` on `query_feeds` changed unset → integer.","severity":"breaking"},{"kind":"description_changed","tool":"set_feed_feedback","after":"Less like this hides an included entry. Feedback remains separate agent context and never silently revises the Collection filter.\nExample: {\"entryId\":42,\"value\":\"less_like_this\"}","before":"Less like this hides an included entry. Feedback remains separate agent context and never silently revises the Collection filter.","detail":"Description of `set_feed_feedback` changed (21% word delta).","severity":"safe","descriptionDelta":0.20833333333333337},{"kind":"input_required_added","path":"inputSchema.required.entryId","tool":"set_feed_feedback","detail":"Field `entryId` on `set_feed_feedback` is now required.","severity":"breaking"},{"kind":"input_type_changed","path":"inputSchema.properties.entryId","tool":"set_feed_feedback","after":"integer","before":"unset","detail":"Type of `entryId` on `set_feed_feedback` changed unset → integer.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.entryId","tool":"set_feed_feedback","after":"integer","before":"unset","detail":"Type of `entryId` on `set_feed_feedback` changed unset → integer.","severity":"breaking"}],"published_at":"2026-09-07T14:03:18.380Z"},{"slug":"ZV-2026-0781","server_name":"api.smry.ai","severity":"breaking","title":"api.smry.ai: Field url was removed from create_monitor input; consumers still sending it may be rejected or silently ignored.","summary":"[safe] Tool bulk_update_library_items was added. [safe] Tool create_news_query was added. [safe] Tool discover_feed_inputs was added. [safe] Tool get_feed_changes was added. [safe] Tool get_library_asset was added. [safe] Tool get_library_changes was added. [safe] Tool get_library_object was added. [safe] Tool get_saved_article was added. [safe] Tool list_library was added. [safe] Tool list_library_objects was added. [safe] Tool manage_collections was added. [safe] Tool manage_feed_consumers was added. [safe] Tool manage_feed_filter was added. [safe] Tool mutate_feeds was added. [safe] Tool query_feeds was added. [safe] Tool remove_library_item was added. [safe] Tool save_content was added. [safe] Tool search_saved_item was added. [safe] Tool set_feed_feedback was added. [risky] Description of create_monitor changed (90% word delta). [breaking] Field url was removed from create_monitor input; consumers still sending it may be rejected or silently ignored. [risky] Optional field change_detection was added to create_monitor; may shift model behaviour. [risky] Optional field collection was added to create_monitor; may shift model behaviour. [breaking] Field title was renamed to name on create_monitor. [risky] Optional field schedule was added to create_monitor; may shift model behaviour. [risky] Optional field tags was added to create_monitor; may shift model behaviour. [breaking] New required field target on create_monitor; requests without it will fail. [risky] Field limits was added to create_monitor output. [risky] Field monitor was added to create_monitor output. [risky] Field subscription was added to create_monitor output. [risky] Description of follow_feeds changed (95% word delta). [breaking] Type of collection on follow_feeds changed string → unset. [risky] Field collection was added to follow_feeds output. [risky] Field followed was added to follow_feeds output. [risky] Field object was added to follow_feeds output. [risky] Field outcomes was added to follow","changes":[{"kind":"tool_added","tool":"bulk_update_library_items","detail":"Tool `bulk_update_library_items` was added.","severity":"safe"},{"kind":"tool_added","tool":"create_news_query","detail":"Tool `create_news_query` was added.","severity":"safe"},{"kind":"tool_added","tool":"discover_feed_inputs","detail":"Tool `discover_feed_inputs` was added.","severity":"safe"},{"kind":"tool_added","tool":"get_feed_changes","detail":"Tool `get_feed_changes` was added.","severity":"safe"},{"kind":"tool_added","tool":"get_library_asset","detail":"Tool `get_library_asset` was added.","severity":"safe"},{"kind":"tool_added","tool":"get_library_changes","detail":"Tool `get_library_changes` was added.","severity":"safe"},{"kind":"tool_added","tool":"get_library_object","detail":"Tool `get_library_object` was added.","severity":"safe"},{"kind":"tool_added","tool":"get_saved_article","detail":"Tool `get_saved_article` was added.","severity":"safe"},{"kind":"tool_added","tool":"list_library","detail":"Tool `list_library` was added.","severity":"safe"},{"kind":"tool_added","tool":"list_library_objects","detail":"Tool `list_library_objects` was added.","severity":"safe"},{"kind":"tool_added","tool":"manage_collections","detail":"Tool `manage_collections` was added.","severity":"safe"},{"kind":"tool_added","tool":"manage_feed_consumers","detail":"Tool `manage_feed_consumers` was added.","severity":"safe"},{"kind":"tool_added","tool":"manage_feed_filter","detail":"Tool `manage_feed_filter` was added.","severity":"safe"},{"kind":"tool_added","tool":"mutate_feeds","detail":"Tool `mutate_feeds` was added.","severity":"safe"},{"kind":"tool_added","tool":"query_feeds","detail":"Tool `query_feeds` was added.","severity":"safe"},{"kind":"tool_added","tool":"remove_library_item","detail":"Tool `remove_library_item` was added.","severity":"safe"},{"kind":"tool_added","tool":"save_content","detail":"Tool `save_content` was added.","severity":"safe"},{"kind":"tool_added","tool":"search_saved_item","detail":"Tool `search_saved_item` was added.","severity":"safe"},{"kind":"tool_added","tool":"set_feed_feedback","detail":"Tool `set_feed_feedback` was added.","severity":"safe"},{"kind":"description_changed","tool":"create_monitor","after":"Create a scheduled web-change monitor whose detected changes arrive as an ordinary followed source — query, watch, and mutate it like any feed. Naming a collection that does not exist creates it. Active monitor limits are Free 3, Patron 10, and Pro 100; scheduled monthly credits are 150, 720, and 7,200, respectively. Page and sitemap runs reserve 1 credit; extract runs reserve 10. The shortest interval is 60 minutes and the default schedule is daily. The response reports remaining slots and scheduled credits.","before":"Authenticated smry product action. Create a persistent page-change monitor that delivers future updates into the user's followed sources.","detail":"Description of `create_monitor` changed (90% word delta).","severity":"risky","descriptionDelta":0.8974358974358975},{"kind":"input_property_removed","path":"inputSchema.properties.url","tool":"create_monitor","before":{"type":"string","format":"uri"},"detail":"Field `url` was removed from `create_monitor` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.change_detection","tool":"create_monitor","after":{"anyOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","const":"exact"}},"additionalProperties":false},{"type":"object","required":["type"],"properties":{"type":{"type":"string","const":"semantic"},"confidence_threshold":{"type":"number","maximum":1,"minimum":0}},"additionalProperties":false}]},"detail":"Optional field `change_detection` was added to `create_monitor`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.collection","tool":"create_monitor","after":{"anyOf":[{"anyOf":[{"type":"string","default":0},{"type":"integer","maximum":9007199254740991,"minimum":1}]},{"type":"string","maxLength":100,"minLength":1}],"description":"Collection id or name. A new name is created. Omit for Unsorted."},"detail":"Optional field `collection` was added to `create_monitor`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_renamed","path":"inputSchema.properties.title","tool":"create_monitor","after":"name","before":"title","detail":"Field `title` was renamed to `name` on `create_monitor`.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.schedule","tool":"create_monitor","after":{"anyOf":[{"type":"object","required":["type","unit"],"properties":{"type":{"type":"string","const":"interval"},"unit":{"type":"string","const":"minutes"},"frequency":{"anyOf":[{"type":"string","default":0},{"type":"integer","maximum":43200,"minimum":60}]}},"additionalProperties":false},{"type":"object","required":["type","unit"],"properties":{"type":{"type":"string","const":"interval"},"unit":{"type":"string","const":"hours"},"frequency":{"anyOf":[{"type":"string","default":0},{"type":"integer","maximum":720,"minimum":1}]}},"additionalProperties":false},{"type":"object","required":["type","unit"],"properties":{"type":{"type":"string","const":"interval"},"unit":{"type":"string","const":"days"},"frequency":{"anyOf":[{"type":"string","default":0},{"type":"integer","maximum":30,"minimum":1}]}},"additionalProperties":false}],"description":"Default: daily. Shortest interval: 60 minutes."},"detail":"Optional field `schedule` was added to `create_monitor`; may shift model behaviour.","severity":"risky"},{"kind":"input_property_added","path":"inputSchema.properties.tags","tool":"create_monitor","after":{"type":"array","items":{"type":"string","maxLength":50,"minLength":1},"maxItems":18},"detail":"Optional field `tags` was added to `create_monitor`; may shift model behaviour.","severity":"risky"},{"kind":"input_required_added","path":"inputSchema.properties.target","tool":"create_monitor","after":{"anyOf":[{"type":"object","required":["type","url"],"properties":{"url":{"type":"string","maxLength":2048,"minLength":8,"description":"A public http(s) URL."},"type":{"type":"string","const":"page"},"instructions":{"type":"string","maxLength":2000,"minLength":1},"normalize_whitespace":{"type":"boolean"}},"additionalProperties":false},{"type":"object","required":["type","url"],"properties":{"url":{"type":"string","maxLength":2048,"minLength":8,"description":"A public http(s) URL."},"type":{"type":"string","const":"sitemap"},"exclude":{"type":"array","items":{"type":"string","maxLength":200,"minLength":1},"maxItems":50},"include":{"type":"array","items":{"type":"string","maxLength":200,"minLength":1},"maxItems":50},"max_urls":{"anyOf":[{"type":"string","default":0},{"type":"integer","maximum":10000,"minimum":1}]}},"additionalProperties":false},{"type":"object","required":["type","url","instructions"],"properties":{"url":{"type":"string","maxLength":2048,"minLength":8,"description":"A public http(s) URL."},"type":{"type":"string","const":"extract"},"instructions":{"type":"string","maxLength":2000,"minLength":1}},"additionalProperties":false}],"description":"\"page\" watches one URL, \"sitemap\" watches URL additions/removals, \"extract\" watches for meaningful site-wide changes per your instructions."},"detail":"New required field `target` on `create_monitor`; requests without it will fail.","severity":"breaking"},{"kind":"output_property_added","path":"outputSchema.properties.limits","tool":"create_monitor","after":{"type":"object","patternProperties":{"^(.*)$":{}}},"detail":"Field `limits` was added to `create_monitor` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.monitor","tool":"create_monitor","after":{"type":"object","patternProperties":{"^(.*)$":{}}},"detail":"Field `monitor` was added to `create_monitor` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.subscription","tool":"create_monitor","after":{"type":"object","patternProperties":{"^(.*)$":{}}},"detail":"Field `subscription` was added to `create_monitor` output.","severity":"risky"},{"kind":"description_changed","tool":"follow_feeds","after":"Follow up to 20 feed or site URLs in one call. Site URLs are resolved to their published feed. Naming a collection that does not exist creates it. Returns a per-URL outcome — partial success is normal and legible, never all-or-nothing.","before":"Authenticated smry product action. Add public RSS or Atom feeds to the user's account so new entries appear in smry automatically.","detail":"Description of `follow_feeds` changed (95% word delta).","severity":"risky","descriptionDelta":0.9454545454545454},{"kind":"input_type_changed","path":"inputSchema.properties.collection","tool":"follow_feeds","after":"unset","before":"string","detail":"Type of `collection` on `follow_feeds` changed string → unset.","severity":"breaking"},{"kind":"output_property_added","path":"outputSchema.properties.collection","tool":"follow_feeds","after":{"type":"string"},"detail":"Field `collection` was added to `follow_feeds` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.followed","tool":"follow_feeds","after":{"anyOf":[{"type":"string","default":0},{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991}]},"detail":"Field `followed` was added to `follow_feeds` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.object","tool":"follow_feeds","after":{"type":"string","const":"feed_follow"},"detail":"Field `object` was added to `follow_feeds` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.outcomes","tool":"follow_feeds","after":{"type":"array","items":{"type":"object","patternProperties":{"^(.*)$":{}}}},"detail":"Field `outcomes` was added to `follow_feeds` output.","severity":"risky"},{"kind":"description_changed","tool":"save_article","after":"Securely extract a public URL and idempotently add it to the account's library. Returns alreadySaved=true for a duplicate and reports hard paywalls instead of claiming success.","before":"Authenticated smry product action. Extract a public URL and idempotently save it to the user's reading library for later reading, search, and organization.","detail":"Description of `save_article` changed (67% word delta).","severity":"risky","descriptionDelta":0.6666666666666667},{"kind":"input_type_changed","path":"inputSchema.properties.status","tool":"save_article","after":"unset","before":"string","detail":"Type of `status` on `save_article` changed string → unset.","severity":"breaking"},{"kind":"enum_value_removed","path":"inputSchema.properties.status","tool":"save_article","before":"inbox","detail":"Enum value `inbox` removed from `status` on `save_article`.","severity":"breaking"},{"kind":"enum_value_removed","path":"inputSchema.properties.status","tool":"save_article","before":"later","detail":"Enum value `later` removed from `status` on `save_article`.","severity":"breaking"},{"kind":"enum_value_removed","path":"inputSchema.properties.status","tool":"save_article","before":"archive","detail":"Enum value `archive` removed from `status` on `save_article`.","severity":"breaking"},{"kind":"output_property_added","path":"outputSchema.properties.alreadySaved","tool":"save_article","after":{"type":"boolean"},"detail":"Field `alreadySaved` was added to `save_article` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.extraction","tool":"save_article","after":{"type":"object","required":["source","cacheHit","qualityStatus"],"properties":{"source":{"type":"string"},"cacheHit":{"type":"boolean"},"qualityStatus":{"type":["string","null"]}},"additionalProperties":false},"detail":"Field `extraction` was added to `save_article` output.","severity":"risky"},{"kind":"output_property_added","path":"outputSchema.properties.item","tool":"save_article","after":{"type":"object","required":["id","url","originalUrl","title","domain","contentKind","classification","captureMethod","format","mimeType","fileName","asset","externalId","status","tags","savedAt","updatedAt","lastReadAt","readProgress","articleStatus"],"properties":{"id":{"type":"string"},"url":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"asset":{"anyOf":[{"type":"object","required":["itemId","fileName","mimeType","size","checksum","updatedAt","resourceUri","downloadUrl"],"properties":{"size":{"type":"number"},"itemId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"checksum":{"type":"string"},"fileName":{"type":"string"},"mimeType":{"type":"string"},"updatedAt":{"type":"string"},"downloadUrl":{"type":"string"},"resourceUri":{"type":"string"}},"additionalProperties":{}},{"type":"null"}]},"title":{"type":"string"},"domain":{"type":"string"},"format":{"anyOf":[{"type":"string","const":"html"},{"type":"string","const":"pdf"},{"type":"string","const":"epub"},{"type":"string","const":"markdown"},{"type":"string","const":"plain_text"},{"type":"string","const":"document"},{"type":"string","const":"spreadsheet"},{"type":"string","const":"presentation"},{"type":"string","const":"audio"},{"type":"string","const":"video"},{"type":"string","const":"unknown"}]},"status":{"type":"string"},"article":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"savedAt":{"type":"string"},"fileName":{"type":["string","null"]},"metadata":{"type":"object","patternProperties":{"^(.*)$":{}}},"mimeType":{"type":["string","null"]},"updatedAt":{"type":"string"},"externalId":{"type":["string","null"]},"lastReadAt":{"type":["string","null"]},"contentKind":{"anyOf":[{"type":"string","const":"article"},{"type":"string","const":"website"},{"type":"string","const":"book"},{"type":"string","const":"email"},{"type":"string","const":"pdf"},{"type":"string","const":"social_post"},{"type":"string","const":"video"},{"type":"string","const":"podcast_episode"},{"type":"string","const":"document"},{"type":"string","const":"unknown"}]},"originalUrl":{"type":["string","null"]},"readProgress":{"type":["number","null"]},"articleStatus":{"type":"string"},"captureMethod":{"anyOf":[{"type":"string","const":"reader"},{"type":"string","const":"extension"},{"type":"string","const":"upload"},{"type":"string","const":"rss"},{"type":"string","const":"email_inbox"},{"type":"string","const":"api"},{"type":"string","const":"import"}]},"classification":{"type":"object","required":["method","confidence","version","updatedAt"],"properties":{"method":{"anyOf":[{"type":"string","const":"user"},{"type":"string","const":"source_adapter"},{"type":"string","const":"mime"},{"type":"string","const":"extension"},{"type":"string","const":"url"},{"type":"string","const":"metadata"},{"type":"string","const":"legacy"},{"type":"string","const":"fallback"}]},"version":{"type":"string"},"updatedAt":{"type":"string"},"confidence":{"type":"integer","maximum":100,"minimum":0}},"additionalProperties":{}}}},"detail":"Field `item` was added to `save_article` output.","severity":"risky"},{"kind":"description_changed","tool":"update_library_item","after":"Move, tag, mark read, update progress, or correct the classification of one library item.","before":"Authenticated smry product action. Move, tag, mark read, or update reading progress for an item in the user's library.","detail":"Description of `update_library_item` changed (58% word delta).","severity":"risky","descriptionDelta":0.5833333333333333},{"kind":"input_property_added","path":"inputSchema.properties.content_kind","tool":"update_library_item","after":{"anyOf":[{"type":"string","const":"article"},{"type":"string","const":"website"},{"type":"string","const":"book"},{"type":"string","const":"email"},{"type":"string","const":"pdf"},{"type":"string","const":"social_post"},{"type":"string","const":"video"},{"type":"string","const":"podcast_episode"},{"type":"string","const":"document"},{"type":"string","const":"unknown"}]},"detail":"Optional field `content_kind` was added to `update_library_item`; may shift model behaviour.","severity":"risky"},{"kind":"input_type_changed","path":"inputSchema.properties.status","tool":"update_library_item","after":"unset","before":"string","detail":"Type of `status` on `update_library_item` changed string → unset.","severity":"breaking"},{"kind":"enum_value_removed","path":"inputSchema.properties.status","tool":"update_library_item","before":"inbox","detail":"Enum value `inbox` removed from `status` on `update_library_item`.","severity":"breaking"},{"kind":"enum_value_removed","path":"inputSchema.properties.status","tool":"update_library_item","before":"later","detail":"Enum value `later` removed from `status` on `update_library_item`.","severity":"breaking"},{"kind":"enum_value_removed","path":"inputSchema.properties.status","tool":"update_library_item","before":"archive","detail":"Enum value `archive` removed from `status` on `update_library_item`.","severity":"breaking"},{"kind":"output_property_added","path":"outputSchema.properties.item","tool":"update_library_item","after":{"type":"object","required":["id","url","originalUrl","title","domain","contentKind","classification","captureMethod","format","mimeType","fileName","asset","externalId","status","tags","savedAt","updatedAt","lastReadAt","readProgress","articleStatus"],"properties":{"id":{"type":"string"},"url":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"asset":{"anyOf":[{"type":"object","required":["itemId","fileName","mimeType","size","checksum","updatedAt","resourceUri","downloadUrl"],"properties":{"size":{"type":"number"},"itemId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"checksum":{"type":"string"},"fileName":{"type":"string"},"mimeType":{"type":"string"},"updatedAt":{"type":"string"},"downloadUrl":{"type":"string"},"resourceUri":{"type":"string"}},"additionalProperties":{}},{"type":"null"}]},"title":{"type":"string"},"domain":{"type":"string"},"format":{"anyOf":[{"type":"string","const":"html"},{"type":"string","const":"pdf"},{"type":"string","const":"epub"},{"type":"string","const":"markdown"},{"type":"string","const":"plain_text"},{"type":"string","const":"document"},{"type":"string","const":"spreadsheet"},{"type":"string","const":"presentation"},{"type":"string","const":"audio"},{"type":"string","const":"video"},{"type":"string","const":"unknown"}]},"status":{"type":"string"},"article":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"savedAt":{"type":"string"},"fileName":{"type":["string","null"]},"metadata":{"type":"object","patternProperties":{"^(.*)$":{}}},"mimeType":{"type":["string","null"]},"updatedAt":{"type":"string"},"externalId":{"type":["string","null"]},"lastReadAt":{"type":["string","null"]},"contentKind":{"anyOf":[{"type":"string","const":"article"},{"type":"string","const":"website"},{"type":"string","const":"book"},{"type":"string","const":"email"},{"type":"string","const":"pdf"},{"type":"string","const":"social_post"},{"type":"string","const":"video"},{"type":"string","const":"podcast_episode"},{"type":"string","const":"document"},{"type":"string","const":"unknown"}]},"originalUrl":{"type":["string","null"]},"readProgress":{"type":["number","null"]},"articleStatus":{"type":"string"},"captureMethod":{"anyOf":[{"type":"string","const":"reader"},{"type":"string","const":"extension"},{"type":"string","const":"upload"},{"type":"string","const":"rss"},{"type":"string","const":"email_inbox"},{"type":"string","const":"api"},{"type":"string","const":"import"}]},"classification":{"type":"object","required":["method","confidence","version","updatedAt"],"properties":{"method":{"anyOf":[{"type":"string","const":"user"},{"type":"string","const":"source_adapter"},{"type":"string","const":"mime"},{"type":"string","const":"extension"},{"type":"string","const":"url"},{"type":"string","const":"metadata"},{"type":"string","const":"legacy"},{"type":"string","const":"fallback"}]},"version":{"type":"string"},"updatedAt":{"type":"string"},"confidence":{"type":"integer","maximum":100,"minimum":0}},"additionalProperties":{}}}},"detail":"Field `item` was added to `update_library_item` output.","severity":"risky"}],"published_at":"2026-09-07T06:30:20.495Z"}]