keep-up-with 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. keep_up_with-0.1.0/.github/workflows/ci.yml +40 -0
  2. keep_up_with-0.1.0/.github/workflows/publish.yml +37 -0
  3. keep_up_with-0.1.0/.gitignore +13 -0
  4. keep_up_with-0.1.0/LICENSE +21 -0
  5. keep_up_with-0.1.0/PKG-INFO +146 -0
  6. keep_up_with-0.1.0/README.md +120 -0
  7. keep_up_with-0.1.0/assets/logo.png +0 -0
  8. keep_up_with-0.1.0/assets/overview.png +0 -0
  9. keep_up_with-0.1.0/assets/workflow.png +0 -0
  10. keep_up_with-0.1.0/evals/cases/scenario_filter_all_noise/case.toml +5 -0
  11. keep_up_with-0.1.0/evals/cases/scenario_filter_all_noise/events.json +267 -0
  12. keep_up_with-0.1.0/evals/cases/scenario_filter_all_noise/expected/assertions.md +9 -0
  13. keep_up_with-0.1.0/evals/cases/scenario_filter_mixed_tools/case.toml +5 -0
  14. keep_up_with-0.1.0/evals/cases/scenario_filter_mixed_tools/events.json +120 -0
  15. keep_up_with-0.1.0/evals/cases/scenario_filter_mixed_tools/expected/assertions.md +12 -0
  16. keep_up_with-0.1.0/evals/cases/scenario_startup/case.toml +5 -0
  17. keep_up_with-0.1.0/evals/cases/scenario_startup/events.json +1 -0
  18. keep_up_with-0.1.0/evals/cases/scenario_startup/expected/assertions.md +5 -0
  19. keep_up_with-0.1.0/evals/cases/scenario_story_thread_glm52/case.toml +5 -0
  20. keep_up_with-0.1.0/evals/cases/scenario_story_thread_glm52/events.json +59 -0
  21. keep_up_with-0.1.0/evals/cases/scenario_story_thread_glm52/expected/assertions.md +9 -0
  22. keep_up_with-0.1.0/evals/cases/scenario_trend_thread_html_outputs/case.toml +5 -0
  23. keep_up_with-0.1.0/evals/cases/scenario_trend_thread_html_outputs/events.json +74 -0
  24. keep_up_with-0.1.0/evals/cases/scenario_trend_thread_html_outputs/expected/assertions.md +12 -0
  25. keep_up_with-0.1.0/evals/cases/unit_ai_explained_fable_video/case.toml +5 -0
  26. keep_up_with-0.1.0/evals/cases/unit_ai_explained_fable_video/events.json +25 -0
  27. keep_up_with-0.1.0/evals/cases/unit_ai_explained_fable_video/expected/assertions.md +10 -0
  28. keep_up_with-0.1.0/evals/cases/unit_ai_explained_fable_video/expected/assets/Qj71N0tBzRo-1.jpg +0 -0
  29. keep_up_with-0.1.0/evals/cases/unit_ai_explained_fable_video/expected/assets/Qj71N0tBzRo-2.jpg +0 -0
  30. keep_up_with-0.1.0/evals/cases/unit_ai_explained_fable_video/expected/assets/Qj71N0tBzRo-3.jpg +0 -0
  31. keep_up_with-0.1.0/evals/cases/unit_ai_explained_fable_video/expected/assets/Qj71N0tBzRo-4.jpg +0 -0
  32. keep_up_with-0.1.0/evals/cases/unit_ai_explained_fable_video/expected/assets/Qj71N0tBzRo-5.jpg +0 -0
  33. keep_up_with-0.1.0/evals/cases/unit_ai_explained_fable_video/expected/reference.md +79 -0
  34. keep_up_with-0.1.0/evals/cases/unit_claude_lazy_senior_dev_mode/case.toml +5 -0
  35. keep_up_with-0.1.0/evals/cases/unit_claude_lazy_senior_dev_mode/events.json +19 -0
  36. keep_up_with-0.1.0/evals/cases/unit_claude_lazy_senior_dev_mode/expected/assertions.md +10 -0
  37. keep_up_with-0.1.0/evals/cases/unit_claude_lazy_senior_dev_mode/expected/assets/ponytail-benchmark-lines.svg +35 -0
  38. keep_up_with-0.1.0/evals/cases/unit_claude_lazy_senior_dev_mode/expected/assets/ponytail-email-validation.png +0 -0
  39. keep_up_with-0.1.0/evals/cases/unit_claude_lazy_senior_dev_mode/expected/assets/ponytail-how-it-works.png +0 -0
  40. keep_up_with-0.1.0/evals/cases/unit_claude_lazy_senior_dev_mode/expected/assets/ponytail-repo-readme.png +0 -0
  41. keep_up_with-0.1.0/evals/cases/unit_claude_lazy_senior_dev_mode/expected/assets/ponytail-star-history.svg +1 -0
  42. keep_up_with-0.1.0/evals/cases/unit_claude_lazy_senior_dev_mode/expected/reference.md +63 -0
  43. keep_up_with-0.1.0/evals/cases/unit_claude_opus_malware_repo/case.toml +5 -0
  44. keep_up_with-0.1.0/evals/cases/unit_claude_opus_malware_repo/events.json +21 -0
  45. keep_up_with-0.1.0/evals/cases/unit_claude_opus_malware_repo/expected/assertions.md +10 -0
  46. keep_up_with-0.1.0/evals/cases/unit_claude_opus_malware_repo/expected/reference.md +23 -0
  47. keep_up_with-0.1.0/evals/cases/unit_coralboard_gemma_on_device/case.toml +5 -0
  48. keep_up_with-0.1.0/evals/cases/unit_coralboard_gemma_on_device/events.json +22 -0
  49. keep_up_with-0.1.0/evals/cases/unit_coralboard_gemma_on_device/expected/assertions.md +10 -0
  50. keep_up_with-0.1.0/evals/cases/unit_coralboard_gemma_on_device/expected/assets/coralboard-product.png +0 -0
  51. keep_up_with-0.1.0/evals/cases/unit_coralboard_gemma_on_device/expected/reference.md +11 -0
  52. keep_up_with-0.1.0/evals/cases/unit_deepswe/case.toml +5 -0
  53. keep_up_with-0.1.0/evals/cases/unit_deepswe/events.json +19 -0
  54. keep_up_with-0.1.0/evals/cases/unit_deepswe/expected/assertions.md +9 -0
  55. keep_up_with-0.1.0/evals/cases/unit_deepswe/expected/assets/deepswe-frontier-separation.png +0 -0
  56. keep_up_with-0.1.0/evals/cases/unit_deepswe/expected/assets/deepswe-harness-comparison.png +0 -0
  57. keep_up_with-0.1.0/evals/cases/unit_deepswe/expected/assets/deepswe-language-distribution.png +0 -0
  58. keep_up_with-0.1.0/evals/cases/unit_deepswe/expected/assets/deepswe-leaderboard-chart.png +0 -0
  59. keep_up_with-0.1.0/evals/cases/unit_deepswe/expected/assets/deepswe-leaderboard-table.png +0 -0
  60. keep_up_with-0.1.0/evals/cases/unit_deepswe/expected/assets/deepswe-task-size.png +0 -0
  61. keep_up_with-0.1.0/evals/cases/unit_deepswe/expected/assets/deepswe-verifier-quality.png +0 -0
  62. keep_up_with-0.1.0/evals/cases/unit_deepswe/expected/reference.md +124 -0
  63. keep_up_with-0.1.0/evals/cases/unit_diffusiongemma/case.toml +5 -0
  64. keep_up_with-0.1.0/evals/cases/unit_diffusiongemma/events.json +18 -0
  65. keep_up_with-0.1.0/evals/cases/unit_diffusiongemma/expected/assertions.md +11 -0
  66. keep_up_with-0.1.0/evals/cases/unit_diffusiongemma/expected/assets/diffusiongemma-architecture.png +0 -0
  67. keep_up_with-0.1.0/evals/cases/unit_diffusiongemma/expected/assets/diffusiongemma-benchmark.webp +0 -0
  68. keep_up_with-0.1.0/evals/cases/unit_diffusiongemma/expected/assets/diffusiongemma-hero.webp +0 -0
  69. keep_up_with-0.1.0/evals/cases/unit_diffusiongemma/expected/assets/diffusiongemma-latency.webp +0 -0
  70. keep_up_with-0.1.0/evals/cases/unit_diffusiongemma/expected/assets/diffusiongemma-sudoku.gif +0 -0
  71. keep_up_with-0.1.0/evals/cases/unit_diffusiongemma/expected/reference.md +103 -0
  72. keep_up_with-0.1.0/evals/cases/unit_etsy_talk/case.toml +5 -0
  73. keep_up_with-0.1.0/evals/cases/unit_etsy_talk/events.json +18 -0
  74. keep_up_with-0.1.0/evals/cases/unit_etsy_talk/expected/assertions.md +10 -0
  75. keep_up_with-0.1.0/evals/cases/unit_etsy_talk/expected/assets/etsy-agent-architecture.png +0 -0
  76. keep_up_with-0.1.0/evals/cases/unit_etsy_talk/expected/assets/etsy-listing-id-ledger.png +0 -0
  77. keep_up_with-0.1.0/evals/cases/unit_etsy_talk/expected/assets/etsy-llm-judge-workflow.png +0 -0
  78. keep_up_with-0.1.0/evals/cases/unit_etsy_talk/expected/assets/etsy-socket-handoff.png +0 -0
  79. keep_up_with-0.1.0/evals/cases/unit_etsy_talk/expected/assets/etsy-spin-middleware.png +0 -0
  80. keep_up_with-0.1.0/evals/cases/unit_etsy_talk/expected/assets/etsy-stage-title.png +0 -0
  81. keep_up_with-0.1.0/evals/cases/unit_etsy_talk/expected/assets/etsy-terminal-debugger.png +0 -0
  82. keep_up_with-0.1.0/evals/cases/unit_etsy_talk/expected/reference.md +76 -0
  83. keep_up_with-0.1.0/evals/cases/unit_fable_dc_reporters/case.toml +5 -0
  84. keep_up_with-0.1.0/evals/cases/unit_fable_dc_reporters/events.json +53 -0
  85. keep_up_with-0.1.0/evals/cases/unit_fable_dc_reporters/expected/assertions.md +10 -0
  86. keep_up_with-0.1.0/evals/cases/unit_fable_dc_reporters/expected/reference.md +17 -0
  87. keep_up_with-0.1.0/evals/cases/unit_frontiercode/case.toml +5 -0
  88. keep_up_with-0.1.0/evals/cases/unit_frontiercode/events.json +19 -0
  89. keep_up_with-0.1.0/evals/cases/unit_frontiercode/expected/assertions.md +11 -0
  90. keep_up_with-0.1.0/evals/cases/unit_frontiercode/expected/assets/frontiercode-diamond-score.jpg +0 -0
  91. keep_up_with-0.1.0/evals/cases/unit_frontiercode/expected/assets/frontiercode-error-rates.jpg +0 -0
  92. keep_up_with-0.1.0/evals/cases/unit_frontiercode/expected/assets/frontiercode-rubric-example.jpg +0 -0
  93. keep_up_with-0.1.0/evals/cases/unit_frontiercode/expected/assets/frontiercode-score-by-dataset.png +0 -0
  94. keep_up_with-0.1.0/evals/cases/unit_frontiercode/expected/assets/frontiercode-swyx-late-2025-shift.jpg +0 -0
  95. keep_up_with-0.1.0/evals/cases/unit_frontiercode/expected/assets/frontiercode-task-shape.jpg +0 -0
  96. keep_up_with-0.1.0/evals/cases/unit_frontiercode/expected/reference.md +137 -0
  97. keep_up_with-0.1.0/evals/cases/unit_iroh_1_0/case.toml +5 -0
  98. keep_up_with-0.1.0/evals/cases/unit_iroh_1_0/events.json +22 -0
  99. keep_up_with-0.1.0/evals/cases/unit_iroh_1_0/expected/assertions.md +9 -0
  100. keep_up_with-0.1.0/evals/cases/unit_iroh_1_0/expected/reference.md +9 -0
  101. keep_up_with-0.1.0/evals/cases/unit_loopcraft/case.toml +5 -0
  102. keep_up_with-0.1.0/evals/cases/unit_loopcraft/events.json +30 -0
  103. keep_up_with-0.1.0/evals/cases/unit_loopcraft/expected/assertions.md +8 -0
  104. keep_up_with-0.1.0/evals/cases/unit_loopcraft/expected/assets/loopcraft-loop-levels.png +0 -0
  105. keep_up_with-0.1.0/evals/cases/unit_loopcraft/expected/assets/loopcraft-stacking-loops.png +0 -0
  106. keep_up_with-0.1.0/evals/cases/unit_loopcraft/expected/reference.md +19 -0
  107. keep_up_with-0.1.0/evals/cases/unit_open_knowledge_format/case.toml +5 -0
  108. keep_up_with-0.1.0/evals/cases/unit_open_knowledge_format/events.json +18 -0
  109. keep_up_with-0.1.0/evals/cases/unit_open_knowledge_format/expected/assertions.md +8 -0
  110. keep_up_with-0.1.0/evals/cases/unit_open_knowledge_format/expected/assets/okf-folder-example.png +0 -0
  111. keep_up_with-0.1.0/evals/cases/unit_open_knowledge_format/expected/assets/okf-markdown-example.png +0 -0
  112. keep_up_with-0.1.0/evals/cases/unit_open_knowledge_format/expected/reference.md +38 -0
  113. keep_up_with-0.1.0/evals/cases/unit_openwa_whatsapp_gateway/case.toml +5 -0
  114. keep_up_with-0.1.0/evals/cases/unit_openwa_whatsapp_gateway/events.json +21 -0
  115. keep_up_with-0.1.0/evals/cases/unit_openwa_whatsapp_gateway/expected/assertions.md +9 -0
  116. keep_up_with-0.1.0/evals/cases/unit_openwa_whatsapp_gateway/expected/reference.md +9 -0
  117. keep_up_with-0.1.0/evals/cases/unit_orca_fable_split/case.toml +5 -0
  118. keep_up_with-0.1.0/evals/cases/unit_orca_fable_split/events.json +29 -0
  119. keep_up_with-0.1.0/evals/cases/unit_orca_fable_split/expected/assertions.md +8 -0
  120. keep_up_with-0.1.0/evals/cases/unit_reddit_multi_tool_split/case.toml +5 -0
  121. keep_up_with-0.1.0/evals/cases/unit_reddit_multi_tool_split/events.json +28 -0
  122. keep_up_with-0.1.0/evals/cases/unit_reddit_multi_tool_split/expected/assertions.md +12 -0
  123. keep_up_with-0.1.0/evals/cases/unit_retired_phone_compute/case.toml +5 -0
  124. keep_up_with-0.1.0/evals/cases/unit_retired_phone_compute/events.json +18 -0
  125. keep_up_with-0.1.0/evals/cases/unit_retired_phone_compute/expected/assertions.md +8 -0
  126. keep_up_with-0.1.0/evals/cases/unit_retired_phone_compute/expected/assets/phone-cluster-throughput-latency.png +0 -0
  127. keep_up_with-0.1.0/evals/cases/unit_retired_phone_compute/expected/assets/phone-vs-server-per-core.png +0 -0
  128. keep_up_with-0.1.0/evals/cases/unit_retired_phone_compute/expected/reference.md +17 -0
  129. keep_up_with-0.1.0/evals/cases/unit_vercel_ai_sdk_harnesses/case.toml +5 -0
  130. keep_up_with-0.1.0/evals/cases/unit_vercel_ai_sdk_harnesses/events.json +19 -0
  131. keep_up_with-0.1.0/evals/cases/unit_vercel_ai_sdk_harnesses/expected/assertions.md +8 -0
  132. keep_up_with-0.1.0/evals/cases/unit_vercel_ai_sdk_harnesses/expected/assets/vercel-harness-agent.png +0 -0
  133. keep_up_with-0.1.0/evals/cases/unit_vercel_ai_sdk_harnesses/expected/reference.md +13 -0
  134. keep_up_with-0.1.0/evals/cases/unit_zvec_trending/case.toml +5 -0
  135. keep_up_with-0.1.0/evals/cases/unit_zvec_trending/events.json +22 -0
  136. keep_up_with-0.1.0/evals/cases/unit_zvec_trending/expected/assertions.md +9 -0
  137. keep_up_with-0.1.0/evals/cases/unit_zvec_trending/expected/reference.md +9 -0
  138. keep_up_with-0.1.0/evals/run.py +621 -0
  139. keep_up_with-0.1.0/pyproject.toml +40 -0
  140. keep_up_with-0.1.0/src/keep_up_with/__init__.py +1 -0
  141. keep_up_with-0.1.0/src/keep_up_with/cli/__init__.py +0 -0
  142. keep_up_with-0.1.0/src/keep_up_with/cli/agent/__init__.py +0 -0
  143. keep_up_with-0.1.0/src/keep_up_with/cli/agent/events.py +67 -0
  144. keep_up_with-0.1.0/src/keep_up_with/cli/agent/inbox.py +63 -0
  145. keep_up_with-0.1.0/src/keep_up_with/cli/agent/main.py +21 -0
  146. keep_up_with-0.1.0/src/keep_up_with/cli/agent/message.py +151 -0
  147. keep_up_with-0.1.0/src/keep_up_with/cli/agent/output.py +34 -0
  148. keep_up_with-0.1.0/src/keep_up_with/cli/agent/space.py +142 -0
  149. keep_up_with-0.1.0/src/keep_up_with/cli/agent/subscriptions.py +87 -0
  150. keep_up_with-0.1.0/src/keep_up_with/cli/agent/thread.py +186 -0
  151. keep_up_with-0.1.0/src/keep_up_with/cli/agent/tools.py +113 -0
  152. keep_up_with-0.1.0/src/keep_up_with/cli/user/__init__.py +0 -0
  153. keep_up_with-0.1.0/src/keep_up_with/cli/user/codex_daemon.py +39 -0
  154. keep_up_with-0.1.0/src/keep_up_with/cli/user/main.py +90 -0
  155. keep_up_with-0.1.0/src/keep_up_with/cli/user/reset.py +58 -0
  156. keep_up_with-0.1.0/src/keep_up_with/cli/user/setup.py +796 -0
  157. keep_up_with-0.1.0/src/keep_up_with/cli/user/start.py +154 -0
  158. keep_up_with-0.1.0/src/keep_up_with/cli/user/status.py +87 -0
  159. keep_up_with-0.1.0/src/keep_up_with/cli/user/ui.py +607 -0
  160. keep_up_with-0.1.0/src/keep_up_with/core/__init__.py +25 -0
  161. keep_up_with-0.1.0/src/keep_up_with/core/config.py +123 -0
  162. keep_up_with-0.1.0/src/keep_up_with/core/events.py +301 -0
  163. keep_up_with-0.1.0/src/keep_up_with/integrations/__init__.py +0 -0
  164. keep_up_with-0.1.0/src/keep_up_with/integrations/base.py +379 -0
  165. keep_up_with-0.1.0/src/keep_up_with/integrations/data/__init__.py +0 -0
  166. keep_up_with-0.1.0/src/keep_up_with/integrations/data/arxiv/__init__.py +14 -0
  167. keep_up_with-0.1.0/src/keep_up_with/integrations/data/arxiv/client.py +497 -0
  168. keep_up_with-0.1.0/src/keep_up_with/integrations/data/arxiv/tools.py +19 -0
  169. keep_up_with-0.1.0/src/keep_up_with/integrations/data/browser/__init__.py +15 -0
  170. keep_up_with-0.1.0/src/keep_up_with/integrations/data/browser/tools.py +41 -0
  171. keep_up_with-0.1.0/src/keep_up_with/integrations/data/common.py +46 -0
  172. keep_up_with-0.1.0/src/keep_up_with/integrations/data/image/__init__.py +14 -0
  173. keep_up_with-0.1.0/src/keep_up_with/integrations/data/image/tools.py +266 -0
  174. keep_up_with-0.1.0/src/keep_up_with/integrations/data/raindrop/__init__.py +21 -0
  175. keep_up_with-0.1.0/src/keep_up_with/integrations/data/raindrop/client.py +66 -0
  176. keep_up_with-0.1.0/src/keep_up_with/integrations/data/raindrop/subscription.py +22 -0
  177. keep_up_with-0.1.0/src/keep_up_with/integrations/data/raindrop/tools.py +16 -0
  178. keep_up_with-0.1.0/src/keep_up_with/integrations/data/reddit/__init__.py +29 -0
  179. keep_up_with-0.1.0/src/keep_up_with/integrations/data/reddit/client.py +750 -0
  180. keep_up_with-0.1.0/src/keep_up_with/integrations/data/reddit/subscription.py +101 -0
  181. keep_up_with-0.1.0/src/keep_up_with/integrations/data/reddit/tools.py +61 -0
  182. keep_up_with-0.1.0/src/keep_up_with/integrations/data/repo/__init__.py +14 -0
  183. keep_up_with-0.1.0/src/keep_up_with/integrations/data/repo/tools.py +106 -0
  184. keep_up_with-0.1.0/src/keep_up_with/integrations/data/video/__init__.py +20 -0
  185. keep_up_with-0.1.0/src/keep_up_with/integrations/data/video/client.py +436 -0
  186. keep_up_with-0.1.0/src/keep_up_with/integrations/data/video/tools.py +76 -0
  187. keep_up_with-0.1.0/src/keep_up_with/integrations/data/web/__init__.py +26 -0
  188. keep_up_with-0.1.0/src/keep_up_with/integrations/data/web/subscription.py +154 -0
  189. keep_up_with-0.1.0/src/keep_up_with/integrations/data/web/tools.py +534 -0
  190. keep_up_with-0.1.0/src/keep_up_with/integrations/data/x/__init__.py +23 -0
  191. keep_up_with-0.1.0/src/keep_up_with/integrations/data/x/client.py +858 -0
  192. keep_up_with-0.1.0/src/keep_up_with/integrations/data/x/subscription.py +32 -0
  193. keep_up_with-0.1.0/src/keep_up_with/integrations/data/x/tools.py +45 -0
  194. keep_up_with-0.1.0/src/keep_up_with/integrations/data/youtube/__init__.py +25 -0
  195. keep_up_with-0.1.0/src/keep_up_with/integrations/data/youtube/client.py +209 -0
  196. keep_up_with-0.1.0/src/keep_up_with/integrations/data/youtube/subscription.py +25 -0
  197. keep_up_with-0.1.0/src/keep_up_with/integrations/data/youtube/tools.py +38 -0
  198. keep_up_with-0.1.0/src/keep_up_with/integrations/messaging/__init__.py +0 -0
  199. keep_up_with-0.1.0/src/keep_up_with/integrations/messaging/discord/__init__.py +20 -0
  200. keep_up_with-0.1.0/src/keep_up_with/integrations/messaging/discord/client.py +979 -0
  201. keep_up_with-0.1.0/src/keep_up_with/integrations/messaging/discord/payloads.py +32 -0
  202. keep_up_with-0.1.0/src/keep_up_with/integrations/messaging/discord/setup.py +222 -0
  203. keep_up_with-0.1.0/src/keep_up_with/integrations/messaging/discord/subscription.py +137 -0
  204. keep_up_with-0.1.0/src/keep_up_with/integrations/messaging/file/__init__.py +13 -0
  205. keep_up_with-0.1.0/src/keep_up_with/integrations/messaging/file/client.py +786 -0
  206. keep_up_with-0.1.0/src/keep_up_with/integrations/registry.py +124 -0
  207. keep_up_with-0.1.0/src/keep_up_with/resources/__init__.py +1 -0
  208. keep_up_with-0.1.0/src/keep_up_with/resources/presets/ai.toml +165 -0
  209. keep_up_with-0.1.0/src/keep_up_with/resources/workspace_template/AGENTS.md +113 -0
  210. keep_up_with-0.1.0/src/keep_up_with/resources/workspace_template/skills/anti-slop/SKILL.md +130 -0
  211. keep_up_with-0.1.0/src/keep_up_with/resources/workspace_template/skills/keep-up-with/SKILL.md +118 -0
  212. keep_up_with-0.1.0/src/keep_up_with/resources/workspace_template/skills/keep-up-with/references/formatting.md +34 -0
  213. keep_up_with-0.1.0/src/keep_up_with/resources/workspace_template/skills/keep-up-with/references/template.md +25 -0
  214. keep_up_with-0.1.0/src/keep_up_with/resources/workspace_template/skills/keep-up-with/references/visuals.md +114 -0
  215. keep_up_with-0.1.0/src/keep_up_with/runtime/__init__.py +0 -0
  216. keep_up_with-0.1.0/src/keep_up_with/runtime/codex.py +92 -0
  217. keep_up_with-0.1.0/src/keep_up_with/runtime/gateway.py +815 -0
  218. keep_up_with-0.1.0/uv.lock +1417 -0
@@ -0,0 +1,40 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ env:
10
+ UV_FROZEN: "1"
11
+
12
+ jobs:
13
+ check:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - name: Check out repository
18
+ uses: actions/checkout@v4
19
+ with:
20
+ fetch-depth: 0
21
+
22
+ - name: Set up uv
23
+ uses: astral-sh/setup-uv@v5
24
+ with:
25
+ python-version: "3.13"
26
+ enable-cache: true
27
+
28
+ - name: Sync dependencies
29
+ run: uv sync --frozen
30
+
31
+ - name: Compile package
32
+ run: uv run python -m compileall -q src
33
+
34
+ - name: Check CLI entry points
35
+ run: |
36
+ uv run kup --help
37
+ uv run kup-cli --help
38
+
39
+ - name: Build distributions
40
+ run: uv build
@@ -0,0 +1,37 @@
1
+ name: Publish
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ jobs:
9
+ publish:
10
+ runs-on: ubuntu-latest
11
+ environment:
12
+ name: pypi
13
+ url: https://pypi.org/p/keep-up-with
14
+ permissions:
15
+ contents: read
16
+ id-token: write
17
+
18
+ steps:
19
+ - name: Check out repository
20
+ uses: actions/checkout@v4
21
+ with:
22
+ fetch-depth: 0
23
+
24
+ - name: Set up uv
25
+ uses: astral-sh/setup-uv@v5
26
+ with:
27
+ python-version: "3.13"
28
+ enable-cache: true
29
+
30
+ - name: Sync dependencies
31
+ run: uv sync --frozen
32
+
33
+ - name: Build distributions
34
+ run: uv build
35
+
36
+ - name: Publish to PyPI
37
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,13 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+
12
+ # Evals
13
+ evals/runs/
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Wis Kojohnjaratkul
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,146 @@
1
+ Metadata-Version: 2.4
2
+ Name: keep-up-with
3
+ Version: 0.1.0
4
+ Summary: Turn Codex into your personal 24/7 assistant for staying on top of the latest developments.
5
+ Project-URL: Homepage, https://github.com/wiskojo/keep-up-with
6
+ Project-URL: Repository, https://github.com/wiskojo/keep-up-with
7
+ Project-URL: Issues, https://github.com/wiskojo/keep-up-with/issues
8
+ Author: Wis Kojohnjaratkul
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Requires-Python: >=3.13
12
+ Requires-Dist: browser-history>=0.5.0
13
+ Requires-Dist: discord-py>=2.7.1
14
+ Requires-Dist: httpx>=0.28.1
15
+ Requires-Dist: isodate>=0.7.2
16
+ Requires-Dist: markitdown[pdf]>=0.1.6
17
+ Requires-Dist: pillow>=12.2.0
18
+ Requires-Dist: praw>=7.8.1
19
+ Requires-Dist: pydantic>=2.13.4
20
+ Requires-Dist: python-dotenv>=1.2.2
21
+ Requires-Dist: tomli-w>=1.2.0
22
+ Requires-Dist: typer>=0.25.1
23
+ Requires-Dist: websocket-client>=1.9.0
24
+ Requires-Dist: yt-dlp>=2024.8.6
25
+ Description-Content-Type: text/markdown
26
+
27
+ <p align="center">
28
+ <img src="https://raw.githubusercontent.com/wiskojo/keep-up-with/main/assets/logo.png" alt="keep-up-with logo" width="120" />
29
+ </p>
30
+
31
+ <h1 align="center">keep-up-with</h1>
32
+
33
+ <p align="center">
34
+ <strong>Don’t fall behind. Keep up with everything that’s happening.</strong><br />
35
+ Turn Codex into your personal 24/7 assistant for staying on top of the latest developments.
36
+ </p>
37
+
38
+ ---
39
+
40
+ ## Why This Exists
41
+
42
+ Everything moves so fast these days that it’s hard to keep up, especially in AI. Keeping up with things can feel like a full-time job. The links keep piling up: X threads, Reddit posts, YouTube talks, papers, repos, changelogs, blog posts. You save the promising ones, then “read later” turns into never. **keep-up-with** does the work you don’t have time for: it opens the links, checks the source material, follows the context, and turns the useful parts into something you can understand quickly, and sends it to you on Discord. Low-signal items get ignored. Small changes become short updates. Dense sources, public reactions, follow-ups, and related launches become threads, so the story is organized instead of becoming another tab you meant to read.
43
+
44
+ If [last30days-skill](https://github.com/mvanhorn/last30days-skill) is what you run when you finally ask "what did I miss?", **keep-up-with** is the always-on version. It keeps tabs on everything and updates you so you never fall behind. You can use it with your existing OpenAI (ChatGPT/Codex) subscription (OAuth) to keep watch while you focus on other things.
45
+
46
+ ![How keep-up-with keeps watch](https://raw.githubusercontent.com/wiskojo/keep-up-with/main/assets/overview.png)
47
+
48
+ Think of it like having a hard-working intern tracking noisy feeds all day, then sharing only the interesting and relevant updates.
49
+
50
+ - Small useful items become short posts.
51
+ - Bigger launches, papers, talks, reactions, or ongoing stories become threads.
52
+ - Follow-ups append to the existing story instead of starting over.
53
+ - Related events can also become stories, so bigger trends and patterns are easier to spot.
54
+
55
+ ## What It Looks Like
56
+
57
+ **keep-up-with** shares updates in the messaging platform you already use (only Discord for now). It lives alongside your normal conversations, so it feels familiar, works from everywhere, and can be shared with friends, teammates, or coworkers when you want a common space.
58
+
59
+ | Shape | What shows up |
60
+ | --- | --- |
61
+ | **Short update** | One compact message with the source link and a useful visual when available. |
62
+ | **Deep-dive thread** | A focused thread for a launch, paper, talk, report, or messy public reaction. |
63
+ | **Story follow-up** | A new event gets appended to an existing thread when it changes the same story. |
64
+ | **Shared server** | Friends, teammates, or coworkers can use the same topic channels and nudge what gets covered. |
65
+
66
+ The result should be a stream that is easier to follow: fewer items, more context, useful visuals and artifacts, and updates that build on what you already know instead of repeating the whole story every time.
67
+
68
+ ## How It Works
69
+
70
+ ![keep-up-with workflow](https://raw.githubusercontent.com/wiskojo/keep-up-with/main/assets/workflow.png)
71
+
72
+ The sources you configure are watched continuously. When something new appears, it becomes an event in the inbox. Codex investigates the event, checks the surrounding context, gathers useful artifacts, and decides what should happen next: skip it, share a quick update, open a new thread, or append to an existing story.
73
+
74
+ Importantly, **keep-up-with** connects follow-ups, reactions, and related stories over time instead of treating every event like a separate one-off. It keeps track of what you have already seen, so updates can focus on what changed instead of repeating the whole story.
75
+
76
+ ## Integrations
77
+
78
+ **keep-up-with** comes with built-in integrations. You can enable or disable them based on what you want it to watch, fetch, and inspect. Subscribed events arrive through the bridge, and the agent uses configured tools through the agent-facing `kup-cli`.
79
+
80
+ | Source | What it is good for | Requires |
81
+ | --- | --- | --- |
82
+ | **X** | Fast reactions, expert threads, launch posts, quote-post debate, and early attention signals. | `X_BEARER_TOKEN` |
83
+ | **Reddit** | Practitioner reactions, skeptical comments, troubleshooting, product complaints, and aggregate sentiment from people actually trying things. | `REDDIT_CLIENT_ID`, `REDDIT_CLIENT_SECRET` |
84
+ | **YouTube** | Talks, demos, explainers, launch walkthroughs, and long-form context that is easier to search through transcripts than watch end to end. | `YOUTUBE_API_KEY` |
85
+ | **Web and RSS** | Official announcements, changelogs, engineering blogs, research posts, docs, and source pages that anchor the story. | None |
86
+ | **arXiv** | Papers, figures, source bundles, and technical claims that need direct inspection instead of summary-by-headline. | None |
87
+ | **GitHub repos** | What actually shipped: README, releases, examples, star history, issues, and whether a project looks real or abandoned. | None |
88
+ | **Images** | Cropping, inspecting, and preparing source visuals so updates are easier to understand at a glance. | None |
89
+ | **Video** | Pulling frames, clips, transcripts, and short demos from video sources or local files. | None |
90
+ | **Raindrop** | Your saved links and bookmarks, so the agent can connect new items to things you already cared enough to save. It can also act as an ingestion path if you want to use **keep-up-with** as a lightweight second brain. | `RAINDROP_TOKEN` |
91
+ | **Browser history** | Local context from what you have recently read or revisited, when you choose to enable it. | None |
92
+
93
+ A starter AI preset is included out of the box. It is tuned for AI news and technical updates, and it sets up both subscriptions and a Discord channel layout so you have a useful starting point instead of a blank config.
94
+
95
+ > [!NOTE]
96
+ > The default AI preset is tuned for ChatGPT Pro users on the 5x or 20x plan and can consume substantial usage.
97
+
98
+ ## Quickstart
99
+
100
+ Install **keep-up-with**:
101
+
102
+ ```bash
103
+ uv tool install keep-up-with
104
+ ```
105
+
106
+ Run setup:
107
+
108
+ ```bash
109
+ kup setup # set up Discord, integrations, presets, and workspace defaults
110
+ ```
111
+
112
+ Setup writes your config to `~/.keep-up-with/config.toml`. You can edit it directly, or ask the agent to update it for you after startup.
113
+
114
+ Start it:
115
+
116
+ ```bash
117
+ kup start # begin watching sources and handling events
118
+ ```
119
+
120
+ If everything is configured and working correctly, your agent should greet you on Discord shortly.
121
+
122
+ ## Commands
123
+
124
+ `kup` is for the human running **keep-up-with**.
125
+
126
+ ```bash
127
+ kup setup # run the setup wizard
128
+ kup start # start the local service
129
+ kup status # check the daemon, gateway, thread, and event counts
130
+ kup stop # stop the local service
131
+ kup reset # reset local state while keeping setup files
132
+ ```
133
+
134
+ `kup-cli` is for the agent. It is the first-party command Codex uses while working: reading events, handling the inbox, fetching source material, and sending messages or threads. You can also run it yourself for debugging.
135
+
136
+ ```bash
137
+ kup-cli events list # search or list stored events
138
+ kup-cli inbox list # see pending events waiting for action
139
+ kup-cli tools --help # list configured tools
140
+ kup-cli message send --help # inspect message publishing options
141
+ kup-cli thread create --help # inspect story thread options
142
+ ```
143
+
144
+ ## License
145
+
146
+ MIT. See [LICENSE](LICENSE).
@@ -0,0 +1,120 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/wiskojo/keep-up-with/main/assets/logo.png" alt="keep-up-with logo" width="120" />
3
+ </p>
4
+
5
+ <h1 align="center">keep-up-with</h1>
6
+
7
+ <p align="center">
8
+ <strong>Don’t fall behind. Keep up with everything that’s happening.</strong><br />
9
+ Turn Codex into your personal 24/7 assistant for staying on top of the latest developments.
10
+ </p>
11
+
12
+ ---
13
+
14
+ ## Why This Exists
15
+
16
+ Everything moves so fast these days that it’s hard to keep up, especially in AI. Keeping up with things can feel like a full-time job. The links keep piling up: X threads, Reddit posts, YouTube talks, papers, repos, changelogs, blog posts. You save the promising ones, then “read later” turns into never. **keep-up-with** does the work you don’t have time for: it opens the links, checks the source material, follows the context, and turns the useful parts into something you can understand quickly, and sends it to you on Discord. Low-signal items get ignored. Small changes become short updates. Dense sources, public reactions, follow-ups, and related launches become threads, so the story is organized instead of becoming another tab you meant to read.
17
+
18
+ If [last30days-skill](https://github.com/mvanhorn/last30days-skill) is what you run when you finally ask "what did I miss?", **keep-up-with** is the always-on version. It keeps tabs on everything and updates you so you never fall behind. You can use it with your existing OpenAI (ChatGPT/Codex) subscription (OAuth) to keep watch while you focus on other things.
19
+
20
+ ![How keep-up-with keeps watch](https://raw.githubusercontent.com/wiskojo/keep-up-with/main/assets/overview.png)
21
+
22
+ Think of it like having a hard-working intern tracking noisy feeds all day, then sharing only the interesting and relevant updates.
23
+
24
+ - Small useful items become short posts.
25
+ - Bigger launches, papers, talks, reactions, or ongoing stories become threads.
26
+ - Follow-ups append to the existing story instead of starting over.
27
+ - Related events can also become stories, so bigger trends and patterns are easier to spot.
28
+
29
+ ## What It Looks Like
30
+
31
+ **keep-up-with** shares updates in the messaging platform you already use (only Discord for now). It lives alongside your normal conversations, so it feels familiar, works from everywhere, and can be shared with friends, teammates, or coworkers when you want a common space.
32
+
33
+ | Shape | What shows up |
34
+ | --- | --- |
35
+ | **Short update** | One compact message with the source link and a useful visual when available. |
36
+ | **Deep-dive thread** | A focused thread for a launch, paper, talk, report, or messy public reaction. |
37
+ | **Story follow-up** | A new event gets appended to an existing thread when it changes the same story. |
38
+ | **Shared server** | Friends, teammates, or coworkers can use the same topic channels and nudge what gets covered. |
39
+
40
+ The result should be a stream that is easier to follow: fewer items, more context, useful visuals and artifacts, and updates that build on what you already know instead of repeating the whole story every time.
41
+
42
+ ## How It Works
43
+
44
+ ![keep-up-with workflow](https://raw.githubusercontent.com/wiskojo/keep-up-with/main/assets/workflow.png)
45
+
46
+ The sources you configure are watched continuously. When something new appears, it becomes an event in the inbox. Codex investigates the event, checks the surrounding context, gathers useful artifacts, and decides what should happen next: skip it, share a quick update, open a new thread, or append to an existing story.
47
+
48
+ Importantly, **keep-up-with** connects follow-ups, reactions, and related stories over time instead of treating every event like a separate one-off. It keeps track of what you have already seen, so updates can focus on what changed instead of repeating the whole story.
49
+
50
+ ## Integrations
51
+
52
+ **keep-up-with** comes with built-in integrations. You can enable or disable them based on what you want it to watch, fetch, and inspect. Subscribed events arrive through the bridge, and the agent uses configured tools through the agent-facing `kup-cli`.
53
+
54
+ | Source | What it is good for | Requires |
55
+ | --- | --- | --- |
56
+ | **X** | Fast reactions, expert threads, launch posts, quote-post debate, and early attention signals. | `X_BEARER_TOKEN` |
57
+ | **Reddit** | Practitioner reactions, skeptical comments, troubleshooting, product complaints, and aggregate sentiment from people actually trying things. | `REDDIT_CLIENT_ID`, `REDDIT_CLIENT_SECRET` |
58
+ | **YouTube** | Talks, demos, explainers, launch walkthroughs, and long-form context that is easier to search through transcripts than watch end to end. | `YOUTUBE_API_KEY` |
59
+ | **Web and RSS** | Official announcements, changelogs, engineering blogs, research posts, docs, and source pages that anchor the story. | None |
60
+ | **arXiv** | Papers, figures, source bundles, and technical claims that need direct inspection instead of summary-by-headline. | None |
61
+ | **GitHub repos** | What actually shipped: README, releases, examples, star history, issues, and whether a project looks real or abandoned. | None |
62
+ | **Images** | Cropping, inspecting, and preparing source visuals so updates are easier to understand at a glance. | None |
63
+ | **Video** | Pulling frames, clips, transcripts, and short demos from video sources or local files. | None |
64
+ | **Raindrop** | Your saved links and bookmarks, so the agent can connect new items to things you already cared enough to save. It can also act as an ingestion path if you want to use **keep-up-with** as a lightweight second brain. | `RAINDROP_TOKEN` |
65
+ | **Browser history** | Local context from what you have recently read or revisited, when you choose to enable it. | None |
66
+
67
+ A starter AI preset is included out of the box. It is tuned for AI news and technical updates, and it sets up both subscriptions and a Discord channel layout so you have a useful starting point instead of a blank config.
68
+
69
+ > [!NOTE]
70
+ > The default AI preset is tuned for ChatGPT Pro users on the 5x or 20x plan and can consume substantial usage.
71
+
72
+ ## Quickstart
73
+
74
+ Install **keep-up-with**:
75
+
76
+ ```bash
77
+ uv tool install keep-up-with
78
+ ```
79
+
80
+ Run setup:
81
+
82
+ ```bash
83
+ kup setup # set up Discord, integrations, presets, and workspace defaults
84
+ ```
85
+
86
+ Setup writes your config to `~/.keep-up-with/config.toml`. You can edit it directly, or ask the agent to update it for you after startup.
87
+
88
+ Start it:
89
+
90
+ ```bash
91
+ kup start # begin watching sources and handling events
92
+ ```
93
+
94
+ If everything is configured and working correctly, your agent should greet you on Discord shortly.
95
+
96
+ ## Commands
97
+
98
+ `kup` is for the human running **keep-up-with**.
99
+
100
+ ```bash
101
+ kup setup # run the setup wizard
102
+ kup start # start the local service
103
+ kup status # check the daemon, gateway, thread, and event counts
104
+ kup stop # stop the local service
105
+ kup reset # reset local state while keeping setup files
106
+ ```
107
+
108
+ `kup-cli` is for the agent. It is the first-party command Codex uses while working: reading events, handling the inbox, fetching source material, and sending messages or threads. You can also run it yourself for debugging.
109
+
110
+ ```bash
111
+ kup-cli events list # search or list stored events
112
+ kup-cli inbox list # see pending events waiting for action
113
+ kup-cli tools --help # list configured tools
114
+ kup-cli message send --help # inspect message publishing options
115
+ kup-cli thread create --help # inspect story thread options
116
+ ```
117
+
118
+ ## License
119
+
120
+ MIT. See [LICENSE](LICENSE).
Binary file
Binary file
Binary file
@@ -0,0 +1,5 @@
1
+ name = "scenario_filter_all_noise"
2
+ description = "A sequence of noisy Reddit and X events that should all be skipped with no user-facing output."
3
+
4
+ [workspace]
5
+ preset = "ai"
@@ -0,0 +1,267 @@
1
+ [
2
+ {
3
+ "name": "single low-signal discussion",
4
+ "events": [
5
+ {
6
+ "integration": "reddit",
7
+ "kind": "headline",
8
+ "external_id": "noise-reddit-gemini-fifa",
9
+ "summary": "r/GeminiAI: Gemini suggested Italy as one of the top 10 contenders to the FIFA world cup. (0 upvotes, 1 comment)",
10
+ "refs": {
11
+ "url": "https://reddit.com/r/GeminiAI/comments/1u53cpw/gemini_suggested_italy_as_one_of_the_top_10/"
12
+ },
13
+ "data": {
14
+ "subreddit": "GeminiAI",
15
+ "upvotes": 0,
16
+ "comments": 1
17
+ },
18
+ "high_priority": false
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ "name": "small discussion cluster",
24
+ "events": [
25
+ {
26
+ "integration": "reddit",
27
+ "kind": "headline",
28
+ "external_id": "noise-reddit-codex-slow-iphone",
29
+ "summary": "r/codex: Codex responses are extremely slow on iPhone 13 pro (2 upvotes, 1 comment)",
30
+ "refs": {
31
+ "url": "https://reddit.com/r/codex/comments/1u539b8/codex_responses_are_extremely_slow_on_iphone_13/"
32
+ },
33
+ "data": {
34
+ "subreddit": "codex",
35
+ "upvotes": 2,
36
+ "comments": 1
37
+ },
38
+ "high_priority": false
39
+ },
40
+ {
41
+ "integration": "reddit",
42
+ "kind": "headline",
43
+ "external_id": "noise-reddit-repos-confusing",
44
+ "summary": "r/vibecoding: What's the most confusing / difficult thing about repos? (2 upvotes, 4 comments)",
45
+ "refs": {
46
+ "url": "https://reddit.com/r/vibecoding/comments/1u51jhv/whats_the_most_confusing_difficult_thing_about/"
47
+ },
48
+ "data": {
49
+ "subreddit": "vibecoding",
50
+ "upvotes": 2,
51
+ "comments": 4
52
+ },
53
+ "high_priority": false
54
+ },
55
+ {
56
+ "integration": "reddit",
57
+ "kind": "headline",
58
+ "external_id": "noise-reddit-gemini-ominous",
59
+ "summary": "r/GeminiAI: That's... ominous? (2 upvotes, 3 comments)",
60
+ "refs": {
61
+ "url": "https://reddit.com/r/GeminiAI/comments/1u52itl/thats_ominous/"
62
+ },
63
+ "data": {
64
+ "subreddit": "GeminiAI",
65
+ "upvotes": 2,
66
+ "comments": 3
67
+ },
68
+ "high_priority": false
69
+ }
70
+ ]
71
+ },
72
+ {
73
+ "name": "minor discussion and x replies",
74
+ "events": [
75
+ {
76
+ "integration": "reddit",
77
+ "kind": "headline",
78
+ "external_id": "noise-reddit-model-cross-check",
79
+ "summary": "r/OpenAI: do you actually trust one model's answer on something important, or do you cross-check? (2 upvotes, 5 comments)",
80
+ "refs": {
81
+ "url": "https://reddit.com/r/OpenAI/comments/1u50n8p/do_you_actually_trust_one_models_answer_on/"
82
+ },
83
+ "data": {
84
+ "subreddit": "OpenAI",
85
+ "upvotes": 2,
86
+ "comments": 5
87
+ },
88
+ "high_priority": false
89
+ },
90
+ {
91
+ "integration": "x",
92
+ "kind": "post",
93
+ "external_id": "noise-x-reply-model-swapping",
94
+ "summary": "@omarsar0: @morgan_coding That last-minute model-swapping strategy is unsustainable. (0 likes, 0 reposts)",
95
+ "refs": {
96
+ "url": "https://x.com/omarsar0/status/2065895717302923317",
97
+ "post_id": "2065895717302923317"
98
+ },
99
+ "data": {
100
+ "likes": 0,
101
+ "reposts": 0
102
+ },
103
+ "high_priority": false
104
+ }
105
+ ]
106
+ },
107
+ {
108
+ "name": "low-traction tools and reposts",
109
+ "events": [
110
+ {
111
+ "integration": "x",
112
+ "kind": "post",
113
+ "external_id": "noise-x-thanks-highlight",
114
+ "summary": "@omarsar0: @brooksjordan it's a really important point. thanks for highlighting (0 likes, 0 reposts)",
115
+ "refs": {
116
+ "url": "https://x.com/omarsar0/status/2065895435554697564",
117
+ "post_id": "2065895435554697564"
118
+ },
119
+ "data": {
120
+ "likes": 0,
121
+ "reposts": 0
122
+ },
123
+ "high_priority": false
124
+ },
125
+ {
126
+ "integration": "x",
127
+ "kind": "post",
128
+ "external_id": "noise-x-rt-llm-council",
129
+ "summary": "@dair_ai: RT @omarsar0: The LLM Council idea was never fully explored... (0 likes, 1 repost)",
130
+ "refs": {
131
+ "url": "https://x.com/dair_ai/status/2065898043434471640",
132
+ "post_id": "2065898043434471640"
133
+ },
134
+ "data": {
135
+ "likes": 0,
136
+ "reposts": 1
137
+ },
138
+ "high_priority": false
139
+ },
140
+ {
141
+ "integration": "reddit",
142
+ "kind": "headline",
143
+ "external_id": "noise-reddit-couchpilot",
144
+ "summary": "r/vibecoding: I made a mobile vibe coding harness that wraps claude code with some useful tooling. Repo: TheOutdoorProgrammer/couchpilot, 0 GitHub stars. (2 upvotes, 0 comments)",
145
+ "refs": {
146
+ "url": "https://reddit.com/r/vibecoding/comments/1u4hcwf/i_made_a_mobile_vibe_coding_harness_that_wraps/",
147
+ "repo": "https://github.com/TheOutdoorProgrammer/couchpilot"
148
+ },
149
+ "data": {
150
+ "subreddit": "vibecoding",
151
+ "upvotes": 2,
152
+ "comments": 0,
153
+ "repo": "TheOutdoorProgrammer/couchpilot",
154
+ "repo_stars": 0
155
+ },
156
+ "high_priority": false
157
+ },
158
+ {
159
+ "integration": "reddit",
160
+ "kind": "headline",
161
+ "external_id": "noise-reddit-payo",
162
+ "summary": "r/cursor: Made a tool to auto-generate .cursorrules from your actual stack. Repo: uttam-gelot/payo, 5 GitHub stars. (1 upvote, 0 comments)",
163
+ "refs": {
164
+ "url": "https://reddit.com/r/cursor/comments/1u4i4ac/made_a_tool_to_autogenerate_cursorrules_from_your/",
165
+ "repo": "https://github.com/uttam-gelot/payo"
166
+ },
167
+ "data": {
168
+ "subreddit": "cursor",
169
+ "upvotes": 1,
170
+ "comments": 0,
171
+ "repo": "uttam-gelot/payo",
172
+ "repo_stars": 5
173
+ },
174
+ "high_priority": false
175
+ },
176
+ {
177
+ "integration": "reddit",
178
+ "kind": "headline",
179
+ "external_id": "noise-reddit-arc-gate",
180
+ "summary": "r/OpenAI: I built an OpenAI compatible proxy that tracks authority across conversations. Repo: 9hannahnine-jpg/arc-gate, 8 GitHub stars. (1 upvote, 0 comments)",
181
+ "refs": {
182
+ "url": "https://reddit.com/r/OpenAI/comments/1u53ao2/i_built_an_openai_compatible_proxy_that_tracks/",
183
+ "repo": "https://github.com/9hannahnine-jpg/arc-gate"
184
+ },
185
+ "data": {
186
+ "subreddit": "OpenAI",
187
+ "upvotes": 1,
188
+ "comments": 0,
189
+ "repo": "9hannahnine-jpg/arc-gate",
190
+ "repo_stars": 8
191
+ },
192
+ "high_priority": false
193
+ }
194
+ ]
195
+ },
196
+ {
197
+ "name": "remaining low-signal items",
198
+ "events": [
199
+ {
200
+ "integration": "reddit",
201
+ "kind": "headline",
202
+ "external_id": "noise-reddit-agentautopsy",
203
+ "summary": "r/OpenAI: I almost burned $400 on the OpenAI API because an agent got stuck in an infinite loop. Repo: Abhisekhpatel/AgentAutopsy, 11 GitHub stars. (1 upvote, 1 comment)",
204
+ "refs": {
205
+ "url": "https://reddit.com/r/OpenAI/comments/1u4m6va/i_almost_burned_400_on_the_openai_api_because_an/",
206
+ "repo": "https://github.com/Abhisekhpatel/AgentAutopsy"
207
+ },
208
+ "data": {
209
+ "subreddit": "OpenAI",
210
+ "upvotes": 1,
211
+ "comments": 1,
212
+ "repo": "Abhisekhpatel/AgentAutopsy",
213
+ "repo_stars": 11
214
+ },
215
+ "high_priority": false
216
+ },
217
+ {
218
+ "integration": "reddit",
219
+ "kind": "headline",
220
+ "external_id": "noise-reddit-iris",
221
+ "summary": "r/vibecoding: Opus: trust me bro. Repo: syrin-labs/iris, 48 GitHub stars. (2 upvotes, 0 comments)",
222
+ "refs": {
223
+ "url": "https://reddit.com/r/vibecoding/comments/1u4udoa/opus_trust_me_bro/",
224
+ "repo": "https://github.com/syrin-labs/iris"
225
+ },
226
+ "data": {
227
+ "subreddit": "vibecoding",
228
+ "upvotes": 2,
229
+ "comments": 0,
230
+ "repo": "syrin-labs/iris",
231
+ "repo_stars": 48
232
+ },
233
+ "high_priority": false
234
+ },
235
+ {
236
+ "integration": "reddit",
237
+ "kind": "headline",
238
+ "external_id": "noise-reddit-agi-is-here",
239
+ "summary": "r/GeminiAI: Ladies and Gentlemen.. AGI is here. (0 upvotes, 3 comments)",
240
+ "refs": {
241
+ "url": "https://reddit.com/r/GeminiAI/comments/1u4xs2q/ladies_and_gentlemen_agi_is_here/"
242
+ },
243
+ "data": {
244
+ "subreddit": "GeminiAI",
245
+ "upvotes": 0,
246
+ "comments": 3
247
+ },
248
+ "high_priority": false
249
+ },
250
+ {
251
+ "integration": "reddit",
252
+ "kind": "headline",
253
+ "external_id": "noise-reddit-codex-nerf",
254
+ "summary": "r/codex: Anyone notice the codex nerf? (3 upvotes, 5 comments)",
255
+ "refs": {
256
+ "url": "https://reddit.com/r/codex/comments/1u4ynkf/anyone_notice_the_codex_nerf/"
257
+ },
258
+ "data": {
259
+ "subreddit": "codex",
260
+ "upvotes": 3,
261
+ "comments": 5
262
+ },
263
+ "high_priority": false
264
+ }
265
+ ]
266
+ }
267
+ ]
@@ -0,0 +1,9 @@
1
+ # Expected: scenario_filter_all_noise
2
+
3
+ - The agent's trajectory conforms strictly to the workflow described in `AGENTS.md`, `$keep-up-with` `SKILL.md`, and related references. The flow is effective and efficient.
4
+ - Publish no user-facing messages or threads for these events.
5
+ - Skip and dismiss all 15 events.
6
+ - Do not send a batch summary, "nothing to report" message, or completion note.
7
+ - Do not research every low-signal item deeply. Lightweight triage is enough unless a source shows surprising quality or signal.
8
+ - Treat low-traction self-promotion, tiny tool repos, meme/speculation posts, routine complaints, replies, reposts, and generic discussion prompts as noise unless they have a clear time-sensitive reason or strong source quality.
9
+ - Use rough signal guides such as 50+ Reddit upvotes, 100+ GitHub stars, or 10k+ X impressions for surfacing promotional/tool-shaped items, calibrated by content quality and recency.