argo-search 1.0.1 โ†’ 2.9.7

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 (463) hide show
  1. package/LICENSE +201 -21
  2. package/README.en.md +822 -0
  3. package/README.es.md +864 -0
  4. package/README.ja.md +864 -0
  5. package/README.ko.md +864 -0
  6. package/README.md +867 -320
  7. package/SKILL.md +135 -0
  8. package/assets/readme/hero.svg +121 -0
  9. package/assets/readme/made-with-beautify.svg +10 -0
  10. package/assets/readme/proof-routes.svg +73 -0
  11. package/assets/readme/settings-keys.png +0 -0
  12. package/assets/readme/settings-tools.png +0 -0
  13. package/assets/readme/why-better.svg +104 -0
  14. package/assets/readme/workflow.svg +83 -0
  15. package/backends/domain_profiles.json +2308 -96
  16. package/backends/engine_registry.yaml +3314 -503
  17. package/backends/query_synonyms_cn.json +35 -0
  18. package/backends/quota_profiles.json +2409 -161
  19. package/backends/source_types_cn.json +83 -0
  20. package/backends/text_lexicon.json +44 -0
  21. package/bin/argo +703 -0
  22. package/bin/argo.js +71 -39
  23. package/config.yaml +4976 -363
  24. package/cordis.patch.yml +21 -0
  25. package/data/countries.json +40 -0
  26. package/data/lang_matrix/lang_capability.json +842 -0
  27. package/data/lang_matrix/matrix_2026-09-10.json +11921 -0
  28. package/data/regions_cn.json +1 -0
  29. package/docs/ADDING_NEW_ENGINE.md +184 -0
  30. package/docs/ARGO_INTRO.md +124 -0
  31. package/docs/DATA_SOURCE_GAPS.md +81 -0
  32. package/docs/DESIGN_LOCAL_DATA_FUSION.md +90 -0
  33. package/docs/ENGINE_CATALOG.md +564 -0
  34. package/docs/MCP_SETUP.md +106 -0
  35. package/docs/PLATFORM_PATHS.md +111 -0
  36. package/docs/RELEASE_NOTES_v2.8.0.md +71 -0
  37. package/docs/RELEASE_NOTES_v2.8.2.md +63 -0
  38. package/docs/RELEASE_NOTES_v2.8.3.md +55 -0
  39. package/docs/RELEASE_NOTES_v2.8.4.md +79 -0
  40. package/docs/RELEASE_NOTES_v2.8.5.md +102 -0
  41. package/docs/RELEASE_NOTES_v2.8.6.md +66 -0
  42. package/docs/RELEASE_NOTES_v2.8.7.md +65 -0
  43. package/docs/RELEASE_NOTES_v2.8.8.md +67 -0
  44. package/docs/RELEASE_NOTES_v2.8.9.md +67 -0
  45. package/docs/RELEASE_NOTES_v2.9.0.md +64 -0
  46. package/docs/SEARCH_ARCHIVE.md +115 -0
  47. package/docs/assets/architecture.svg +104 -0
  48. package/docs/assets/hero.svg +98 -0
  49. package/docs/engines/bangumi.md +27 -0
  50. package/docs/engines/biorxiv.md +27 -0
  51. package/docs/engines/clawhub.md +27 -0
  52. package/docs/engines/crt_sh.md +27 -0
  53. package/docs/engines/datacite.md +27 -0
  54. package/docs/engines/deps_dev.md +27 -0
  55. package/docs/engines/douban_movie.md +27 -0
  56. package/docs/engines/endoflife.md +27 -0
  57. package/docs/engines/flk_law.md +27 -0
  58. package/docs/engines/fxtwitter.md +27 -0
  59. package/docs/engines/google_news.md +27 -0
  60. package/docs/engines/gov_regulations.md +27 -0
  61. package/docs/engines/guqian.md +27 -0
  62. package/docs/engines/hackernews.md +27 -0
  63. package/docs/engines/iplant.md +27 -0
  64. package/docs/engines/keenable.md +27 -0
  65. package/docs/engines/met_museum.md +27 -0
  66. package/docs/engines/nasa_images.md +27 -0
  67. package/docs/engines/netease_music.md +27 -0
  68. package/docs/engines/npm.md +27 -0
  69. package/docs/engines/nvd.md +27 -0
  70. package/docs/engines/openreview.md +27 -0
  71. package/docs/engines/openstd.md +27 -0
  72. package/docs/engines/parallel_free.md +27 -0
  73. package/docs/engines/people_daily.md +27 -0
  74. package/docs/engines/realtime_index.md +27 -0
  75. package/docs/engines/sec_edgar.md +27 -0
  76. package/docs/engines/seltz.md +27 -0
  77. package/docs/engines/skillsmp.md +27 -0
  78. package/docs/engines/sspai.md +27 -0
  79. package/docs/engines/std_samr.md +27 -0
  80. package/docs/engines/train.md +27 -0
  81. package/docs/engines/un_comtrade.md +27 -0
  82. package/docs/engines/wikisource.md +27 -0
  83. package/docs/engines/zdic.md +27 -0
  84. package/docs/engines/zenodo.md +27 -0
  85. package/docs/engines/zhihu_hot_app.md +27 -0
  86. package/docs//344/270/272/344/273/200/344/271/210/351/200/211/346/213/251argo.md +176 -0
  87. package/engines/README.md +10 -0
  88. package/engines/_template_cli.yaml +39 -0
  89. package/engines/_template_http.yaml +37 -0
  90. package/engines/plugins/_template_plugin.py +50 -0
  91. package/engines/specs/_cisa_kev.yaml +54 -0
  92. package/engines/specs/_osv.yaml +63 -0
  93. package/engines/specs/aljazeera.yaml +43 -0
  94. package/engines/specs/antara.yaml +43 -0
  95. package/engines/specs/artic.yaml +20 -0
  96. package/engines/specs/aviation_weather.yaml +39 -0
  97. package/engines/specs/bangumi.yaml +21 -0
  98. package/engines/specs/biorxiv.yaml +24 -0
  99. package/engines/specs/carbon_intensity.yaml +32 -0
  100. package/engines/specs/cinii.yaml +44 -0
  101. package/engines/specs/clawhub.yaml +49 -0
  102. package/engines/specs/cleveland.yaml +19 -0
  103. package/engines/specs/cn_ai_news.yaml +43 -0
  104. package/engines/specs/core.yaml +35 -0
  105. package/engines/specs/crt_sh.yaml +38 -0
  106. package/engines/specs/ct24.yaml +43 -0
  107. package/engines/specs/datacite.yaml +27 -0
  108. package/engines/specs/datagov_uk.yaml +41 -0
  109. package/engines/specs/ddgs_images.yaml +45 -0
  110. package/engines/specs/deepseek_search.yaml +74 -0
  111. package/engines/specs/deezer.yaml +20 -0
  112. package/engines/specs/deps_dev.yaml +21 -0
  113. package/engines/specs/digup.yaml +36 -0
  114. package/engines/specs/doi.yaml +39 -0
  115. package/engines/specs/douban_movie.yaml +22 -0
  116. package/engines/specs/dw_news.yaml +47 -0
  117. package/engines/specs/egov_law.yaml +21 -0
  118. package/engines/specs/elpais.yaml +43 -0
  119. package/engines/specs/endoflife.yaml +21 -0
  120. package/engines/specs/energy_charts.yaml +21 -0
  121. package/engines/specs/factcheck_org.yaml +52 -0
  122. package/engines/specs/faz.yaml +43 -0
  123. package/engines/specs/federal_register.yaml +57 -0
  124. package/engines/specs/firecrawl.yaml +53 -0
  125. package/engines/specs/flk_law.yaml +24 -0
  126. package/engines/specs/folha.yaml +43 -0
  127. package/engines/specs/france24.yaml +44 -0
  128. package/engines/specs/full_fact.yaml +47 -0
  129. package/engines/specs/fxtwitter.yaml +31 -0
  130. package/engines/specs/gbfs_nyc.yaml +32 -0
  131. package/engines/specs/gdacs.yaml +21 -0
  132. package/engines/specs/gdelt.yaml +64 -0
  133. package/engines/specs/google_news.yaml +22 -0
  134. package/engines/specs/gov_regulations.yaml +38 -0
  135. package/engines/specs/guardian_rss.yaml +59 -0
  136. package/engines/specs/hurriyet.yaml +43 -0
  137. package/engines/specs/iplant.yaml +25 -0
  138. package/engines/specs/jikan.yaml +24 -0
  139. package/engines/specs/jolpica.yaml +20 -0
  140. package/engines/specs/k10plus.yaml +20 -0
  141. package/engines/specs/keenable.yaml +44 -0
  142. package/engines/specs/lefigaro.yaml +43 -0
  143. package/engines/specs/listenbrainz.yaml +19 -0
  144. package/engines/specs/matichon.yaml +43 -0
  145. package/engines/specs/met_museum.yaml +21 -0
  146. package/engines/specs/nasa_images.yaml +45 -0
  147. package/engines/specs/netease_music.yaml +38 -0
  148. package/engines/specs/nhk.yaml +43 -0
  149. package/engines/specs/nhtsa_vpic.yaml +20 -0
  150. package/engines/specs/noaa_swpc.yaml +20 -0
  151. package/engines/specs/nvd.yaml +38 -0
  152. package/engines/specs/obis.yaml +20 -0
  153. package/engines/specs/opencitations.yaml +52 -0
  154. package/engines/specs/openf1.yaml +21 -0
  155. package/engines/specs/openfoodfacts.yaml +45 -0
  156. package/engines/specs/openligadb.yaml +20 -0
  157. package/engines/specs/openreview.yaml +37 -0
  158. package/engines/specs/openstd.yaml +21 -0
  159. package/engines/specs/people_daily.yaml +22 -0
  160. package/engines/specs/realtime_index.yaml +34 -0
  161. package/engines/specs/ror.yaml +20 -0
  162. package/engines/specs/satnogs.yaml +20 -0
  163. package/engines/specs/sec_edgar.yaml +46 -0
  164. package/engines/specs/skillsmp.yaml +50 -0
  165. package/engines/specs/sogou_weixin_browser.yaml +30 -0
  166. package/engines/specs/soilgrids.yaml +25 -0
  167. package/engines/specs/sspai.yaml +36 -0
  168. package/engines/specs/stackexchange.yaml +46 -0
  169. package/engines/specs/std_samr.yaml +21 -0
  170. package/engines/specs/tass.yaml +43 -0
  171. package/engines/specs/tle_mirror.yaml +21 -0
  172. package/engines/specs/train.yaml +37 -0
  173. package/engines/specs/tvmaze.yaml +20 -0
  174. package/engines/specs/twitter_syndication.yaml +31 -0
  175. package/engines/specs/un_comtrade.yaml +23 -0
  176. package/engines/specs/unpaywall.yaml +54 -0
  177. package/engines/specs/vnpress.yaml +43 -0
  178. package/engines/specs/weather.yaml +32 -0
  179. package/engines/specs/who_don.yaml +21 -0
  180. package/engines/specs/who_gho.yaml +20 -0
  181. package/engines/specs/wikimedia_commons.yaml +34 -0
  182. package/engines/specs/wikisource.yaml +22 -0
  183. package/engines/specs/worms.yaml +19 -0
  184. package/engines/specs/x_trending.yaml +34 -0
  185. package/engines/specs/yna.yaml +43 -0
  186. package/engines/specs/ynet.yaml +43 -0
  187. package/engines/specs/zbmath.yaml +40 -0
  188. package/engines/specs/zdic.yaml +22 -0
  189. package/engines/specs/zenodo.yaml +27 -0
  190. package/engines/specs/zhihu_hot_app.yaml +35 -0
  191. package/mcp/clients.yaml +74 -0
  192. package/package.json +51 -12
  193. package/packages/dsh-plugin/README.md +134 -0
  194. package/packages/dsh-plugin/cordis.patch.yml +48 -0
  195. package/packages/dsh-plugin/dsh/client.js +1244 -0
  196. package/packages/dsh-plugin/dsh/index.js +2290 -0
  197. package/packages/dsh-plugin/dsh/native-tools.mjs +743 -0
  198. package/packages/dsh-plugin/package.json +38 -0
  199. package/packages/dsh-plugin/test/client.test.js +232 -0
  200. package/packages/dsh-plugin/test/config.test.js +30 -0
  201. package/packages/dsh-plugin/test/index.test.js +1338 -0
  202. package/references/query-templates.md +96 -0
  203. package/references/query-templates.yaml +118 -0
  204. package/scripts/ab_eval.py +219 -0
  205. package/scripts/ab_eval_p0p1.py +266 -0
  206. package/scripts/adaptive.py +271 -70
  207. package/scripts/answer.py +154 -0
  208. package/scripts/archive_run.py +591 -0
  209. package/scripts/argo_engine_registry.py +172 -0
  210. package/scripts/argo_paths.py +728 -0
  211. package/scripts/article.py +136 -0
  212. package/scripts/arxiv_source.py +201 -0
  213. package/scripts/badcase_ledger.py +252 -0
  214. package/scripts/batch_probe.py +241 -0
  215. package/scripts/benchmark.py +19 -0
  216. package/scripts/bounded_run.py +144 -0
  217. package/scripts/browser_auth.py +323 -0
  218. package/scripts/burstiness_detector.py +147 -0
  219. package/scripts/cache.py +1078 -67
  220. package/scripts/cache_guard.py +271 -0
  221. package/scripts/cache_key_vdom.py +56 -0
  222. package/scripts/cache_similarity.py +170 -0
  223. package/scripts/caliber_isolation.py +195 -0
  224. package/scripts/calibrate_lowquality.py +210 -0
  225. package/scripts/candidate_envelope.py +366 -0
  226. package/scripts/chrome_cdp.py +871 -0
  227. package/scripts/circuit_breaker.py +389 -0
  228. package/scripts/citations.py +334 -0
  229. package/scripts/cite_cli.py +59 -0
  230. package/scripts/cjk_tokens.py +95 -0
  231. package/scripts/clarify.py +47 -24
  232. package/scripts/cli_io.py +240 -0
  233. package/scripts/config.py +683 -45
  234. package/scripts/config_cache.py +402 -0
  235. package/scripts/conn_pool.py +220 -0
  236. package/scripts/content_security.py +685 -0
  237. package/scripts/content_signals.py +730 -0
  238. package/scripts/crawl.py +74 -35
  239. package/scripts/daemon.py +866 -0
  240. package/scripts/digup_bridge.py +214 -0
  241. package/scripts/engine_admission.py +366 -0
  242. package/scripts/engine_dispatch.py +1019 -0
  243. package/scripts/engine_env.py +534 -0
  244. package/scripts/engine_failure.py +411 -0
  245. package/scripts/engine_families.py +732 -0
  246. package/scripts/engine_policy.py +218 -0
  247. package/scripts/engine_requires.py +190 -0
  248. package/scripts/engine_status.py +322 -0
  249. package/scripts/engine_validate.py +638 -0
  250. package/scripts/engines.py +778 -294
  251. package/scripts/engines_base.py +1521 -0
  252. package/scripts/engines_builders.py +298 -0
  253. package/scripts/engines_builders_batch10.py +159 -0
  254. package/scripts/engines_builders_batch11.py +174 -0
  255. package/scripts/engines_builders_batch12.py +103 -0
  256. package/scripts/engines_builders_batch13.py +340 -0
  257. package/scripts/engines_builders_batch9.py +1468 -0
  258. package/scripts/engines_builders_cn.py +2283 -0
  259. package/scripts/engines_builders_data.py +2923 -0
  260. package/scripts/engines_builders_data_macro.py +775 -0
  261. package/scripts/engines_builders_feeds.py +255 -0
  262. package/scripts/engines_builders_intl.py +1239 -0
  263. package/scripts/engines_builders_search.py +440 -0
  264. package/scripts/engines_builders_tech.py +1360 -0
  265. package/scripts/evidence.py +588 -162
  266. package/scripts/evidence_loop.py +592 -0
  267. package/scripts/evidence_tier.py +298 -0
  268. package/scripts/except_sets.py +25 -0
  269. package/scripts/extract.py +55 -16
  270. package/scripts/fact_align.py +207 -0
  271. package/scripts/fact_crosscheck.py +230 -0
  272. package/scripts/fetch.py +25 -12
  273. package/scripts/fetch_browser.py +87 -0
  274. package/scripts/fetch_jsrun.py +122 -0
  275. package/scripts/fetch_quality.py +225 -0
  276. package/scripts/fetch_render_tinyfish.py +117 -0
  277. package/scripts/fetch_v3.py +1779 -0
  278. package/scripts/focus_extract.py +350 -0
  279. package/scripts/fulltext_store.py +169 -0
  280. package/scripts/fxtwitter_api.py +325 -0
  281. package/scripts/gen_engine_catalog.py +364 -0
  282. package/scripts/gen_native_tools.py +91 -0
  283. package/scripts/gen_routing_snapshot.py +184 -0
  284. package/scripts/health_check.py +140 -402
  285. package/scripts/health_probe.py +23 -8
  286. package/scripts/hot_state.py +134 -0
  287. package/scripts/http_client.py +1053 -0
  288. package/scripts/image_ops.py +430 -0
  289. package/scripts/image_vision/vision_probe +0 -0
  290. package/scripts/image_vision/vision_probe.swift +126 -0
  291. package/scripts/install.ps1 +148 -0
  292. package/scripts/install.sh +206 -0
  293. package/scripts/job.py +1186 -0
  294. package/scripts/jump_resolver.py +235 -0
  295. package/scripts/lang_capability.py +150 -0
  296. package/scripts/lang_detect.py +289 -0
  297. package/scripts/lang_matrix_probe.py +329 -0
  298. package/scripts/lang_pref.py +311 -0
  299. package/scripts/link_source.py +340 -0
  300. package/scripts/local_engines.py +321 -0
  301. package/scripts/local_image.py +970 -0
  302. package/scripts/local_seek.py +366 -0
  303. package/scripts/macro_countries.py +82 -0
  304. package/scripts/matrix_search_eval.py +1105 -0
  305. package/scripts/mcp_diag.py +8 -3
  306. package/scripts/mcp_handlers.py +1074 -0
  307. package/scripts/mcp_handlers_surface.py +157 -0
  308. package/scripts/mcp_launch.sh +122 -0
  309. package/scripts/mcp_server.py +118 -417
  310. package/scripts/mcp_setup.py +407 -0
  311. package/scripts/mcp_tools.py +330 -0
  312. package/scripts/mcp_transport.py +191 -0
  313. package/scripts/min_version_scan.py +335 -0
  314. package/scripts/net_proxy.py +258 -0
  315. package/scripts/network_aware.py +152 -0
  316. package/scripts/paper.py +274 -0
  317. package/scripts/pdf_extract.py +518 -0
  318. package/scripts/phrase_filter.py +66 -0
  319. package/scripts/plan.py +422 -0
  320. package/scripts/postprocess_signals.py +150 -0
  321. package/scripts/pre-commit +48 -0
  322. package/scripts/query_enhance.py +157 -0
  323. package/scripts/query_operators.py +196 -0
  324. package/scripts/query_rewriter.py +116 -7
  325. package/scripts/query_signals.py +300 -0
  326. package/scripts/query_templates.py +167 -0
  327. package/scripts/query_understanding.py +411 -0
  328. package/scripts/query_variants.py +298 -0
  329. package/scripts/quota.py +488 -76
  330. package/scripts/rank_signals.py +775 -0
  331. package/scripts/ranking_eval.py +319 -0
  332. package/scripts/readability_extract.py +433 -0
  333. package/scripts/recompute.py +415 -0
  334. package/scripts/recovery.py +616 -0
  335. package/scripts/recovery_l0.py +160 -0
  336. package/scripts/redskill/redskill_engine.py +332 -0
  337. package/scripts/regression_p0p1.py +318 -0
  338. package/scripts/replay_eval.py +640 -0
  339. package/scripts/rerank_tfidf.py +225 -0
  340. package/scripts/research.py +591 -403
  341. package/scripts/research_cli.py +361 -0
  342. package/scripts/research_dossier.py +492 -0
  343. package/scripts/research_expand.py +146 -0
  344. package/scripts/research_gates.py +272 -0
  345. package/scripts/research_report.py +209 -0
  346. package/scripts/research_strategy.py +37 -0
  347. package/scripts/research_work_packages.py +195 -0
  348. package/scripts/result_lang.py +311 -0
  349. package/scripts/robots_guard.py +259 -0
  350. package/scripts/route.py +921 -254
  351. package/scripts/route_bangs.py +40 -0
  352. package/scripts/route_cache.py +225 -0
  353. package/scripts/route_combo.py +910 -0
  354. package/scripts/route_domains.py +328 -0
  355. package/scripts/route_lang.py +605 -0
  356. package/scripts/route_log.py +63 -0
  357. package/scripts/route_policy.py +250 -0
  358. package/scripts/rrf_classic.py +66 -0
  359. package/scripts/screenshot.py +73 -0
  360. package/scripts/search.py +897 -405
  361. package/scripts/search_attribution.py +88 -0
  362. package/scripts/search_benchmark.py +407 -0
  363. package/scripts/search_cli.py +627 -0
  364. package/scripts/search_entry.py +389 -0
  365. package/scripts/search_output.py +606 -0
  366. package/scripts/search_pipeline.py +1077 -0
  367. package/scripts/search_rank.py +991 -0
  368. package/scripts/search_types.py +27 -12
  369. package/scripts/seek_locator.py +68 -0
  370. package/scripts/semantic_evidence.py +215 -0
  371. package/scripts/serp_guard.py +228 -0
  372. package/scripts/serp_kill_log.py +51 -0
  373. package/scripts/single_flight.py +120 -0
  374. package/scripts/social_engines/__init__.py +10 -0
  375. package/scripts/social_engines/bilibili_engine.py +131 -0
  376. package/scripts/social_engines/hackernews_engine.py +113 -0
  377. package/scripts/social_engines/reddit_engine.py +172 -0
  378. package/scripts/social_engines/twitter_engine.py +397 -0
  379. package/scripts/social_engines/v2ex_engine.py +101 -0
  380. package/scripts/social_engines/weibo_engine.py +128 -0
  381. package/scripts/social_engines/xiaohongshu_engine.py +137 -0
  382. package/scripts/social_engines/zhihu_engine.py +139 -0
  383. package/scripts/social_research.py +201 -0
  384. package/scripts/sogou_weixin_browser.py +318 -0
  385. package/scripts/source_ledger.py +249 -0
  386. package/scripts/stage_timing.py +58 -0
  387. package/scripts/stats_cli.py +95 -0
  388. package/scripts/straggler_policy.py +60 -0
  389. package/scripts/stylometry_detector.py +231 -0
  390. package/scripts/sync_backends.py +353 -0
  391. package/scripts/sync_installs.py +29 -0
  392. package/scripts/template_cli.py +127 -0
  393. package/scripts/text_lexicon.py +72 -0
  394. package/scripts/tfidf_router.py +109 -37
  395. package/scripts/time_utils.py +233 -0
  396. package/scripts/topic_research_profiles.py +643 -0
  397. package/scripts/train.py +737 -0
  398. package/scripts/tweet.py +596 -0
  399. package/scripts/url_canon.py +217 -0
  400. package/scripts/url_optimize.py +56 -0
  401. package/scripts/url_safety.py +236 -0
  402. package/scripts/usage_log.py +116 -0
  403. package/scripts/usage_log_clean.py +113 -0
  404. package/scripts/v2ex_nodes.py +311 -0
  405. package/scripts/variant_recall.py +188 -0
  406. package/scripts/watch.py +205 -0
  407. package/scripts/wechat_article.py +258 -0
  408. package/scripts/wide_research.py +402 -0
  409. package/scripts/wx.py +349 -0
  410. package/scripts/x_article_fetch.py +141 -0
  411. package/scripts/x_search.py +234 -0
  412. package/scripts/x_trending.py +189 -0
  413. package/scripts/yaml_load.py +67 -0
  414. package/sub-skills/ego-search/SKILL.md +253 -0
  415. package/sub-skills/ego-search/references/browser-runtime.md +43 -0
  416. package/sub-skills/ego-search/references/install.md +67 -0
  417. package/sub-skills/ego-search/references/original-ego-upgrade.md +51 -0
  418. package/sub-skills/ego-search/scripts/ego_search.py +800 -0
  419. package/sub-skills/ego-search/scripts/merge.py +226 -0
  420. package/sub-skills/ego-search/scripts/quality.py +64 -0
  421. package/sub-skills/ego-search/scripts/runtime.py +172 -0
  422. package/sub-skills/ego-search/scripts/safety.py +109 -0
  423. package/sub-skills/ego-search/scripts/serp_spec.py +109 -0
  424. package/sub-skills/ego-search/scripts/webbridge_adapter.py +374 -0
  425. package/sub-skills/ego-search/tests/test_query_normalize.py +68 -0
  426. package/sub-skills/js-run/SKILL.md +67 -0
  427. package/sub-skills/js-run/scripts/jsrun.py +112 -0
  428. package/sub-skills/js-run/scripts/shim.js +188 -0
  429. package/sub-skills/js-run/tests/fixtures/challenge_like.js +27 -0
  430. package/sub-skills/js-run/tests/test_jsrun.py +165 -0
  431. package/sub-skills/local-search/SKILL.md +50 -53
  432. package/sub-skills/local-search/bm25.py +162 -0
  433. package/sub-skills/local-search/config.yaml +152 -55
  434. package/sub-skills/local-search/engine_registry.py +91 -26
  435. package/sub-skills/local-search/{health_check.py โ†’ local_health_check.py} +140 -10
  436. package/sub-skills/local-search/local_search_adapter.py +13 -2
  437. package/sub-skills/local-search/parse_maps.yaml +40 -42
  438. package/sub-skills/local-search/search_v3.py +1182 -65
  439. package/sub-skills/local-search/smart_router.py +47 -7
  440. package/sub-skills/local-seek/SKILL.md +110 -0
  441. package/sub-skills/local-seek/config/domains.yaml +20 -0
  442. package/sub-skills/local-seek/references/auto-behaviors.md +24 -0
  443. package/sub-skills/local-seek/references/fd-mdfind-recipes.md +62 -0
  444. package/sub-skills/local-seek/references/git-integration.md +54 -0
  445. package/sub-skills/local-seek/references/remote-handoff.md +46 -0
  446. package/sub-skills/local-seek/references/rg-recipes.md +96 -0
  447. package/sub-skills/local-seek/references/strategies.md +52 -0
  448. package/sub-skills/local-seek/references/structural-search.md +59 -0
  449. package/sub-skills/local-seek/scripts/eval_rank.py +216 -0
  450. package/sub-skills/local-seek/scripts/eval_seek.py +224 -0
  451. package/sub-skills/local-seek/scripts/seek.py +1465 -0
  452. package/sub-skills/local-seek/scripts/seek_frecency.py +126 -0
  453. package/sub-skills/local-seek/scripts/seek_fts.py +430 -0
  454. package/sub-skills/local-seek/scripts/seek_rank.py +193 -0
  455. package/sub-skills/local-seek/tests/test_content_rank.py +222 -0
  456. package/sub-skills/local-seek/tests/test_determinism_20261006.py +145 -0
  457. package/sub-skills/local-seek/tests/test_noise_tier.py +101 -0
  458. package/sub-skills/local-seek/tests/test_pcre2_probe.py +136 -0
  459. package/sub-skills/local-seek/tests/test_rank_pinyin.py +77 -0
  460. package/sub-skills/local-seek/tests/test_regression_20261003.py +169 -0
  461. package/sub-skills/local-seek/tests/test_regression_20261006.py +146 -0
  462. package/sub-skills/local-seek/tests/test_seek_degradation.py +111 -0
  463. package/sub-skills/local-seek/tests/test_seek_fts.py +313 -0
package/README.ko.md ADDED
@@ -0,0 +1,864 @@
1
+ <p align="center">
2
+ <img src="assets/readme/hero.svg" width="100%" alt="Argo ์•„๋ฅด๊ณ : ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ ๊ฒ€์ƒ‰๊ณผ ์‹ฌ์ธต ๋ฆฌ์„œ์น˜ ๋„๊ตฌ, 264๊ฐœ ๊ฒ€์ƒ‰ ์†Œ์Šค, ๋„๋ฉ”์ธยท์–ธ์–ด๋ณ„ ๋ผ์šฐํŒ…, ํก์ˆ˜ ๊ฐ€๋Šฅํ•œ ์ฆ๊ฑฐ ์ถœ๋ ฅ">
3
+ </p>
4
+
5
+ <p align="center">
6
+ <a href="README.md">ไธญๆ–‡</a> ยท
7
+ <a href="README.en.md">English</a> ยท
8
+ <a href="README.ja.md">ๆ—ฅๆœฌ่ชž</a> ยท
9
+ <strong>ํ•œ๊ตญ์–ด</strong> ยท
10
+ <a href="README.es.md">Espaรฑol</a>
11
+ </p>
12
+
13
+ <p align="center">
14
+ <a href="#๋ฌด์—‡์ธ๊ฐ€">์†Œ๊ฐœ</a> ยท
15
+ <a href="#๋ชจ๋ธ-๋‚ด์žฅ-๊ฒ€์ƒ‰--ai-๊ฒ€์ƒ‰--๋ฉ”ํƒ€๊ฒ€์ƒ‰๋ณด๋‹ค-๊ฐ•ํ•œ-์ ">๋น„๊ต</a> ยท
16
+ <a href="#์งˆ๋ฌธ-ํ˜•ํƒœ์—-๋งž๋Š”-๋ผ์šฐํŒ…">์ฆ๋ช…</a> ยท
17
+ <a href="#๋™์ž‘-๋ฐฉ์‹">๋ฉ”์ปค๋‹ˆ์ฆ˜</a> ยท
18
+ <a href="#๋น ๋ฅธ-์‹œ์ž‘">๋น ๋ฅธ ์‹œ์ž‘</a> ยท
19
+ <a href="#๊ธฐ๋Šฅ">๊ธฐ๋Šฅ</a> ยท
20
+ <a href="#์„ค์น˜์™€-์„ค์ •">์„ค์ •</a> ยท
21
+ <a href="#์ตœ๊ทผ-์—…๋ฐ์ดํŠธ">์—…๋ฐ์ดํŠธ</a>
22
+ </p>
23
+
24
+ <p align="center">
25
+ <img alt="license" src="https://img.shields.io/badge/license-Apache_2.0-blue">
26
+ <img alt="python" src="https://img.shields.io/badge/python-3.9+-green">
27
+ <img alt="version" src="https://img.shields.io/badge/version-2.9.7-informational">
28
+ <img alt="engines" src="https://img.shields.io/badge/engines-264-orange">
29
+ <img alt="mcp" src="https://img.shields.io/badge/MCP-19%20tools-purple">
30
+ </p>
31
+
32
+ > **์ด ์ €์žฅ์†Œ๋Š” taxueseek์˜ DeepSeek Harness ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ผ์ธ์—… ์ค‘ ํ•˜๋‚˜**์ž…๋‹ˆ๋‹ค๏ผˆ[dsh-files](https://github.com/taxueseek/dsh-files) 39โ˜…๏ผ‰. ๊ฐ™์€ ์ €์ž ์Šคํ‚ฌ ์‹œ๋ฆฌ์ฆˆ: [session-digger](https://github.com/taxueseek/session-digger) 29โ˜… ยท [taxue-invest](https://github.com/taxueseek/taxue-invest) 21โ˜… ยท [taxueskills](https://github.com/taxueseek/taxueskills) 23โ˜… ยท [taxue-creative-style](https://github.com/taxueseek/taxue-creative-style) 12โ˜…
33
+
34
+ # Argo ์•„๋ฅด๊ณ : ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ ๊ฒ€์ƒ‰๊ณผ ์‹ฌ์ธต ๋ฆฌ์„œ์น˜ ๋„๊ตฌ
35
+
36
+ ## ๋ฌด์—‡์ธ๊ฐ€
37
+
38
+ **Argo๋Š” ์—์ด์ „ํŠธ์— ์„ค์น˜ํ•˜๋Š” ๊ฒ€์ƒ‰ยท์‹ฌ์ธต ๋ฆฌ์„œ์น˜ ๋„๊ตฌ์ด๋ฉฐ, ๊ด€๋ จ ์›นํŽ˜์ด์ง€์˜ ์ •๋ณด๋„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋’ค์—๋Š” 264๊ฐœ์˜ ๊ฒ€์ƒ‰ ์†Œ์Šค๊ฐ€ ์žˆ๊ณ  95๊ฐœ ์—…๋ฌด ์˜์—ญ์„ ์ปค๋ฒ„ํ•˜๋ฉฐ, ๋กœ์ปฌ ํŒŒ์ผ ๊ธฐ๋ณธ ๊ฒ€์ƒ‰๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์˜คํ”ˆ์†Œ์Šค ๊ฒ€์ƒ‰ ํ”„๋กœ์ ํŠธ ๊ฐ€์šด๋ฐ ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๊ฒ€์ƒ‰ ๋Šฅ๋ ฅ์„ ๊ฐ–์ท„์Šต๋‹ˆ๋‹ค.**
39
+
40
+ API Key๋ฅผ ์„ค์ •ํ•˜๋ฉด ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์ด ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค(ํ‚ค๊ฐ€ ์žˆ๋Š” ์†Œ์Šค๋Š” ๋ณดํ†ต ๋” ์ข‹๊ณ , ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ๊ฑด๋„ˆ๋œ€). ๋ฌด๋ฃŒ ์—”์ง„๊ณผ ๋กœ์ปฌ ์—”์ง„์ด ์ž๋™์œผ๋กœ ๋ณด๋ฃจ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ค‘๊ตญ์–ดยท์˜์–ดยท์ผ๋ณธ์–ดยทํ•œ๊ตญ์–ด ๋“ฑ 18๊ฐœ ์–ธ์–ด๋ฅผ ์ปค๋ฒ„ํ•˜๊ณ , ๊ธˆ์œตยทํ•™์ˆ ยท์˜ํ™”ยท์Šคํฌ์ธ ยท์ฝ”๋“œยท๋งคํฌ๋กœ ๊ฐ™์€ ์ˆ˜์ง ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
41
+
42
+ ## ํ•˜์œ„ ์Šคํ‚ฌ
43
+
44
+ Argo์˜ ๋Šฅ๋ ฅ์€ ๋„ค ๊ฐœ์˜ ํ•˜์œ„ ์Šคํ‚ฌ(sub-skills)๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ฐ ํ•˜์œ„ ์Šคํ‚ฌ์€ ๋…๋ฆฝ์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ดํ”„๋ผ์ธ์ž…๋‹ˆ๋‹ค:
45
+
46
+ | ํ•˜์œ„ ์Šคํ‚ฌ | ๋Šฅ๋ ฅ |
47
+ |--------|------|
48
+ | **local-search** | ๋กœ์ปฌ ํŒŒ์ผ ๊ฒ€์ƒ‰ + ๋กœ์ปฌ ์ œ๋กœ ๋น„์šฉ ์ง‘๊ณ„ ์—”์ง„(๋กœ์ปฌ ์—”์ง„ 32๊ฐœ). ์ฝ”๋“œ ์‹ฌ๋ณผ, ํŒŒ์ผ๋ช…, ๋ฌธ์„œ ์ „๋ฌธ, ํŒŒ์ผ ๊ตฌ์กฐ ๊ฒ€์ƒ‰. ๋„คํŠธ์›Œํฌ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ํ•ฉ์น  ์ˆ˜ ์žˆ๊ณ , ์Šค์œ„์น˜ ํ•˜๋‚˜๋ฉด ๋กœ์ปฌ ์ ์ค‘์ด ๊ฐ™์€ ๊ฒ€์ƒ‰์— ํ•จ๊ป˜ ๋“ค์–ด๊ฐ |
49
+ | **local-seek** | ๋กœ์ปฌ ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰(BM25 + ๋ฒกํ„ฐ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ), ๋…ธํŠธยท๋ฉ”๋ชจ๋ฆฌยท์ž๋ฃŒ์‹ค ๊ฒ€์ƒ‰. 3๋‹จ๊ณ„ ์ ์ง„: ํŒŒ์ผ ์œ„์น˜ ํ™•์ธ โ†’ ๋ฌธ๋งฅ ํ™•์ธ โ†’ ๋‹จ๋ฝ ์ •๋… |
50
+ | **ego-search** | ๋กœ๊ทธ์ธ ์ƒํƒœ ์ „๋ฌธ ๊ฒ€์ƒ‰. ์ง€ํ›„, ์ƒค์˜คํ™์Šˆ, ์œ„์ฑ— ๊ณต์‹๊ณ„์ •์ฒ˜๋Ÿผ ๋กœ๊ทธ์ธํ•ด์•ผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ €์™€ ๋กœ๊ทธ์ธ ์ƒํƒœ๋กœ ๊ฒ€์ƒ‰. ๊ธฐ๋ณธ ๊บผ์ง, ํ•„์š”ํ•  ๋•Œ ์ผฌ |
51
+ | **js-run** | ๋ธŒ๋ผ์šฐ์ € ์—†์ด ์›น JS ์‹คํ–‰. ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด์ง€ ์•Š๊ณ  ใ€Œํ™˜๊ฒฝ ํƒ์ง€ + ์ˆœ์ˆ˜ ๊ณ„์‚ฐใ€ํ˜• ์›น ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰, ๋‹จ์ผ ์ปจํ…์ŠคํŠธ P50 ์•ฝ 1ms |
52
+
53
+ ๋„ค ํ•˜์œ„ ์Šคํ‚ฌ์ด ใ€Œ๋กœ์ปฌ ๊ฒ€์ƒ‰ใ€์—์„œ ใ€Œ์›น ์ „์ฒด ๊ฒ€์ƒ‰ใ€, ใ€Œ๋กœ๊ทธ์ธ ๋ฒฝ ๋’ค ๊ฒ€์ƒ‰ใ€๊นŒ์ง€ ์ „ ์ฒด์ธ์„ ์ปค๋ฒ„ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์€ local-search + ๋„คํŠธ์›Œํฌ ๊ฒ€์ƒ‰์ด๋ฉด ์ถฉ๋ถ„ํ•˜๊ณ , ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ์— ego-search์™€ js-run์„ ์ผœ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
54
+
55
+ ## DSH ํ”Œ๋Ÿฌ๊ทธ์ธ
56
+
57
+ Argo๋Š” DeepSeek Harness ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๊ธฐ๋„ ํ•˜๋ฉฐ, ๋ช…๋ น ํ•œ ์ค„๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:
58
+
59
+ ```bash
60
+ dsh plugin --profile web add "github:taxueseek/argo"
61
+ ```
62
+
63
+ ์„ค์น˜ ํ›„ `dsh web`์„ ์žฌ์‹œ์ž‘ํ•˜๋ฉด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰๊ณผ ๊ธ๊ธฐ๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ 1๊ธ‰ ๋„๊ตฌ๊ฐ€ ๋˜์–ด MCP ์—ฐ๊ฒฐ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์ƒ์ฃผ ์ปจํ…์ŠคํŠธ ๋น„์šฉ๋„ ์ฐจ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ `wide_research` ๋ณ‘๋ ฌ ๋ฆฌ์„œ์น˜ 1๊ฐœ์™€ MCP ๋„๊ตฌ 19๊ฐœ๋ฅผ ํ•„์š”ํ•  ๋•Œ ์ผค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์—ฐ๋™ ํ˜•ํƒœ๋Š” ์•„๋ž˜์—์„œ.
64
+
65
+ ### ์„ธ ๊ฐ€์ง€ ํ˜ธ์ถœ ์ฑ„๋„, ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ์„ธํŠธ
66
+
67
+ ๊ฐ™์€ argo ๊ฒ€์ƒ‰ ์ฝ”์–ด(๊ฐ™์€ ์—”์ง„, ๊ฐ™์€ ์••์ถ•, ๊ฐ™์€ ๊ฐ€๋“œ)๊ฐ€ DSH ์•ˆ์—์„œ ์„ธ ๊ฐœ์˜ ์ฑ„๋„์„ ์—ด๊ณ , ํ˜ธ์ŠคํŠธ ๋Šฅ๋ ฅ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋˜๋ฉฐ ์„œ๋กœ๋ฅผ ๋ฐฑ์—…ํ•ฉ๋‹ˆ๋‹ค:
68
+
69
+ | ์ฑ„๋„ | ๊ธฐ๋ณธ๊ฐ’ | ๋™์ž‘ |
70
+ |------|--------|------|
71
+ | **๋„ค์ดํ‹ฐ๋ธŒ 1๊ธ‰ ๋„๊ตฌ** | ์ผฌ | `argo_search` / `argo_fetch` ๋“ฑ์„ `ctx.tools.register`๋กœ ๋“ฑ๋กํ•˜๊ณ  CLI ๋‹จ๋ฐœ(`--call`)๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. MCP์™€ ๋™์ผํ•œ ์—”์ง„ยท๊ฐ€๋“œ ์Šคํƒ์„ ์žฌ์‚ฌ์šฉํ•˜๋ฏ€๋กœ **MCP ์—ฐ๊ฒฐ ๋ถˆํ•„์š”, ์ƒ์ฃผ ํ† ํฐ ๋น„์šฉ 0** |
72
+ | **๋„ค์ดํ‹ฐ๋ธŒ web seam** | ์ผฌ | `argo`๋ฅผ ๊ฒ€์ƒ‰ ํ”„๋กœ๋ฐ”์ด๋”์™€ ๊ธ๊ธฐ ํ”„๋กœ๋ฐ”์ด๋” ์–‘์ชฝ์œผ๋กœ ๋“ฑ๋กํ•ด ํ˜ธ์ŠคํŠธ ๋‚ด์žฅ `web_search`๋Š” argo ์—”์ง„ ์ฒด์ธ์œผ๋กœ, `web_fetch`๋Š” argo ๊ธ๊ธฐ ์ฒด์ธ์œผ๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค(HTTP ์šฐ์„ , Cloudflare / JS ๋ Œ๋”๋ง์—์„œ๋Š” ์ž๋™์œผ๋กœ ์•ˆํ‹ฐ ๋””ํ…์…˜ ๋ธŒ๋ผ์šฐ์ €๋กœ ์Šน๊ฒฉ) |
73
+ | **MCP ํ˜•ํƒœ** | ํ•„์š” ์‹œ | 19๊ฐœ `mcp__argo__*` ์ „์ฒด ๋„๊ตฌ ๋ฉด. ๋„๊ตฌ ์ •์˜๋Š” ๋งค ๋ผ์šด๋“œ ์ปจํ…์ŠคํŠธ์— ์ฃผ์ž…๋˜๋ฉฐ ์••์ถ•ํ•ด๋„ ์ง€์›Œ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค(19๊ฐœ ๋„๊ตฌ ์‹ค์ธก โ‰ˆ3.7K ํ† ํฐ/๋ผ์šด๋“œ). ๋ฐ˜๋ฉด ๊ณ ๋นˆ๋„ ๊ฒฝ๋กœ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ๋„๊ตฌ์™€ web seam์ด ์ด๋ฏธ ์ปค๋ฒ„ํ•˜๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งˆ์šดํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋กฑํ…Œ์ผ ํฌ๋ Œ์‹ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ profile patch์˜ `mcp-argo` ์ค„ ์ฃผ์„์„ ํ•ด์ œํ•˜์„ธ์š” |
74
+
75
+ ๊ทธ ์™ธ `wide_research`๊ฐ€ 1๊ฐœ ์žˆ์Šต๋‹ˆ๋‹ค: ๋ณด์™„์ ์ธ ํŠธ๋ž™์„ ๊ณ„ํš(`depends_on`์œผ๋กœ ๋‹จ๊ณ„ํ™”, ๊ธฐ๋ณธ์€ ๋ณ‘๋ ฌ) โ†’ ์œ ๊ณ„ ๋ณ‘๋ ฌ ์„œ๋ธŒ์—์ด์ „ํŠธ๋กœ ์ฆ๊ฑฐ ์ˆ˜์ง‘ โ†’ ์ถœ์ฒ˜ ์žฅ๋ถ€(http(s) URL๋งŒ ๊ธฐ๋ก) โ†’ ์ข…ํ•ฉ ๋ณด๊ณ ์„œ. ์ถœ๋ ฅ์—๋Š” `quality_gate_results`(`conclusion_cap`: low/medium/high)๊ฐ€ ๋ถ™๊ณ , `passed=false`์ผ ๋•Œ๋Š” ํ‘œํ˜„์„ ๋‚ฎ์ถ”๊ณ  ๊ฒฐ๋ก  ์ „์— ์žฅ๋ถ€์˜ ์ถœ์ฒ˜๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. worker ์ฆ๊ฑฐ ๋„๊ตฌ ํ—ˆ์šฉ ๋ชฉ๋ก์€ MCP ์ด๋ฆ„๊ณผ ๋„ค์ดํ‹ฐ๋ธŒ ์ด๋ฆ„์„ ๋‘˜ ๋‹ค ์“ฐ๋ฏ€๋กœ(allow ์˜๋ฏธ) MCP ๋งˆ์šดํŠธ ์—ฌ๋ถ€์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. MCP๊ฐ€ ์žˆ์œผ๋ฉด ์ „์ฒด ๋ฉด์„ ์“ฐ๊ณ , ์—†์œผ๋ฉด `argo_search` / `argo_fetch`์™€ ํ˜ธ์ŠคํŠธ์˜ `web_search` / `web_fetch`๋กœ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.
76
+
77
+ ์ผ์ƒ์ ์ธ ์งˆ๋ฌธ์—๋Š” `argo_search`, ๋‹จ์ผ ์—์ด์ „ํŠธ ํฌ๋ Œ์‹์—๋Š” `argo_research`, ์ธ์šฉ ์žฅ๋ถ€๊ฐ€ ํ•„์š”ํ•œ ๋‹ค๊ฐ์  ๋น„๊ต์—๋Š” `wide_research`๋ฅผ ๋‚˜๋ˆ  ์”๋‹ˆ๋‹ค. worker๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ argo ์ฆ๊ฑฐ ๋„๊ตฌ๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ณ  `argo_research`๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(ํ•˜๋“œ ๊ฐ€๋“œ โ€” ์‚ฌ์šฉ์ž ๊ณ„์ธต์˜ ๆ”พ่กŒ๋„ ๋ฌดํšจ).
78
+
79
+ ### ๋‚ด์žฅ ์„ค์ • ํŽ˜์ด์ง€: ์—ฌ์„ฏ ๊ฐœ ๊ตฌ์—ญ, ์ €์žฅ ์ฆ‰์‹œ ์ ์šฉ
80
+
81
+ ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋Š” ๋ธŒ๋ผ์šฐ์ € ์ธก ์„ค์ • ํŽ˜์ด์ง€๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ๊ณ  ์ž…๊ตฌ๋Š” ๋‘ ๊ณณ์ž…๋‹ˆ๋‹ค: ์„ค์ • ํŒ์—…(`Cmd+,`)์˜ ์™ผ์ชฝ ๋ฉ”๋‰ด ํ•ญ๋ชฉ "Argo", ๋˜๋Š” ์„ค์ • > ํ”Œ๋Ÿฌ๊ทธ์ธ > Argo(๊ฐ™์€ ํŒจ๋„์˜ ์š”์•ฝ ์นด๋“œ, ํด๋ฆญํ•˜๋ฉด ์—ด๋ฆฝ๋‹ˆ๋‹ค).
82
+
83
+ <p align="center">
84
+ <img src="assets/readme/settings-tools.png" width="100%" alt="Argo ์„ค์ • ํŽ˜์ด์ง€ '๋„๊ตฌ' ๊ตฌ์—ญ: ๊ณ ๋นˆ๋„ ๊ฒฝ๋กœ๋Š” argo_search / argo_fetch๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์ผœ์ ธ ์žˆ๊ณ , ๋กฑํ…Œ์ผ ํฌ๋ Œ์‹ 16๊ฐœ๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์ฒดํฌ, ์•„๋ž˜์— ๋‹จ๋ฐœ ํ˜ธ์ถœ ํƒ€์ž„์•„์›ƒ๊ณผ ๋ฐ˜ํ™˜ ํ…์ŠคํŠธ ์ƒํ•œ">
85
+ </p>
86
+
87
+ <p align="center">
88
+ <img src="assets/readme/settings-keys.png" width="100%" alt="Argo ์„ค์ • ํŽ˜์ด์ง€ 'ํ‚ค' ๊ตฌ์—ญ: ์ฃผ์š” ์—”์ง„ ํ‚ค์˜ ์ž…๋ ฅยท๊ฐฑ์‹ ยท์‚ญ์ œ, ์„ค์ •๋จ/๋ฏธ์„ค์ •๊ณผ ์ถœ์ฒ˜ ๊ณ„์ธต ํ‘œ์‹œ, ํ‰๋ฌธ์€ ํ‘œ์‹œํ•˜์ง€ ์•Š์Œ, ๊ฐ ํ–‰์— '์ „๋‹ฌ' ์ฒดํฌ๋ฐ•์Šค">
89
+ </p>
90
+
91
+ | ๊ตฌ์—ญ | ๊ด€๋ฆฌ ๋‚ด์šฉ |
92
+ |------|-----------|
93
+ | **ๆŽฅๅ…ฅ** | `web_search` / `web_fetch` seam ์ „ํ™˜. ์—”์ง„ ์‹คํ–‰ ๋ช…๋ น๊ณผ ์ธ์ž(npx ๋˜๋Š” ๋กœ์ปฌ `mcp_server.py`). ๊ฒ€์ƒ‰/๊ธ๊ธฐ ํƒ€์ž„์•„์›ƒ, ๋ณธ๋ฌธ ์ƒํ•œ, ์œ ํœด ์—ฐ๊ฒฐ ํšŒ์ˆ˜, ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜ |
94
+ | **๋„๊ตฌ** | 18๊ฐœ ๋„ค์ดํ‹ฐ๋ธŒ 1๊ธ‰ ๋„๊ตฌ ์ฒดํฌ(๊ธฐ๋ณธ์€ `argo_search` / `argo_fetch`๋งŒ). ๋‹จ๋ฐœ ํ˜ธ์ถœ ํƒ€์ž„์•„์›ƒ๊ณผ ๋ฐ˜ํ™˜ ํ…์ŠคํŠธ ์ƒํ•œ |
95
+ | **ๅผ•ๆ“Ž** | argo ๋ณธ์ฒด์˜ ๋™์ž‘ ์Šค์œ„์น˜(๊ธฐ์กด์—๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ํ๋ ˆ์ด์…˜๋œ ํ—ˆ์šฉ ๋ชฉ๋ก 28๊ฐœ: ์บ์‹œ / TF-IDF ์žฌ์ˆœ์œ„ / ์ˆ˜์น˜ ๊ต์ฐจ ๊ฒ€์ฆ / MinHash ์ค‘๋ณต ์ œ๊ฑฐ / SERP ๊ฐ€๋“œ, Jina / ๋ชจ๋ฐ”์ผ UA / Parallel ๊ธ๊ธฐ ๊ณ„์ธต, ์˜๋ฏธ ์ฆ๊ฑฐ ๊ณ„์ธต, ํ—ค์ง€ ์—ฌ์œ ์™€ ๊ผฌ๋ฆฌ ํญ, ์—”์ง„ ํ™œ์„ฑํ™” ๋ชฉ๋ก, ํ”„๋ก์‹œ, ๋กœ์ปฌ ๊ฒ€์ƒ‰ ๋ฃจํŠธ์™€ ์ฝ๊ธฐ ํ—ˆ์šฉ ๋ชฉ๋ก, ์›œ์—… / ์‚ฌ์šฉ ๋กœ๊ทธ / ์—ฐ๊ฒฐ ํ’€ / ๊ฐ์ข… TTL). ์Šค์œ„์น˜๋ฅ˜๋Š” ์ฆ‰์‹œ ๋ฐ˜์˜, ์ˆซ์žยทํ…์ŠคํŠธยท๋ชฉ๋ก๋ฅ˜๋Š” ๊ทธ๋ฃน ์ €์žฅ. ๋ฏธ์„ค์ • ํ–‰์€ argo ๊ธฐ๋ณธ๊ฐ’์„ ํ‘œ์‹œํ•˜๊ณ  "้ป˜่ฎค"๋กœ ํ‘œ๊ธฐ. ์ธ๊ฐ€ ๊ณ„์—ด ์Šค์œ„์น˜(์žฌ๊ณ„์‚ฐ ์‹คํ–‰, ์ธํŠธ๋ผ๋„ท URL)๋Š” ์˜๋„์ ์œผ๋กœ ํŒจ๋„์— ๋„ฃ์ง€ ์•Š์Šต๋‹ˆ๋‹ค |
96
+ | **ๅฏ†้’ฅ** | ์ฃผ์š” ์—”์ง„ ํ‚ค์˜ ์ž…๋ ฅยท๊ฐฑ์‹ ยท์‚ญ์ œ. "์„ค์ •๋จ / ๋ฏธ์„ค์ • + ์ถœ์ฒ˜ ๊ณ„์ธต(ๅ‡ญ่ฏๅบ“ / ์‹œ์ž‘ ํ™˜๊ฒฝ / .env) + ์ฝ๊ธฐ ์ „์šฉ ์ƒํƒœ"๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ํ‰๋ฌธ์€ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ ํ–‰์˜ "์ „๋‹ฌ" ์ฒดํฌ๋Š” ์ฐธ์กฐ ์ด๋ฆ„์„ `keyRefs`์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค |
97
+ | **็ ”็ฉถ** | worker / ํŠธ๋ž™ / ํŠธ๋ž™๋‹น ์ถœ์ฒ˜ / ํ† ํฐ ์ƒํ•œ๊ณผ ๋ณด๊ณ ์„œ ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ |
98
+ | **้ซ˜็บง** | worker ๋„๊ตฌ allow / deny ๋ชฉ๋ก, ๅ‡ญ่ฏ ์ „๋‹ฌ ๋ชฉ๋ก |
99
+
100
+ ์ €์žฅ์€ ์ฆ‰์‹œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค(๋ชจ๋‘ volatile ์„ค์ •): ๋„ค์ดํ‹ฐ๋ธŒ ๋„๊ตฌ ์„ธํŠธ๋Š” ์ฒดํฌ์— ๋”ฐ๋ผ ๋“ฑ๋กยทํ•ด์ œ๋˜๊ณ , ํƒ€์ž„์•„์›ƒยท๋™์‹œ์„ฑยท์—ฐ๊ตฌ ์ƒํ•œ์€ ๋‹ค์Œ ํ˜ธ์ถœ ๋•Œ ์ฝํž™๋‹ˆ๋‹ค. ์—”์ง„ ์Šค์œ„์น˜๋Š” `argoEnv`(ํ•œ ์ค„์— ํ•˜๋‚˜์˜ `KEY=VALUE`)๋กœ argo ์„œ๋ธŒํ”„๋กœ์„ธ์Šค env์— ๋“ค์–ด๊ฐ€ ๋‹ค์Œ ์‹ ๊ทœ ์—ฐ๊ฒฐ๋ถ€ํ„ฐ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค(ํ’€์˜ ์˜ค๋ž˜๋œ ์—ฐ๊ฒฐ์€ `searchIdleMs`๋กœ ํšŒ์ˆ˜, ๊ธฐ๋ณธ 60์ดˆ). ๊ตฌ์กฐ์  ํ•„๋“œ(`toolName`, `provider`, `searchProviderId`, `fetchProviderId`)๋Š” ์„ค์ • ํŽ˜์ด์ง€์— ์—†๊ณ  ์—ฌ์ „ํžˆ profile patch๋ฅผ ๊ฑฐ์น˜๋ฏ€๋กœ ๋ณ€๊ฒฝ ํ›„ ์žฌ์‹œ์ž‘์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
101
+
102
+ **ํ‚ค ๋ณด์•ˆ**: ํ‚ค๋Š” DSH ๅ‡ญ่ฏๅบ“(Models ํŽ˜์ด์ง€์™€ ๊ฐ™์€ ๊ณณ)์— ์“ฐ์ด๋ฉฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •์—๋Š” ์“ฐ์ด์ง€ ์•Š๊ณ , ๋กœ๊ทธ์—๋„ ๋‚จ์ง€ ์•Š์œผ๋ฉฐ ํ‰๋ฌธ๋„ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๅ‡ญ่ฏ ํ•ด์„ ์šฐ์„ ์ˆœ์œ„๋Š” **์ €์žฅ ํŒŒ์ผ ๊ณ„์ธต > ์‹œ์ž‘ ํ™˜๊ฒฝ > ํ”„๋กœ์ ํŠธ .env > ํ™ˆ .env**์ด๋ฉฐ, ํŒจ๋„(๋˜๋Š” Models ํŽ˜์ด์ง€)์—์„œ ์ €์žฅํ•˜๋ฉด ์‹œ์ž‘ ํ™˜๊ฒฝ์˜ ์˜ค๋ž˜๋œ ๊ฐ’์„ ๋ฎ์–ด์“ฐ๊ณ  argo ์„œ๋ธŒํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ ์‹ ๊ทœ ์—ฐ๊ฒฐ์—์„œ ์ƒˆ ํ‚ค๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. "์‚ญ์ œ"๋Š” ๅ‡ญ่ฏๅบ“ ๊ฐ’๋งŒ ์ง€์šฐ๋ฏ€๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋‚˜ `.env`๊ฐ€ ์ œ๊ณตํ•œ ํ‚ค๋Š” ๋‹ค์‹œ ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค. ์„ค์ • ํŽ˜์ด์ง€๋Š” ๅ‡ญ่ฏ ๋„๋ฉ”์ธ์˜ ์“ฐ๊ธฐ ์ž…๊ตฌ์ผ ๋ฟ์ด๋ฉฐ, ์ฝ๊ธฐ๋Š” ํ˜ธ์ŠคํŠธ๊ฐ€ ๋งค ํ˜ธ์ถœ ๋•Œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
103
+
104
+ **DeepSeek ๊ณต์‹ ํ‚ค๋Š” ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ๊ณต๊ธ‰**: argo์˜ `deepseek_search` ์—”์ง„(๊ณต์‹ `api.deepseek.com/v1/tools/search`, ๊ฒฐ๊ณผ์— authority ๊ถŒ์œ„ ๋“ฑ๊ธ‰ / rerank_score / ๊ฒŒ์‹œ ์‹œ๊ฐ์ด ๋ถ™์Œ)์€ DSH ๊ณต์‹ ๊ฒ€์ƒ‰ ๋ฐฑ์—”๋“œ์™€ **๊ฐ™์€ ํ‚ค๋ฅผ ๊ณต์œ **ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ DSH ๋„ค์ดํ‹ฐ๋ธŒ ๅ‡ญ่ฏ seam์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ ์ˆ˜๋™ ์„ค์ •์ด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. ํ•ด์„์€ `ctx.get('credentials').resolve('DEEPSEEK_API_KEY')`๋กœ ํ˜ธ์ถœ๋งˆ๋‹ค ์ด๋ฃจ์–ด์ง€๋ฉฐ, web Models ํŽ˜์ด์ง€์—์„œ ํ‚ค๋ฅผ ๊ต์ฒดํ•˜๋ฉด ๋‹ค์Œ ์‹ ๊ทœ ์—ฐ๊ฒฐ์—์„œ ๋ฐ˜์˜๋˜๊ณ  ํ”Œ๋Ÿฌ๊ทธ์ธ ์žฌ์‹œ์ž‘๋„ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํ‚ค ํŒŒ์ผ์„ ์ฝ์ง€ ์•Š๊ณ , ๋””์Šคํฌ์— ์“ฐ์ง€ ์•Š์œผ๋ฉฐ, ๋กœ๊ทธ์—๋„ ๋‚จ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ‚ค ๊ฐ’์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ†ตํ•ด์„œ๋งŒ argo ์„œ๋ธŒํ”„๋กœ์„ธ์Šค env์— ๋“ค์–ด๊ฐ€๋ฉฐ ์ถœ๋ ฅ์ด๋‚˜ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์— ์ผ์ ˆ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. credentials ์„œ๋น„์Šค๊ฐ€ ์—†๋Š” ๊ตฌํ˜• ํ˜ธ์ŠคํŠธ์—์„œ๋Š” ์กฐ์šฉํžˆ ๊ฑด๋„ˆ๋›ฐ๊ณ , ํ•ด๋‹น ์—”์ง„์€ ํ‚ค ๋ถ€์กฑ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜๋ฉฐ ๋‚˜๋จธ์ง€ 263๊ฐœ ์†Œ์Šค๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
105
+
106
+ **web seam pin์€ ํ•„์ˆ˜ ์ฝ๊ธฐ์ž…๋‹ˆ๋‹ค**(์„ค์ • ๋ˆ„๋ฝ ์‹œ `web_fetch`๊ฐ€ ๊นจ์ง‘๋‹ˆ๋‹ค): ํ˜ธ์ŠคํŠธ `dsh-web`์˜ ํ”„๋กœ๋ฐ”์ด๋” ์„ ํƒ ๊ทœ์น™์€ "์„ค์ •๋œ id๊ฐ€ ์šฐ์„ . ๋ฏธ์„ค์ •์ด๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅ์ด ์ •ํ™•ํžˆ ํ•˜๋‚˜๋ฉด ๊ทธ๊ฒƒ์„ ๊ณ ๋ฆ„. **์—ฌ๋Ÿฌ ๊ฐœ๋ฉด `WEB_PROVIDER_AMBIGUOUS`๋กœ ์‹คํŒจ**". web profile์€ ๊ธฐ๋ณธ์œผ๋กœ ๊ณต์‹ http fetch ํ”„๋กœ๋ฐ”์ด๋”(key ๋ถˆํ•„์š”, ํ•ญ์ƒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์ด ๋ฒˆ๋“ค์ด ํ•˜๋‚˜๋ฅผ ๋” ๋“ฑ๋กํ•˜๋ฏ€๋กœ, pin์ด ์—†์œผ๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅ์ด ๋‘ ๊ฐœ๊ฐ€ ๋˜์–ด **`web_fetch`๊ฐ€ ํ†ต์งธ๋กœ ๊นจ์ง‘๋‹ˆ๋‹ค**(profile์— ๋‹ค๋ฅธ ๊ฒ€์ƒ‰ ํ”„๋กœ๋ฐ”์ด๋”๊ฐ€ ์žˆ์œผ๋ฉด `web_search`๋„ ๋งˆ์ฐฌ๊ฐ€์ง€). ๋”ฐ๋ผ์„œ web seam์„ ํ™œ์„ฑํ™”ํ•œ profile์€ ๋ฐ˜๋“œ์‹œ web ์„œ๋น„์Šค ์ค„์— ๋ช…์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:
107
+
108
+ ```yaml
109
+ - id: web
110
+ config:
111
+ searchProvider: argo # ๊ฒ€์ƒ‰ seam์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ(๊ธฐ๋ณธ ํ™œ์„ฑ) ํ•„์ˆ˜
112
+ fetchProvider: argo # ๊ธ๊ธฐ seam์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ(๊ธฐ๋ณธ ํ™œ์„ฑ) ํ•„์ˆ˜
113
+ ```
114
+
115
+ `searchProviderEnabled: false` / `fetchProviderEnabled: false`๋Š” ํ•ด๋‹น seam์„ ํ†ต์งธ๋กœ ๋•๋‹ˆ๋‹ค(ํ”„๋กœ๋ฐ”์ด๋”๋Š” ๋“ฑ๋ก๋œ ์ฑ„๋กœ ๋‚จ์ง€๋งŒ ์„ ํƒ ๋ถˆ๊ฐ€, ๋‹ค๋ฅธ ์ชฝ์—๋Š” ์˜ํ–ฅ ์—†์Œ). ์—”์ง„ ์ชฝ์—์„œ๋Š” Firecrawl ๊ฐ™์€ ์ต๋ช… ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—”์ง„์ด **ํ‚ค ์—†์ด ๊ทธ๋Œ€๋กœ ์“ธ ์ˆ˜ ์žˆ๊ณ **(๋ฌด๋ฃŒ ๊ณ„์ธต ํ• ๋‹น๋Ÿ‰), ํ‚ค๊ฐ€ ์„ค์ •๋œ ์—”์ง„์€ ์ž๋™์œผ๋กœ ์ธ์ฆ ์š”์ฒญ์œผ๋กœ ์Šน๊ฒฉ๋˜๋ฉฐ ํ‚ค ๋ถ€์กฑ์€ ๋ผ์šฐํŒ…์„ ๋ง‰์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
116
+
117
+ > ์ „์ฒด ์„ค์ • ํ•ญ๋ชฉ, Compatibility ๋ฒ„์ „ ๋Œ€์‘ํ‘œ, ์ œ๊ฑฐ ์ ˆ์ฐจ๋Š” [packages/dsh-plugin/README.md](packages/dsh-plugin/README.md)์— ์žˆ์Šต๋‹ˆ๋‹ค.
118
+
119
+ ## ํ•ต์‹ฌ ๊ฐ•์ 
120
+
121
+ **264๊ฐœ ์†Œ์Šค, ๊ทธ์ค‘ 227๊ฐœ๋Š” ํ‚ค ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉ.** API Key๋ฅผ ํ•˜๋‚˜๋„ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ๋Œ์•„๊ฐ€๊ณ , ๋ฌด๋ฃŒ ์—”์ง„๊ณผ ๋กœ์ปฌ ์—”์ง„์ด ์ž๋™์œผ๋กœ ๋ณด๋ฃจ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค๊ฐ€ ์žˆ๋Š” ์†Œ์Šค๋Š” ๋ณดํ†ต ๋” ์ข‹๊ณ , ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ์„ค์น˜๋กœ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ปค๋ฒ„ํ•ฉ๋‹ˆ๋‹ค.
122
+
123
+ **๋กœ์ปฌ ๊ฒ€์ƒ‰ + ๋„คํŠธ์›Œํฌ ๊ฒ€์ƒ‰ ์ผ์ฒด.** Argo๋งŒ์˜ ๋Šฅ๋ ฅ์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ ํŒŒ์ผ ๊ฒ€์ƒ‰์˜ ๋ฐ‘๋ฐ”ํƒ•์€ rg, mdfind ๊ฐ™์€ ๊ฐœ๋ฐœ์ž ์ผ์ƒ ๋„๊ตฌ๋กœ, ์ฝ”๋“œ ์‹ฌ๋ณผยทํŒŒ์ผ๋ช…ยท๋ฌธ์„œ ์ „๋ฌธยทํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์Šค์œ„์น˜ ํ•˜๋‚˜๋ฉด ๋กœ์ปฌ ์ ์ค‘์ด ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ํ•ฉ์ณ์ง€๊ณ , ๊ฒฐ๊ณผ์—๋Š” ์ถœ์ฒ˜๊ฐ€ ๋กœ์ปฌ ํŒŒ์ผ์ด๋ผ๊ณ  ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ธ€์„ ์“ฐ๋‹ค๊ฐ€ ๋ฐ˜๋…„ ์ „์— ์ ์–ด ๋‘” ๋ฌธ๋‹จ์ด ๊ธฐ์–ต๋‚˜๋Š”๋ฐ ์–ด๋””์— ์žˆ๋Š”์ง€ ๋ชจ๋ฅผ ๋•Œ, ํด๋”๋ฅผ ๋’ค์ง€๋Š” ๊ฒƒ๋ณด๋‹ค ์ด ๊ฒ€์ƒ‰์ด ๋น ๋ฆ…๋‹ˆ๋‹ค.
124
+
125
+ **์ด์ค‘ ์บ์‹œ, ํ•ซ ์ฟผ๋ฆฌ ์•ฝ 10ms.** ์‹œ์˜์„ฑ์ด ์•ฝํ•œ ์ฝ˜ํ…์ธ (๋ฐฑ๊ณผ๋ฅ˜, ์—ญ์‚ฌ ๋ฐ์ดํ„ฐ ๋“ฑ)๋Š” ์ฒซ ์กฐํšŒ ํ›„ ์บ์‹œ์— ๋“ค์–ด๊ฐ€๊ณ , ๊ฐ™์€ ์ฟผ๋ฆฌ๋Š” ๋ฐ”๋กœ ์ ์ค‘ํ•ด ๋งค๋ฒˆ API๋ฅผ ๋‹ค์‹œ ํƒ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋น„์šฉ๋„ ์‹œ๊ฐ„๋„ ์•„๋‚๋‹ˆ๋‹ค.
126
+
127
+ **๋‹ค๊ตญ์–ด + ์ˆ˜์ง ์‹œ๋‚˜๋ฆฌ์˜ค.** 18๊ฐœ ์–ธ์–ด๋ฅผ ์‹ค์ธกํ–ˆ๊ณ , ์ค‘๊ตญ์–ดยท์˜์–ดยท์ผ๋ณธ์–ด๋Š” ํ˜„์ง€ 1์ฐจ ์†Œ์Šค๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋…ผ๋ฌธ์€ ํ•™์ˆ  DB, ์˜ํ™”๋Š” ์ž‘ํ’ˆ DB, ์ฝ”๋“œ๋Š” Q&A ์ปค๋ฎค๋‹ˆํ‹ฐ, ์‹œ์„ธ๋Š” ๊ธˆ์œต ์†Œ์Šค๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋‘๋ฃจ๋ญ‰์ˆ ํ•œ ์งˆ๋ฌธ๋งŒ ์ผ๋ฐ˜ ๊ฒ€์ƒ‰์œผ๋กœ ๊ฐ‘๋‹ˆ๋‹ค.
128
+
129
+ ## ์„ค์น˜ํ•˜๋ฉด ๋ฐ”๋กœ ์‚ฌ์šฉ
130
+
131
+ ์„ค์ • ์—†์ด ๋ฐ”๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ์„ค์น˜ ๋ฐฉ๋ฒ• ์„ธ ๊ฐ€์ง€, ์ทจํ–ฅ๋Œ€๋กœ ๊ณ ๋ฅด์„ธ์š”:
132
+
133
+ **AI ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ ์Šค์Šค๋กœ ๊ฒ€์ƒ‰ํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด**, ์Šคํ‚ฌ ํŒจํ‚ค์ง€๋ฅผ ๊ทธ ์Šคํ‚ฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋„ฃ์œผ์„ธ์š”. ์ดํ›„ ใ€Œ์ข€ ์ฐพ์•„๋ดใ€ใ€Œํ™•์ธํ•ด๋ดใ€๋ผ๊ณ  ํ•˜๋ฉด ์•Œ์•„์„œ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
134
+
135
+ **๊ฐ€๋ณ๊ฒŒ ์‹œํ—˜ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด**, npx ๋ช…๋ น ํ•œ ์ค„๋กœ ์„ค์น˜ ์—†์ด ๋ฐ”๋กœ ์”๋‹ˆ๋‹ค.
136
+
137
+ **์–ด์‹œ์Šคํ„ดํŠธ์— ์ƒ์ฃผ์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด**, MCP๋ฅผ ๋ถ™์ด๋ฉด 19๊ฐœ ๊ฒ€์ƒ‰ ๋„๊ตฌ๋ฅผ ์–ธ์ œ๋“  ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํด๋ฆญ ์ฃผ์ž… ๋ช…๋ น๋„ ์žˆ์–ด Claude Code, Cursor, Windsurf์— ์ž๋™์œผ๋กœ ์„ค์ •ํ•ด ์ฃผ๋ฉฐ, Codex, OpenCode, Cline๋„ ์ด ๋ชฉ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •์„ ์“ฐ๊ธฐ ์ „์— ๋ฐฑ์—…ํ•˜๋ฏ€๋กœ ์–ธ์ œ๋“  ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
138
+
139
+ ```bash
140
+ # ๋ฐฉ์‹ 1: ์›ํด๋ฆญ ์Šคํฌ๋ฆฝํŠธ(๋กœ์ปฌ ์žฅ๊ธฐ ์‚ฌ์šฉ ๊ถŒ์žฅ)
141
+ curl -fsSL https://raw.githubusercontent.com/taxueseek/argo/main/scripts/install.sh | bash
142
+
143
+ # ๋ฐฉ์‹ 2: npx ์ฆ‰์‹œ ์‚ฌ์šฉ(์—์ด์ „ํŠธ ๋น ๋ฅธ ๋งˆ์šดํŠธ ๊ถŒ์žฅ)
144
+ npx -y github:taxueseek/argo
145
+
146
+ # ๋ฐฉ์‹ 3: git clone(๊ฐœ๋ฐœ / ์†Œ์Šค ์ˆ˜์ •)
147
+ git clone https://github.com/taxueseek/argo.git
148
+ ```
149
+
150
+ ์„ค์น˜ ํ›„ ๋ฐ”๋กœ ํ•œ ๋ฒˆ ์‹œํ—˜:
151
+
152
+ ```bash
153
+ argo search "python asyncio error handling"
154
+ ```
155
+
156
+ StackOverflow ๊ณต์‹ API์—์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ ์ˆ˜๋กœ ์ •๋ ฌ๋˜๊ณ  ์ฑ„ํƒ ์ƒํƒœ๊ฐ€ ํ‘œ์‹œ๋œ ์งˆ๋ฌธ์„ ์ค๋‹ˆ๋‹ค. SEO ํŒœ์ด ์•„๋‹™๋‹ˆ๋‹ค.
157
+
158
+ ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ์ง€๊ธˆ ์“ธ ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, ๋ช…๋ น ํ•œ ์ค„์ด๋ฉด ๋ชฉ๋ก์ด ๋‚˜์˜ต๋‹ˆ๋‹ค:
159
+
160
+ ```bash
161
+ argo search --list-engines
162
+ ```
163
+
164
+ ## ์—ฐ๋™ ํ˜•ํƒœ
165
+
166
+ Argo๋Š” ๋„ค ๊ฐ€์ง€ ์—ฐ๋™ ๋ฐฉ์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋งž๊ฒŒ ๊ณ ๋ฅด์„ธ์š”:
167
+
168
+ | ํ˜•ํƒœ | ์ ํ•ฉ | ์„ค๋ช… |
169
+ |------|------|------|
170
+ | **MCP Server** | ์—์ด์ „ํŠธ ์ƒ์ฃผ ๋งˆ์šดํŠธ | 19๊ฐœ ๊ฒ€์ƒ‰ ๋„๊ตฌ๋ฅผ ์–ธ์ œ๋“  ์‚ฌ์šฉ, ๋ช…๋ น ํ•œ ์ค„๋กœ Claude Code / Cursor / Windsurf / Codex / OpenCode / Cline์— ์ฃผ์ž…, ์„ค์ • ์ž‘์„ฑ ์ „ ์ž๋™ ๋ฐฑ์—… |
171
+ | **DSH ํ”Œ๋Ÿฌ๊ทธ์ธ** | DeepSeek Harness ์‚ฌ์šฉ์ž | `dsh plugin add` ํ•œ ์ค„๋กœ ์„ค์น˜, ๊ฒ€์ƒ‰๊ณผ ๊ธ๊ธฐ๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ 1๊ธ‰ ๋„๊ตฌ๊ฐ€ ๋˜์–ด MCP ์—ฐ๊ฒฐ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์ƒ์ฃผ ์ปจํ…์ŠคํŠธ๋„ ์ฐจ์ง€ํ•˜์ง€ ์•Š์Œ. ์ €์žฅ ์ฆ‰์‹œ ์ ์šฉ๋˜๋Š” 6๊ฐœ ๊ตฌ์—ญ ์„ค์ • ํŽ˜์ด์ง€ ๋‚ด์žฅ |
172
+ | **Skill ํŒŒ์ผ** | Claude Code / Grok Build / Kimi ๋“ฑ | ์Šคํ‚ฌ ํŒจํ‚ค์ง€๋ฅผ ์—์ด์ „ํŠธ์˜ ์Šคํ‚ฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋„ฃ์œผ๋ฉด ใ€Œ์ข€ ์ฐพ์•„๋ดใ€ใ€Œํ™•์ธํ•ด๋ดใ€์— ์•Œ์•„์„œ ๊ฒ€์ƒ‰ |
173
+ | **npx ์ฆ‰์‹œ ์‚ฌ์šฉ** | ๋น ๋ฅด๊ฒŒ ์‹œํ—˜ | `npx -y github:taxueseek/argo`, ์„ค์น˜ ์—†์ด ์ž„์‹œ๋กœ ์•„๋ฌด ํด๋ผ์ด์–ธํŠธ์— MCP๋ฅผ ๋ถ™์ด๊ธฐ ์ข‹์Œ |
174
+
175
+ ๋„ค ๊ฐ€์ง€ ํ˜•ํƒœ์˜ ๋ฐ‘๋ฐ”ํƒ•์€ ๊ฐ™์€ Python ์ฝ”๋“œ์ด๋ฉฐ, CLI์™€ MCP ๋„๊ตฌ๋Š” ์ผ๋Œ€์ผ๋กœ ๋Œ€์‘ํ•˜๋ฏ€๋กœ ์–ด๋А ํ˜•ํƒœ๋กœ ์„ค์น˜ํ•ด๋„ ๋Šฅ๋ ฅ์ด ๋น ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
176
+
177
+ ## ๋ชจ๋ธ ๋‚ด์žฅ ๊ฒ€์ƒ‰ / AI ๊ฒ€์ƒ‰ / ๋ฉ”ํƒ€๊ฒ€์ƒ‰๋ณด๋‹ค ๊ฐ•ํ•œ ์ 
178
+
179
+ > ๊ฐ„๋‹จํžˆ: ์•ž์˜ ์„ธ ๊ฐ€์ง€๋Š” **์‚ฌ๋žŒ**์ด ์ •๋ณด๋ฅผ ์ฐพ๊ฒŒ ๋•์Šต๋‹ˆ๋‹ค. Argo๋Š” **์—์ด์ „ํŠธ**๊ฐ€ ๊ฒ€์ƒ‰๊ณผ ๊ฒ€์ฆ์„ ํ•œ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ฐจ์ด๋Š” UI๊ฐ€ ์•„๋‹ˆ๋ผ ์‚ฐ์ถœ๋ฌผ โ€” ์‚ฌ๋žŒ์šฉ ์š”์•ฝ ํŽ˜์ด์ง€ยท๋งํฌ ๋ชฉ๋ก ๋Œ€, ์—์ด์ „ํŠธ๊ฐ€ ์ •๋ ฌํ•˜๊ณ  `fetch`๋กœ ์žฌํ™•์ธํ•˜๊ณ  ์ปจํ…์ŠคํŠธ๋ฅผ ์•ˆ ํ„ฐ๋œจ๋ฆฌ๋Š” ์ฆ๊ฑฐ.
180
+
181
+ <p align="center">
182
+ <img src="assets/readme/why-better.svg" width="100%" alt="์™ผ์ชฝ: ์‚ฌ๋žŒ์šฉ ๊ธฐ๋ณธ ๊ฒ€์ƒ‰ ์„ธ ๊ฐ€์ง€. ์˜ค๋ฅธ์ชฝ: ์—์ด์ „ํŠธ๊ฐ€ ํก์ˆ˜ํ•  Argo ์ฆ๊ฑฐ JSON">
183
+ </p>
184
+
185
+ | ์ฐจ์› | ๋ชจ๋ธ ๋‚ด์žฅ ๊ฒ€์ƒ‰ | AI ๊ฒ€์ƒ‰(์š”์•ฝํ˜•) | ๋ฉ”ํƒ€๊ฒ€์ƒ‰ / ๊ฒ€์ƒ‰ ์—”์ง„ | **Argo** |
186
+ |------|----------------|-----------------|----------------------|----------|
187
+ | ๊ฒฐ๊ณผ ํ˜•ํƒœ | ์ด์–ด ๋ถ™์ธ ์žฅ๋ฌธ | ์‚ฌ๋žŒ์šฉ ์š”์•ฝ ํŽ˜์ด์ง€ | SERP ๋งํฌ ๋ชฉ๋ก | **์••์ถ• JSON: ์ฆ๊ฑฐ ํ›„๋ณด + ์‹ ๋ขฐ๋„ ๋ถ„ํ•ด** |
188
+ | ์ˆ˜์ง ์งˆ๋ฌธ(์‹œ์„ธ / ํ™”ํ•™์‹) | ์ผ๋ฐ˜ ์›น | ์ผ๋ฐ˜ ์›น ํ›„ ์š”์•ฝ | ์ผ๋ฐ˜ ์›น | **์ˆ˜์ง ์†Œ์Šค ์ง๊ฒฐ, ๋‹ตํ˜• ๊ฒฐ๊ณผ** |
189
+ | ์ฆ๊ฑฐ ์‹ ๋ขฐ๋„ | ์ ์ˆ˜ ์—†์Œ | ๊ตฌ์กฐํ™” ์ ์ˆ˜ ์—†์Œ | ์ ์ˆ˜ ์—†์Œ | **selection ยท absorption ยท freshness ยท ํ•ฉ์˜** |
190
+ | ๋ฐ˜๋ณต ์งˆ์˜ | ๋งค๋ฒˆ ๋„คํŠธ์›Œํฌ | ๋งค๋ฒˆ ๋„คํŠธ์›Œํฌ | ํŽ˜์ด์ง€ ์บ์‹œ | **์ด์ค‘ ์บ์‹œ(๋ฉ”๋ชจ๋ฆฌ + SQLite), ํ•ซ ์ฟผ๋ฆฌ ์•ฝ 10ms** |
191
+ | ๋น„์šฉ ์ œ์–ด | ์ œ์–ด ๋ถˆ๊ฐ€ | ํ˜ธ์ถœ๋‹น ๋น„์Œˆ | ๋ฌด๋ฃŒ์ง€๋งŒ ์ˆ˜๊ณ  | **์˜ˆ์‚ฐ ๋ชจ๋“œ, ๋ฌด๋ฃŒ ์šฐ์„ , ํ‚ค๋Š” ๋ชจ๋‘ ์„ ํƒ** |
192
+ | ๋‹ค๊ตญ์–ด | ๋ชจ๋ธ์„ ๋”ฐ๋ฆ„ | ๋ชจ๋ธ์„ ๋”ฐ๋ฆ„ | ์—”์ง„์„ ๋”ฐ๋ฆ„ | **์–ธ์–ด ๊ฐ์ง€ + ์—”์ง„ ๋กœ์ผ€์ผ ํŒŒ๋ผ๋ฏธํ„ฐ + ๋‹ค๊ตญ์–ด ๋ผ์šฐํŒ…** |
193
+
194
+ > ๋ฉ”์ปค๋‹ˆ์ฆ˜์ƒ Argo๋Š” ๊ฒ€์ƒ‰์„ **์ฆ๊ฑฐ ํŒŒ์ดํ”„๋ผ์ธ**์œผ๋กœ ๋‹ค๋ฃน๋‹ˆ๋‹ค: ์–ธ์–ด ๊ฐ์ง€ โ†’ ๋„๋ฉ”์ธ ๋ผ์šฐํŠธ โ†’ ๋‹ค์ค‘ ์—”์ง„ ํšŒ์ˆ˜ โ†’ RRF ์œตํ•ฉ โ†’ ์ฆ๊ฑฐ ์†ํ‰. ์—์ด์ „ํŠธ๊ฐ€ ์ •๋ ฌํ•˜๊ณ , `fetch`๋กœ ํ™•์ธํ•˜๊ณ , ์ปจํ…์ŠคํŠธ ์•ˆ์— ๋„ฃ์„ ์žฌ๋ฃŒ๋ฅผ ์ค๋‹ˆ๋‹ค.
195
+
196
+ ---
197
+
198
+ ## 2026๋…„ ๊ฒ€์ƒ‰์—์„œ ๋ฐ”๋€ ๊ฒƒ
199
+
200
+ 1. **๋งํฌ์—์„œ ์ฆ๊ฑฐ๋กœ.** ์—์ด์ „ํŠธ๋Š” ์ •๋ ฌยท๊ฒ€์ฆ ๊ฐ€๋Šฅํ•˜๊ณ  ์ปจํ…์ŠคํŠธ์— ๋งž๋Š” ๊ตฌ์กฐํ™” ์ž๋ฃŒ๊ฐ€ ํ•„์š” โ€” Argo๋Š” ์‹ ๋ขฐ๋„ ๋ถ„ํ•ด JSON์„ ๋ฐ˜ํ™˜.
201
+ 2. **์ปจํ…์ŠคํŠธ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๋น„์šฉ.** ์—์ด์ „ํŠธ ํ”„๋กœํ•„์€ ํšŒ๋‹น ์•ฝ 3.7KB, ํ•„๋“œ์™€ ๋ฐ”์ดํŠธ ์˜ˆ์‚ฐ์€ ๊ฒŒ์ดํŠธ๋กœ ๊ณ ์ •.
202
+ 3. **์‚ฌ์ดํŠธ๋“ค์ด AI์šฉ ์ฝ˜ํ…์ธ ๋ฅผ ์ค€๋น„.** llms.txt์™€ `.md` ์ง์ ‘ ์ถœ๋ ฅ์ด ํ™•์‚ฐ โ€” fetch ์ฒด์ธ์ด ๋ ˆ๋ฒจ 0์—์„œ ์ž๋™ ํƒ์ง€, r.jina.ai ๋ฆฌ๋”๊ฐ€ fallback.
203
+ 4. **๋ฌด๋ฃŒ ์˜คํ”ˆ ์ƒํƒœ๊ณ„๋กœ ์ถฉ๋ถ„.** ์ •๋ถ€ยทํ•™์ˆ ยทํ‘œ์ค€ยท๋ณด์•ˆ ๊ณต๊ฐœ API์™€ ํ‚ค๋ฆฌ์Šค ์—”์ง„์ด ๋Œ€๋ถ€๋ถ„ ๋„๋ฉ”์ธ์„ ์ปค๋ฒ„ (๋ฌด์„ค์ • 227๊ฐœ).
204
+ 5. **ํ’ˆ์งˆ์€ ์ธก์ • ๊ฐ€๋Šฅ.** ๋žญํ‚น ๊ณจ๋“  ํ”Œ๋กœ์–ด, ์œตํ•ฉ ์ด๋“ ์–ด๋ธ”๋ ˆ์ด์…˜ ๊ฒŒ์ดํŠธ, ์Œ์˜ ๋ผ์šฐํŒ… ์ œ์–ด.
205
+
206
+ > v2.9.3์€ ์ด ๋ชจ๋‘๋ฅผ ๊ตฌํ˜„: 264 ์†Œ์Šค / 95 ๋„๋ฉ”์ธ / 227 ๋ฌด์„ค์ •.
207
+
208
+ ---
209
+
210
+ ## ์งˆ๋ฌธ ํ˜•ํƒœ์— ๋งž๋Š” ๋ผ์šฐํŒ…
211
+
212
+ <p align="center">
213
+ <img src="assets/readme/proof-routes.svg" width="100%" alt="๋„ค ๊ฐ€์ง€ ์‹ค์ œ ๊ฒฝ๋กœ: ๊ธˆ์œต, ์˜ํ™”, ๋‹ค๊ตญ์–ด, ์ง€๋ฆฌ">
214
+ </p>
215
+
216
+ | ์ด๋ ‡๊ฒŒ ๋ฌผ์œผ๋ฉด | ๋Œ€๊ฐœ ์ผ์–ด๋‚˜๋Š” ์ผ |
217
+ |---------|----------------------|
218
+ | python asyncio error handling | ์ฝ”๋”ฉ QA ๋„๋ฉ”์ธ โ†’ StackOverflow/StackExchange ๊ณต์‹ API, ์ ์ˆ˜ยท์ฑ„ํƒ ๋งˆ์ปค ํฌํ•จ |
219
+ | AAPL / US pre-market | ๋ฏธ๊ตญ ์ฃผ์‹ ๋„๋ฉ”์ธ, A์ฃผ์™€ ๋ถ„๋ฆฌ |
220
+ | ่‚–็”ณๅ…‹็š„ๆ•‘่ตŽ ไธปๆผ” / Inception director | ์˜ํ™” ๋„๋ฉ”์ธ โ†’ IMDb ๋“ฑ |
221
+ | ๆข…่ฅฟ ไฟฑไน้ƒจ / ๅบ“้‡Œ ็ƒ้˜Ÿ | ์Šคํฌ์ธ  ๋„๋ฉ”์ธ โ†’ TheSportsDB ๋“ฑ |
222
+ | ๅŸƒ่ฒๅฐ”้“ๅก”ๅœจๅ“ช / where is Eiffel Tower | ์ง€๋ฆฌ ์—”ํ‹ฐํ‹ฐ โ†’ OpenStreetMap ๋“ฑ |
223
+ | NASA founding year / ๅ›ฝๅŠก้™ข่Œ่ƒฝ | ์กฐ์ง ์—”ํ‹ฐํ‹ฐ โ†’ Wikidata ๋“ฑ |
224
+ | ๅ‘จๆฐไผฆ ไธ“่พ‘ / Taylor Swift album | ๋ฏธ๋””์–ด ๋„๋ฉ”์ธ โ†’ iTunes ๋“ฑ |
225
+ | ใ‚ขใƒ‹ใƒก ใŠใ™ใ™ใ‚ / ํ•œ๊ตญ ์˜ํ™” ์ถ”์ฒœ | JA/KO ๊ฐ์ง€ โ†’ ์–ธ์–ด ์นœํ™” ์†Œ์Šค, ์ค‘๊ตญ์–ด ์ „์šฉ ์‚ฌ์ดํŠธ ํšŒํ”ผ |
226
+ | US CPI, ์ผ๋ณธ ์ธํ”Œ๋ ˆ์ด์…˜ | ๋งคํฌ๋กœ ๋„๋ฉ”์ธ, ๊ตญ๊ฐ€ ๋ถ„๋ฆฌ (์ž๊ตญ 1์ฐจ ์†Œ์Šค ์šฐ์„ ) |
227
+ | log4j CVSS / nodejs 22 end of life | ๋ณด์•ˆ โ†’ NVD ๊ณต์‹; ์ˆ˜๋ช…์ฃผ๊ธฐ โ†’ endoflife.date |
228
+ | attention is all you need | ํ•™์ˆ  โ†’ arXiv/OpenAlex/CrossRef ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ DOI ๋งํฌ |
229
+ | ้˜ฟๅธๅŒนๆž— ๅˆ†ๅญๅผ | ํ™”ํ•™ โ†’ PubChem ๊ณ„์—ด ๋‹ต |
230
+ | TSMC valuation debate (deep research) | ํ•˜์œ„ ์งˆ๋ฌธ + ๋ณ‘๋ ฌ ์†Œ์Šค, ์ˆ˜์ง ์†Œ์Šค ๊ฐ€์ค‘ |
231
+
232
+ ---
233
+
234
+ ## ๋™์ž‘ ๋ฐฉ์‹
235
+
236
+ <p align="center">
237
+ <img src="assets/readme/workflow.svg" width="100%" alt="์งˆ์˜ โ†’ ์–ธ์–ดยท๋„๋ฉ”์ธ โ†’ ๋‹ค์ค‘ ์—”์ง„ ํšŒ์ˆ˜ โ†’ RRF โ†’ ์ฆ๊ฑฐ โ†’ ํ†ตํ•ฉ JSON">
238
+ </p>
239
+
240
+ ```
241
+ query
242
+ โ”œโ”€ intent clarify (optional)
243
+ โ”œโ”€ query rewrite (optional; routing still sees original intent)
244
+ โ”œโ”€ language detect + language preference
245
+ โ”œโ”€ route (domain rules + TF-IDF + budget + lang supplements + hot-path cache)
246
+ โ”œโ”€ multi-engine recall (circuit breaker / negative cache / parallel)
247
+ โ”œโ”€ staged empty-result recovery (widen โ†’ same family/general โ†’ cross-lang; anti-pollution)
248
+ โ”œโ”€ RRF fusion + optional re-rank
249
+ โ”œโ”€ evidence skim (authority ยท density ยท freshness ยท consensus)
250
+ โ””โ”€ unified JSON (incl. engine_outcomes / recovery)
251
+ ```
252
+
253
+ ### ์ฆ๊ฑฐ ์ ์ˆ˜ (์š”์•ฝ)
254
+
255
+ ```
256
+ selection โ‰ˆ domain authority; SERP / redirect shells ranked very low
257
+ absorption โ‰ˆ density of numbers / definitions / comparisons / disclosures
258
+ freshness โ‰ˆ publish time (ignores historical comparison years like โ€œsince 2015โ€)
259
+ composite โ‰ˆ 0.40ยทselection + 0.35ยทabsorption + 0.15ยทfreshness + 0.10ยทengine score
260
+ ```
261
+
262
+ ๊ฒฐ๊ณผ์— `selection`, `absorption`, `credibility_fast`, `evidence_flags` ๋“ฑ์ด ํฌํ•จ๋˜์–ด ์—์ด์ „ํŠธ๊ฐ€ ๋ฐ”๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
263
+
264
+ ### ์—์ด์ „ํŠธ ๊ทœ์œจ (๊ถŒ์žฅ)
265
+
266
+ 1. **๊ณ ์œ„ํ—˜ ์งˆ๋ฌธ**(ํฌ์ง€์…˜, ์•ˆ์ „, ใ€Œ์ด๊ฒŒ ์‚ฌ์‹ค์ธ๊ฐ€?ใ€): ๊ฒ€์ƒ‰ โ†’ ๋น ๋ฅธ ์ ์ˆ˜ ํ™•์ธ โ†’ ์ƒ์œ„ ๊ฒฐ๊ณผ `fetch` โ†’ ๊ทธ๋‹ค์Œ ๊ฒฐ๋ก 
267
+ 2. **์ˆซ์ž**: ่ฎก็ฎ—ๆ–นๅผ(์ •์˜ยท๋ฒ”์œ„)์„ ๋ฐํžˆ๊ณ , ์†Œ์Šค๊ฐ€ ์ถฉ๋Œํ•˜๋ฉด ๋‚˜์—ดโ€”์–ต์ง€๋กœ ํ•ฉ์น˜์ง€ ์•Š๊ธฐ
268
+ 3. **SERP / ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ํŽ˜์ด์ง€**: 1์ฐจ ์ถœ์ฒ˜๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๊ธฐ
269
+ 4. **์†Œ์…œ ํฌ์ŠคํŠธ**: ๊ฐ์„ฑ๊ณผ ์„œ์‚ฌ, ์ตœ์ข… ์‚ฌ์‹ค ๊ทผ๊ฑฐ๊ฐ€ ์•„๋‹˜
270
+ 5. **ํŒฉํŠธ์ฒดํฌ**: ์ธต์œ„๋ณ„ ์†Œ์ˆ˜ ์ฟผ๋ฆฌ ์„ ํ˜ธ(์ถœ์ฒ˜ / ๋น„๊ต / ๋Œ€์ƒ)
271
+
272
+ ---
273
+
274
+ ## ๋น ๋ฅธ ์‹œ์ž‘
275
+
276
+ ๊ฒฝ๋กœ๋ฅผ ๊ณ ๋ฅด๋ฉด ๋ฉ๋‹ˆ๋‹ค. **์„ค์น˜ ์ง„์›์€ GitHub๋ฟ์ž…๋‹ˆ๋‹ค**(`npx github:taxueseek/argo` ๋˜๋Š” `install.sh`); ํ˜„์žฌ ๊ถŒ์žฅ **v2.9.7**. **`npm install argo-search`๋Š” ์“ฐ์ง€ ๋งˆ์„ธ์š”** โ€” npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์‚ฌ๋ณธ์€ **๋น„๊ณต์‹ ๋‚ก์€ v1.0.1**(์ด ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹˜, ๊ธฐ๋Šฅ ๋ถ€์กฑ, ๊ฐฑ์‹  ์•ˆ ๋จ). ์ด ํŒจํ‚ค์ง€๋Š” `private: true`๋กœ npm ์˜ค๋ฐฐํฌ๋ฅผ ๋ง‰์Šต๋‹ˆ๋‹ค.
277
+
278
+ **์ œ๋กœ ์„ค์ •์œผ๋กœ ๋™์ž‘**: API ํ‚ค ์—†์ด๋„ ๋ฌด๋ฃŒ ์—”์ง„ + ๋กœ์ปฌ `local_*` ์—”์ง„์ด ๋Œ๊ณ , ํ‚ค ์—†๋Š” ์—”์ง„์€ ์Šคํ‚ต๋ฉ๋‹ˆ๋‹ค(ํ‚ค๊ฐ€ ์žˆ์œผ๋ฉด ๋ณดํ†ต ๋” ์ข‹์Šต๋‹ˆ๋‹ค).
279
+
280
+ ### ์˜ต์…˜ 1: ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ (์žฅ๊ธฐ ๋กœ์ปฌ ์‚ฌ์šฉ์— ์ ํ•ฉ)
281
+
282
+ ```bash
283
+ curl -fsSL https://raw.githubusercontent.com/taxueseek/argo/main/scripts/install.sh | bash
284
+ ```
285
+
286
+ ํ™ˆ ๊ฒฝ๋กœ + Skill ๋งํฌ ์ง€์ •:
287
+
288
+ ```bash
289
+ curl -fsSL https://raw.githubusercontent.com/taxueseek/argo/main/scripts/install.sh \
290
+ | bash -s -- --home "$HOME/.local/share/argo" --link "$HOME/.claude/skills/argo"
291
+ ```
292
+
293
+ ํ™•์ธ:
294
+
295
+ ```bash
296
+ python3 ~/.local/share/argo/scripts/search.py "python asyncio error handling" --json
297
+ python3 ~/.local/share/argo/scripts/search.py --list-engines
298
+ ```
299
+
300
+ ### ์˜ต์…˜ 2: GitHub MCP (์—์ด์ „ํŠธ์— ๋น ๋ฅด๊ฒŒ ๋ถ™์ด๊ธฐ)
301
+
302
+ **Node.js 18+** ์™€ **Python 3.9+** ํ•„์š”. ํ•œ ๋ฒˆ:
303
+
304
+ ```bash
305
+ pip3 install pyyaml
306
+ ```
307
+
308
+ ```bash
309
+ npx -y github:taxueseek/argo
310
+ ```
311
+
312
+ ํด๋ผ์ด์–ธํŠธ ์„ค์ • (Claude Code / Cursor / Kimi ๋“ฑ):
313
+
314
+ ```json
315
+ {
316
+ "mcpServers": {
317
+ "argo": {
318
+ "command": "npx",
319
+ "args": ["-y", "github:taxueseek/argo"]
320
+ }
321
+ }
322
+ }
323
+ ```
324
+
325
+ ๋” ์•ˆ์ •์ ยทNode ๋ถˆํ•„์š”: ์˜ต์…˜ 1๋กœ ์„ค์น˜ ํ›„ ๋กœ์ปฌ Python ์ง€์ •:
326
+
327
+ ```json
328
+ {
329
+ "mcpServers": {
330
+ "argo": {
331
+ "command": "python3",
332
+ "args": ["/path/to/argo/scripts/mcp_server.py"]
333
+ }
334
+ }
335
+ }
336
+ ```
337
+
338
+ ๋น„ํ‘œ์ค€ Python ๊ฒฝ๋กœ: `export ARGO_PYTHON=/path/to/python3` (npx ์ง„์ž…์ ๋งŒ ์ฝ์Œ).
339
+
340
+ ### DeepSeek Harness ํ•œ ์ค„ ํ”Œ๋Ÿฌ๊ทธ์ธ
341
+
342
+ DeepSeek Harness์—๋Š” ๋‘ ๊ฐ€์ง€ ์„ค์น˜:
343
+
344
+ ```bash
345
+ # A: mcp__argo__* ๋„๊ตฌ 19๊ฐœ (๋ฉ”์ธ ํŒจํ‚ค์ง€ bundle, MCP ์ „๋Ÿ‰๊ณผ ๋™์ผ)
346
+ dsh plugin --profile web add "github:taxueseek/argo"
347
+
348
+ # B: ๊ฒ€์ƒ‰ ๋„๊ตฌ + wide_research ๋ณ‘๋ ฌ ์—ฐ๊ตฌ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ (์„œ๋ธŒํŒจํ‚ค์ง€)
349
+ dsh plugin --profile web add "github:taxueseek/argo#main&path:packages/dsh-plugin"
350
+ ```
351
+
352
+ ์„ค์น˜ ํ›„ `dsh web`์„ ์žฌ์‹œ์ž‘. ์ž์„ธํ•œ ๋‚ด์šฉ์€ `packages/dsh-plugin/`.
353
+
354
+ ### ์˜ต์…˜ 3: ๋ฆด๋ฆฌ์Šค tarball
355
+
356
+ [Releases](https://github.com/taxueseek/argo/releases)์—์„œ ์ตœ์‹  **`argo-x.y.z.tar.gz`** ๋‹ค์šด๋กœ๋“œ(`x.y.z`๋Š” ์ตœ์‹  ๋ฆด๋ฆฌ์Šค ๋ฒˆํ˜ธ๋กœ ๋ฐ”๊ฟ” ์ฝ๊ธฐ):
357
+
358
+ ```bash
359
+ tar -xzf argo-x.y.z.tar.gz
360
+ cd argo-x.y.z
361
+ pip3 install pyyaml
362
+ python3 scripts/search.py "Python asyncio" --json
363
+ python3 scripts/mcp_server.py
364
+ ```
365
+
366
+ ### ์˜ต์…˜ 4: git clone (๊ฐœ๋ฐœ / ์†Œ์Šค ํŒจ์น˜)
367
+
368
+ ```bash
369
+ git clone https://github.com/taxueseek/argo.git
370
+ cd argo
371
+ pip3 install pyyaml
372
+ bash scripts/install.sh --link ~/.claude/skills/argo # optional
373
+ python3 scripts/search.py --list-engines
374
+ ```
375
+
376
+ ### ์˜ต์…˜ 5: Skill ๋””๋ ‰ํ„ฐ๋ฆฌ (์‹ฌ๋ณผ๋ฆญ ๋งํฌ, ๋‹จ์ผ ์ง„์›)
377
+
378
+ ```bash
379
+ python3 scripts/link_source.py --to ~/.claude/skills/argo
380
+ python3 scripts/link_source.py --to ~/.agents/skills/argo
381
+
382
+ cp installs.local.yaml.example installs.local.yaml
383
+ python3 scripts/link_source.py
384
+ python3 scripts/link_source.py --check
385
+ ```
386
+
387
+ ### ์˜ต์…˜ 6: Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
388
+
389
+ ```python
390
+ import sys
391
+ sys.path.insert(0, "/path/to/argo/scripts")
392
+ from search import super_search
393
+
394
+ result = super_search("Python asyncio", n=5, mode="fast")
395
+ for item in result["results"]:
396
+ print(item["title"], item.get("credibility_fast"), item["url"])
397
+ ```
398
+
399
+ ```bash
400
+ # if bin/argo is on PATH
401
+ argo search "Python asyncio"
402
+ argo research "2026 mutual fund holdings structure"
403
+ argo evidence "a claim to verify"
404
+ ```
405
+
406
+ ---
407
+
408
+ ## ํ”Œ๋žซํผ
409
+
410
+ | ํ”Œ๋žซํผ | ์—ฐ๋™ | ๋น„๊ณ  |
411
+ |----------|-------------|-------|
412
+ | **Claude Code** | MCP / Skill ๋งํฌ | `npx` ๋˜๋Š” `mcp_server.py`; `link_source.py` ๊ฐ€๋Šฅ |
413
+ | **Kimi / Grok Build** | MCP Server | ๋™์ผ |
414
+ | **Cursor / Cline / Continue** | MCP | MCP ์ง€์› IDE ํ”Œ๋Ÿฌ๊ทธ์ธ |
415
+ | **CLI** | `search.py` / `bin/argo` | ์Šคํฌ๋ฆฝํŠธ, cron, ์ˆ˜๋™ ๋””๋ฒ„๊ทธ |
416
+ | **Python ํ”„๋กœ์ ํŠธ** | `from search import super_search` | ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธ์ถœ |
417
+
418
+ ### ์„ค์น˜ ํ›„ ์ ๊ฒ€
419
+
420
+ ```bash
421
+ python3 --version # 3.9+
422
+ python3 -c "import yaml; print('PyYAML OK')"
423
+ python3 -m pytest tests/test_unit.py -q # optional
424
+ python3 scripts/search.py --list-engines
425
+ ```
426
+
427
+ ---
428
+
429
+ ## ๊ธฐ๋Šฅ
430
+
431
+ | ๊ธฐ๋Šฅ | ํ•˜๋Š” ์ผ | ์ง„์ž…์  |
432
+ |------------|--------------|-------|
433
+ | ํ†ตํ•ฉ ๊ฒ€์ƒ‰ | route โ†’ recall โ†’ fuse โ†’ skim score | `search.py` / `argo_search` |
434
+ | ๋กœ์ปฌ ํŒŒ์ผ ๊ฒ€์ƒ‰ | ๋””์Šคํฌ ์ฝ”๋“œ/๋…ธํŠธ/๋ฉ”๋ชจ๋ฆฌ (์˜คํ”„๋ผ์ธ) | `argo_local_search` |
435
+ | ๋กœ์ปฌ ํ…์ŠคํŠธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ | ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ (fail-closed) | `argo_local_read` |
436
+ | ์žฌ๊ณ„์‚ฐ | ์ œํ•œ ์„œ๋ธŒํ”„๋กœ์„ธ์Šค ์ˆ˜์น˜ ์žฌ๊ณ„์‚ฐ (๊ธฐ๋ณธ ๊ฑฐ๋ถ€) | `argo_recompute` |
437
+ | ์‹ฌ์ธต ์—ฐ๊ตฌ | ํ•˜์œ„ ์งˆ๋ฌธ, ๋‹ค์ค‘ ์†Œ์Šค, ๊ฐญ ํžŒํŠธ | `research.py` / `argo_research` |
438
+ | ์‹ ๋ขฐ๋„ | ๊ถŒ์œ„ / ๋ฐ€๋„ / ์‹œ์˜์„ฑ / ๊ต์ฐจ ๊ฒ€์ฆ | `evidence.py` / `argo_evidence` |
439
+ | ์˜๋„ ๋ช…ํ™•ํ™” | ๋‹ค์˜์–ด, ๋ธŒ๋žœ๋“œ ์ถฉ๋Œ, ์ „๋žต ํžŒํŠธ | `clarify.py` / `argo_clarify` |
440
+ | ํŽ˜์ด์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ | HTTP ์šฐ์„ , ํ•„์š” ์‹œ ๋ธŒ๋ผ์šฐ์ € ํด๋ฐฑ | `argo_fetch` (`mode=extract` ๊ตฌ์กฐ ์ถ”์ถœ) |
441
+ | ์Šคํฌ๋ฆฐ์ƒท / PDF | ํŽ˜์ด์ง€ ์บก์ฒ˜, ๊ตฌ์กฐํ™” PDF ์ถ”์ถœ | `argo_screenshot` / `argo_pdf` |
442
+ | ์‚ฌ์ดํŠธ ํฌ๋กค | ๋ชฉ๋ก ํŽ˜์ด์ง€ ๋ฐฐ์น˜ ํฌ๋กค | `argo_crawl` |
443
+ | ์ฟผ๋ฆฌ ์—ฐ์‚ฐ์ž | `site:` / `-site:` / `-๋‹จ์–ด` / `-"๊ตฌ๋ฌธ"` / `"๊ตฌ๋ฌธ"` / `lang:` / `after:` / `before:` ๋ฅผ ๋ผ์šฐํŒ…๊ณผ ๊ฒ€์ƒ‰ ์–‘์ชฝ์—์„œ ๋ถ„๋ฆฌ(์ƒ์„ธ๋Š” references/usage.md) | ์ฟผ๋ฆฌ์— ์ง์ ‘ ๊ธฐ์žฌ |
444
+ | ์‹ ๋ขฐ ์‹ ํ˜ธ | `authority_level` ์ด์‚ฐ ๋“ฑ๊ธ‰(0-4, โ‰ฅ3์ด๋ฉดๆž้ซ˜ๆƒๅจ) + `summary` ์—์ด์ „ํŠธ์šฉ ์š”์•ฝ(๊ฒ€์ฆ ํ›„ ์—ญ์ฑ„์›€) | ๊ฒฐ๊ณผ ํ•„๋“œ, `--fields agent` ๋กœ ํ‘œ์‹œ |
445
+ | ์†Œ์…œ / ๊ฐ์„ฑ | Weibo / Xiaohongshu / Bilibili / Reddit / X โ€ฆ | `argo_social_search` |
446
+ | DSH ๋„ค์ดํ‹ฐ๋ธŒ ๋„๊ตฌ | DSH ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์„ค์น˜ํ•˜๋ฉด `argo_search` / `argo_fetch` ๋“ฑ์ด ํ˜ธ์ŠคํŠธ 1๊ธ‰ ๋„๊ตฌ๊ฐ€ ๋˜์–ด CLI ๋‹จ๋ฐœ๋กœ ์‹คํ–‰, ์ƒ์ฃผ ํ† ํฐ ์˜ค๋ฒ„ํ—ค๋“œ 0 | `dsh plugin add` ํ›„ ์ง์ ‘ ํ˜ธ์ถœ |
447
+ | DSH web seam | ํ˜ธ์ŠคํŠธ ๋‚ด์žฅ `web_search` / `web_fetch`๊ฐ€ argo์˜ ์—”์ง„ยท๊ธ๊ธฐ ์ฒด์ธ์œผ๋กœ ๋ผ์šฐํŒ…(HTTP ์šฐ์„ , Cloudflare / JS ๋ Œ๋”๋ง ์‹œ ์ž๋™ ๋ธŒ๋ผ์šฐ์ € ์Šน๊ฒฉ) | ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๊ธฐ๋ณธ ๋“ฑ๋ก, profile์—์„œ `searchProvider` / `fetchProvider` pin |
448
+ | DSH ์„ค์ • ํŽ˜์ด์ง€ | ๆŽฅๅ…ฅ / ๋„๊ตฌ / ๅผ•ๆ“Ž / ๅฏ†้’ฅ / ็ ”็ฉถ / ้ซ˜็บง 6๊ฐœ ๊ตฌ์—ญ, ์ €์žฅ ์ฆ‰์‹œ ์ ์šฉ. ํ‚ค๋Š” ํ˜ธ์ŠคํŠธ ๅ‡ญ่ฏๅบ“์—, ํ‰๋ฌธ ๋น„ํ‘œ์‹œ | ์„ค์ • ํŒ์—… `Cmd+,` โ†’ ์™ผ์ชฝ ๋ฉ”๋‰ด "Argo" |
449
+
450
+ ### ์˜ˆ์‚ฐ ๋ชจ๋“œ
451
+
452
+ | ๋ชจ๋“œ | ์ ํ•ฉํ•œ ๊ฒฝ์šฐ | ๋™์ž‘ |
453
+ |------|----------|----------|
454
+ | `fast` | ๋‹จ์ˆœ Q, ์†๋„ ํ•„์š” | ๋ฌด๋ฃŒ ์—”์ง„ ์šฐ์„ , ์œ ๋ฃŒ re-rank ์Šคํ‚ต |
455
+ | `auto` | ์ผ์ƒ ๊ธฐ๋ณธ | ๋น„์šฉ ์ธ์‹ ํ’ˆ์งˆ/์ง€์ถœ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ |
456
+ | `deep` | ์—ฐ๊ตฌ, ์กฐ์‚ฌ | ํ’ˆ์งˆ ์šฐ์„ , ์—”์ง„ ๋” ํ—ˆ์šฉ |
457
+ | `budget` | ํ• ๋‹น๋Ÿ‰ ํƒ€์ดํŠธ | ์ฟผํ„ฐ ์ œ์–ด, ์†Œ์ง„ ์‹œ ์ €ํ•˜ |
458
+
459
+ ### ๋Œ€๋žต์ ์ธ ๋Šฅ๋ ฅ ์„ธํŠธ (v2.9.7)
460
+
461
+ Argo๊ฐ€ ํ•˜๋Š” ์ผ์„ ํ•œ ์ค„๋กœ ๋งํ•˜๋ฉด, ์งˆ๋ฌธ์„ ๋„๋ฉ”์ธ๊ณผ ์–ธ์–ด๋กœ ์•Œ๋งž์€ ์†Œ์Šค์— ๋ณด๋‚ด๊ณ , ๋Œ์•„์˜จ ๊ฒฐ๊ณผ๋ฅผ ์‹ ๋ขฐ๋„๋กœ ์ค„์„ธ์›Œ, ์—์ด์ „ํŠธ์—๋Š” ์ค„์„ธ์šฐ๊ณ  ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋Š” ์žฌ๋ฃŒ๋ฅผ ๋„˜๊ธด๋‹ค. ๊ฒ€์ƒ‰ยท๊ธ๊ธฐยท์ฆ๊ฑฐ ํ™•์ธยท๋กœ์ปฌ ํŒŒ์ผ ๊ฒ€์ƒ‰์€ ๊ฐ™์€ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ๋ฅด๊ณ , 19๊ฐœ MCP ๋„๊ตฌ๋Š” CLI ๋ช…๋ น๊ณผ ์ผ๋Œ€์ผ๋กœ ๋Œ€์‘ํ•˜๋ฏ€๋กœ ์–ด๋–ค ํ˜•ํƒœ๋กœ ์„ค์น˜ํ•ด๋„ ๋Šฅ๋ ฅ์ด ๋น ์ง€์ง€ ์•Š๋Š”๋‹ค. ๋‹จ๋… ๋ช…๋ น๋„ ๋ช‡ ๊ฐœ ์žˆ๋‹ค: argo tweet์€ X ๊ฒŒ์‹œ๋ฌผ์„ ๋ฌถ๊ณ , argo auth๋Š” ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, argo job์€ ์ฑ„์šฉ ์ •๋ณด๋ฅผ ๋ชจ์€๋‹ค. ์ „์ฒด ์†Œ์Šค์˜ ๋น„์šฉยทํ‚คยท์ƒํƒœ๋Š” docs/ENGINE_CATALOG.md์— ์žˆ๋‹ค: 264 ์†Œ์Šค, 227 ๋ฌด์„ค์ •, 95 ๋„๋ฉ”์ธ.
462
+
463
+ DSH ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์„ค์น˜ํ•˜๋ฉด ์ด ๋Šฅ๋ ฅ๋“ค์ด ํ˜ธ์ŠคํŠธ์˜ ๋„ค์ดํ‹ฐ๋ธŒ ๋„๊ตฌ๊ฐ€ ๋œ๋‹ค. ๊ณ ๋นˆ๋„ ๊ฒ€์ƒ‰๊ณผ ๊ธ๊ธฐ๋Š” ๊ธฐ๋ณธ์œผ๋กœ ์ผœ์ ธ ์žˆ๊ณ , ๋กฑํ…Œ์ผ ํฌ๋ Œ์‹์€ ์„ค์ • ํŽ˜์ด์ง€์—์„œ ํ•„์š”์— ๋”ฐ๋ผ ์ฒดํฌํ•˜๋ฉฐ, argo ๋ณธ์ฒด์˜ 28๊ฐœ ๋™์ž‘ ์Šค์œ„์น˜(์บ์‹œ, ์žฌ์ˆœ์œ„, ์ค‘๋ณต ์ œ๊ฑฐ, ๊ฐ€๋“œ, ํ”„๋ก์‹œ, TTL ๋“ฑ)๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ํŒจ๋„๋กœ ์˜ฎ๊ฒจ์กŒ๋‹ค. ํ‚ค๋Š” ํ˜ธ์ŠคํŠธ ๅ‡ญ่ฏๅบ“์— ๋“ค์–ด๊ฐ€๊ณ , ํ‰๋ฌธ์€ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋ชจ๋“  ๋ณ€๊ฒฝ์€ ์ €์žฅ ์ฆ‰์‹œ ์ ์šฉ๋œ๋‹ค.
464
+
465
+ ์ตœ๊ทผ ๋ช‡ ํŒ์ด ๊ฐ์ž ํ•œ ๋ถ€๋ฅ˜์˜ ๋ฌธ์ œ๋ฅผ ๊ณ ์ณค๋‹ค.
466
+
467
+ v2.9.7์ด ๊ณ ์นœ ๊ฒƒ์€ ์„ธ ๊ฐœ์˜ ์˜ค๋ž˜๋œ ๋ณ‘์ด๋‹ค. DSH ํ˜ธ์ŠคํŠธ ์•ˆ์˜ AI๊ฐ€ URL์„ ์ฝ์„ ๋•Œ ํ˜ธ์ŠคํŠธ ์ž์ฒด ๊ธ๊ธฐ๋ฅผ ์จ์„œ ๋‹จ์ถ• ๋งํฌ ์ ํ”„ยทJS ์ฑŒ๋ฆฐ์ง€ ํŽ˜์ด์ง€๊ฐ€ ๊ตฌ์กฐ์ ์œผ๋กœ ์‹คํŒจํ•˜๊ธฐ ์ผ์‘ค์˜€๊ณ , argo์˜ ๊ธ๊ธฐ ์ฒด์ธ์€ ์“ธ ์ผ์ด ์—†์—ˆ๋‹ค; ์ด ํŒ์— ํ˜ธ์ŠคํŠธ ์ฝ๊ธฐ๊ฐ€ argo๋ฅผ ํ˜๋Ÿฌ ๊ทธ๋Ÿฐ ํŽ˜์ด์ง€๊ฐ€ ์‹คํŒจโ†’์„ฑ๊ณต์œผ๋กœ ๋ฐ”๋€Œ๊ณ , ์ผ๋ฐ˜ ํŽ˜์ด์ง€๋Š” ๊ทธ๋Œ€๋กœ๋‹ค. ๋ผ์šฐํŒ… ํ›„๋ณด ํ’€์— ๋ช…์‹œ ์ „์šฉ 18๊ฐœ ์—”์ง„์ด ์„ž์—ฌ ์ž๋™ ์„ ํƒ๋˜๋ฉด ์œ ์ผํ•œ ์œ ๋ฃŒ ์—”์ง„์ด ์กฐ์šฉํžˆ ๊ณผ๊ธˆ๋  ์œ„ํ—˜์ด ์žˆ์—ˆ๋Š”๋ฐ, ์ง€๊ธˆ์€ ํ›„๋ณด ํ’€์— ์—†๊ณ  ์“ฐ๋ ค๋ฉด ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค. ์—”์ง„์ด ์„ฑ๊ณตํ•  ๋•Œ๋งˆ๋‹ค ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ๊ฐ€ ํŒŒ์ผ ์ž ๊ธˆ์œผ๋กœ ๋””์Šคํฌ๋ฅผ ๋‹ค์‹œ ์ผ๋Š”๋ฐ, ๊ฑด๊ฐ• ์ƒํƒœ์—์„œ๋Š” ํŒŒ์ผ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ œ๋กœ์ด๊ณ  ๋‹ค์ค‘ ์—”์ง„ ๋ถ€๊ธฐ๋„ ํ•œ ํŠธ๋žœ์žญ์…˜์— ํ•ฉ์ณ์ง„๋‹ค. License๋„ MIT์—์„œ Apache-2.0์œผ๋กœ ๋ฐ”๋€Œ์–ด ์ƒ์šฉ ์ด์šฉ์ด ํ•œ๊ฒฐ ํŽธํ•ด์กŒ๋‹ค.
468
+
469
+ ๊ทธ ํ›„ DSH ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋˜ ํ•œ ์ธต์ด ๋”ํ•ด์กŒ๋‹ค. ์„ค์ • ํŽ˜์ด์ง€๋Š” ๋‹ค์„ฏ ๊ตฌ์—ญ์—์„œ ์—ฌ์„ฏ ๊ตฌ์—ญ์œผ๋กœ ๋Š˜์—ˆ๊ณ , ์ƒˆ ใ€Œๅผ•ๆ“Žใ€ ๊ตฌ์—ญ์ด argo ๋ณธ์ฒด์˜ ๋™์ž‘ ์Šค์œ„์น˜๋ฅผ ํŒจ๋„์— ๋‹ด์•˜๋‹ค(๊ธฐ์กด์—๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฟ). ํ‚ค ํŽ˜์ด์ง€์—์„œ๋Š” ๊ฐ ํ‚ค๊ฐ€ ๅ‡ญ่ฏๅบ“, ์‹œ์ž‘ ํ™˜๊ฒฝ, `.env` ์ค‘ ์–ด๋””์—์„œ ์˜ค๋Š”์ง€ ๋ณด์ด๊ฒŒ ๋๊ณ , ๋„๊ตฌ ์ฒดํฌยทํƒ€์ž„์•„์›ƒยท๋™์‹œ์„ฑยท์—ฐ๊ตฌ ์ƒํ•œ์€ ๋ชจ๋‘ ์ €์žฅ ์ฆ‰์‹œ ์ ์šฉ๋œ๋‹ค. ์ทจ์†Œ๋„ ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ๋‹จ๊ณ„๊นŒ์ง€ ๋„๋‹ฌํ•ด, AI๊ฐ€ ์ค‘๊ฐ„์— ๋ฉˆ์ถ”๋ฉด ์•„์ง ๋œจ๊ณ  ์žˆ๋Š” argo ์„œ๋ธŒํ”„๋กœ์„ธ์Šค๋Š” ํƒ€์ž„์•„์›ƒ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ์ฃฝ๋Š”๋‹ค.
470
+
471
+ v2.9.6์ด ๋งก์€ ๊ฒƒ์€ ์ฟผ๋ฆฌ ์—ฐ์‚ฐ์ž์™€ ์ „์†ก์ธต์ด๋‹ค. ใ€Œsite:github.com ๋ญ๋ญใ€์‹ ์งˆ์˜๋Š” ์—ฐ์‚ฐ์ž๊ฐ€ ์ผ๋ฐ˜ ๋‹จ์–ด๋กœ ๋‹ค๋ค„์ง€๊ฑฐ๋‚˜่งฃๆž๋งŒ ๋˜๊ณ ้Žๆปค๋Š” ์•ˆ ๋๋Š”๋ฐ, ๊ณ„์•ฝ์ธต์ด ์ƒ๊ฒจ ๋ผ์šฐํŠธ์™€ ์บ์‹œ๋Š” ๋ฒ—๊ธด ์งˆ์˜๋งŒ ์ธ์‹ํ•˜๊ณ  site:๋Š” ์ง„์งœ ํ›„์น˜ ํ•„ํ„ฐ๋กœ ์‹คํ–‰๋˜์–ด ์บ์‹œ ํ‚ค์—๋„ ๋“ค์–ด๊ฐ€ ๋‘ ๋ฒˆ์˜ ๊ฒ€์ƒ‰์ด ์„ž์ด์ง€ ์•Š๋Š”๋‹ค. ์ „์†ก์ธต์—์„œ๋Š” POST๋งˆ๋‹ค TLS ํ•ธ๋“œ์…ฐ์ดํฌ(320~561 ms)๋ฅผ ๋‹ค์‹œ ์ง€๋ถˆํ–ˆ๋Š”๋ฐ, ์—ฐ๊ฒฐ ํ’€๋ง์œผ๋กœ ์ƒ์ฃผ MCP ํ”„๋กœ์„ธ์Šค๋Š” ๋งค ์งˆ์˜๋งˆ๋‹ค ์ด๋ฅผ ์•„๋‚€๋‹ค. ์ด ํŒ์— ๊ณต์‹ DeepSeek ๊ฒ€์ƒ‰์ด ๋“ค์–ด๊ฐ”๊ณ , ์ข…๋Ÿ‰ ๊ณผ๊ธˆ์— ์ผ์ƒ combo์—๋Š” ์•ˆ ๋“ ๋‹ค.
472
+
473
+ v2.9.5์—์„œ ๋”ํ•ด์ง„ ๊ฒƒ์€ ํ™˜์œจ๊ณผ ์ค‘๋ณต ์ œ๊ฑฐ ์ •ํ™”๋‹ค. ใ€Œ์œ„์•ˆ/๋‹ฌ๋Ÿฌ ํ™˜์œจใ€์„ ๋ฌผ์œผ๋ฉด ๊ฑฐ์‹œ ๋„๋ฉ”์ธ์„ ๋Œ์•„ ๋ฐฑ๊ณผ์‚ฌ์ „ ํ‘œ์ œ์–ด์— ์ฐฉ๋ฅ™ํ•ด 1.4์ดˆ ๋งŒ์— ๋‹ต์ด ์—†์—ˆ๋Š”๋ฐ, ํ™˜์œจ ์ „์šฉ ๋„๋ฉ”์ธ์ด ์ƒ๊ฒจ 675 ms์— ์ฆ‰์‹œ ํ™˜์œจ๊ณผ ๋งค์ผ ๋‰ด์Šค๋ฅผ ๋Œ๋ ค์ค€๋‹ค. ์ค‘๋ณต ์ œ๊ฑฐ์— ์ ‘๋ฏธ์‚ฌ ์ •๊ทœํ™”์™€ ํผ์ง€ ์žฌํ™•์ธ์ด ๋”ํ•ด์ ธ ์ œ๋ชฉ์— ๊ตฌ๋ถ„์ž ์žˆ๋Š” ๊ณต์‹ ๋ฌธ์„œ๊ฐ€ ํ›„๋ฐฉ์œผ๋กœ ๋ฐ€๋ฆฌ๋Š” ์ผ์ด ์—†์–ด์กŒ๋‹ค.
474
+
475
+ v2.9.4๊ฐ€ ๊ณ ์นœ ๊ฒƒ์€ ๋ช…์‹œ ์—”์ง„ ์ง€์ • ๊ฒฝ๋กœ๋‹ค. --engine X๋ฅผ ์ง€์ •ํ•˜๋ฉด ์บ์‹œ TTL์ด ์ผ๋ฅ ์ด์—ˆ๋Š”๋ฐ, ๋„๋ฉ”์ธ ํŒ์ •์ด ๋“ค์–ด๊ฐ€ TTL์€ ๋„๋ฉ”์ธ์„ ๋”ฐ๋ฅด๊ณ , ์˜ˆ๋น„ ์—”์ง„์ด ์—†์œผ๋ฉด ๊ฐ™์€ ์—”์ง„์˜ ๊ณตํšŒ์ „๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
476
+
477
+ ํŒ๋ณ„ ์ƒ์„ธ๋Š” ใ€Œ์ตœ๊ทผ ์—…๋ฐ์ดํŠธใ€์—, ๊ฐ ํŒ ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋Š” docs/์— ์žˆ๋‹ค.
478
+ ---
479
+
480
+ ## ์—”์ง„๊ณผ ๋ผ์šฐํŒ…
481
+
482
+ ์„ค์ •์—๋Š” ํ˜„์žฌ **264** ์†Œ์Šค(**227**๊ฐœ๋Š” ํ‚ค ๋ถˆํ•„์š”)์™€ **95** ๋„๋ฉ”์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค (`config.yaml`, `--list-engines` ์ฐธ๊ณ ).
483
+
484
+ ### ์ง์ ‘ยท์ˆ˜์ง (๋ฐœ์ทŒ)
485
+
486
+ | ์—”์ง„ | ์‹œ๋‚˜๋ฆฌ์˜ค | ๋น„์šฉ ์„ฑํ–ฅ |
487
+ |--------|----------|-----------|
488
+ | anysearch / duckduckgo | ์ผ๋ฐ˜ / ๊ธฐ์ˆ  | free |
489
+ | sina_quote / tencent_quote / eastmoney | A์ฃผ ์‹œ์„ธ / ์ž๊ธˆ ํ๋ฆ„ | free |
490
+ | finviz / seeking_alpha | ๋ฏธ๊ตญยทํ•ด์™ธ ๊ธˆ์œต | depends |
491
+ | imdb / itunes / thesportsdb | ์˜ํ™” / ์Œ์•… / ์Šคํฌ์ธ  | mostly free |
492
+ | local_openstreetmap / wikidata / wikipedia | ์ง€๋ฆฌ / ์กฐ์ง / ๋ฐฑ๊ณผ | free |
493
+ | arxiv / semantic_scholar / openalex | ํ•™์ˆ  | mostly free |
494
+ | pubchem / gbif / rfc_editor | ํ™”ํ•™ / ์ข… / ํ‘œ์ค€ | free |
495
+ | github / stackoverflow / pypi / npm | ์ฝ”๋“œยทํŒจํ‚ค์ง€ | depends |
496
+ | byted / bocha / metaso / octen | ์ค‘๊ตญ ์›น / AI ๊ฒ€์ƒ‰ | API / low cost |
497
+ | zhihu / wechat_sogou | ์ค‘๊ตญ ์—ฌ๋ก  / WeChat | API / free |
498
+ | tavily / felo / exa | ๊ตญ์ œ / ์‹œ๋งจํ‹ฑ | paid or quota |
499
+ | twitter / reddit / xiaohongshu / bilibili / weibo | ์†Œ์…œ UGC | free (some need login) |
500
+
501
+ ### ๋กœ์ปฌ ์ œ๋กœ ๋น„์šฉ ๋ ˆ์ด์–ด (`local_*`)
502
+
503
+ ๋ณ„๋„ SearXNG ์„œ๋น„์Šค ๋ถˆํ•„์š”. ๋ฉ”์ธ ๊ฒฝ๋กœ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด HTML / RSS / JSON ํŒŒ์‹ฑ (`local_bing`, `local_sogou`, `local_google`, `local_arxiv`, โ€ฆ). **๋‹ค๊ตญ์–ด ์ฟผ๋ฆฌ**์—์„œ๋Š” ๋ผ์šฐํŒ…์ด ์—”์ง„ ์–ธ์–ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์žฌ์ž‘์„ฑ(์˜ˆ: Bing `setlang`)ํ•˜๊ณ  RRF๋กœ ์œตํ•ฉํ•ฉ๋‹ˆ๋‹ค.
504
+
505
+ ---
506
+
507
+ ## ์˜ˆ์‹œ
508
+
509
+ ### ๊ธˆ์œต
510
+
511
+ ```bash
512
+ python3 scripts/search.py "python asyncio error handling" --explain
513
+ # typical: stock_query โ†’ quote snapshot sources
514
+ ```
515
+
516
+ ### ํ•™์ˆ 
517
+
518
+ ```bash
519
+ python3 scripts/search.py "transformer attention mechanism paper" --json
520
+ # domain often academic; combo includes arxiv etc.
521
+ ```
522
+
523
+ ### ์—ฐ๊ตฌ์™€ ๊ฒ€์ฆ
524
+
525
+ ```bash
526
+ python3 scripts/research.py "2026 mutual fund Q2 holdings structure" --depth deep --json
527
+
528
+ python3 scripts/search.py "same query" --json | \
529
+ python3 scripts/evidence.py "same query" --stdin --json
530
+ ```
531
+
532
+ ### MCP ๋„๊ตฌ (12)
533
+
534
+ | ๋„๊ตฌ | ์šฉ๋„ |
535
+ |------|---------|
536
+ | `argo_search` | ํ†ตํ•ฉ ๊ฒ€์ƒ‰ |
537
+ | `argo_local_search` | ๋กœ์ปฌ ํŒŒ์ผ (์˜คํ”„๋ผ์ธ) |
538
+ | `argo_local_read` | ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋กœ์ปฌ ํ…์ŠคํŠธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ (fail-closed) |
539
+ | `argo_recompute` | ์ œํ•œ ์„œ๋ธŒํ”„๋กœ์„ธ์Šค ์žฌ๊ณ„์‚ฐ (๊ธฐ๋ณธ ๊ฑฐ๋ถ€, ์ธ๊ฐ€ ํ•„์š”) |
540
+ | `argo_research` | ์‹ฌ์ธต ์—ฐ๊ตฌ (์†Œ์…œ ๊ฐ์„ฑ ๋ชจ๋“œ ํฌํ•จ) |
541
+ | `argo_evidence` | ์‹ ๋ขฐ๋„ ์ ์ˆ˜ |
542
+ | `argo_clarify` | ์˜๋„ ๋ช…ํ™•ํ™” |
543
+ | `argo_fetch` | ์Šค๋งˆํŠธ fetch (`mode=extract` ๊ตฌ์กฐ ์ถ”์ถœ) |
544
+ | `argo_crawl` | ์‚ฌ์ดํŠธ ํฌ๋กค |
545
+ | `argo_screenshot` | ํŽ˜์ด์ง€ ์Šคํฌ๋ฆฐ์ƒท |
546
+ | `argo_pdf` | PDF ์ถ”์ถœ |
547
+ | `argo_social_search` | ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ์†Œ์…œ (`mode=sentiment`) |
548
+
549
+ ---
550
+
551
+ ## ์„ค์น˜์™€ ์„ค์ •
552
+
553
+ ### ์š”๊ตฌ ์‚ฌํ•ญ
554
+
555
+ | ํ•ญ๋ชฉ | ์š”๊ตฌ |
556
+ |------|-------------|
557
+ | Python | 3.9+ (CLI + MCP ์ฝ”์–ด) |
558
+ | ์˜์กด์„ฑ | `pip install pyyaml` (ํ•„์ˆ˜ ์˜์กด์„ฑ ํ•˜๋‚˜) |
559
+ | Node.js | **`npx` ์ง„์ž…์—๋งŒ** ํ•„์š”, 18+ |
560
+ | SearXNG | ๋ถˆํ•„์š” (๋‚ด์žฅ ๋กœ์ปฌ ์—”์ง„) |
561
+
562
+ ### API ํ‚ค (๋ชจ๋‘ ์„ ํƒ)
563
+
564
+ ํ‚ค๊ฐ€ ์—†์œผ๋ฉด ํ•ด๋‹น ์—”์ง„ ์Šคํ‚ต, ๋ฌด๋ฃŒ ์—”์ง„์ด ๋ฒ„ํŒ€. **ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ**โ€”์‹ค์ œ ํ‚ค๋ฅผ ์ปค๋ฐ‹ํ•˜๊ฑฐ๋‚˜ ์ด์Šˆ์— ๋ถ™์ด์ง€ ๋งˆ์„ธ์š”.
565
+
566
+ ```bash
567
+ # recommended (better quality)
568
+ export TAVILY_API_KEY="your_key"
569
+ export BOCHA_API_KEY="your_key"
570
+ export METASO_API_KEY="your_key"
571
+ export ZHIHU_ACCESS_SECRET="your_key"
572
+
573
+ # optional
574
+ export BRAVE_API_KEY="your_key"
575
+ export FELO_API_KEY="your_key"
576
+ export GITHUB_TOKEN="your_key"
577
+ export WEB_SEARCH_API_KEY="your_key"
578
+ export ANYSEARCH_API_KEY="your_key"
579
+ export OCTEN_API_KEY="your_key"
580
+ export ARGO_KEENABLE_API_KEY="your_key" # ์„ ํƒ; Keenable ๋ฌด๋ฃŒ ์ฒดํ—˜
581
+ ```
582
+
583
+ `config.yaml`์—๋Š” `{ENV_NAME}` ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋งŒโ€”git์— ํ‰๋ฌธ ์‹œํฌ๋ฆฟ ์—†์Œ.
584
+
585
+ ### ์บ์‹œ
586
+
587
+ ๊ธฐ๋ณธ SQLite ๊ฒฝ๋กœ๋Š” `config.yaml`์˜ `cache.db_path` (๋ณดํ†ต `~/.cache/unified-search/cache.db`).
588
+
589
+ | ์œ ํ˜• | ๋Œ€๋žต TTL |
590
+ |------|-------------|
591
+ | Finance | ~5 min |
592
+ | News / realtime | ~10โ€“15 min |
593
+ | General | ~1 hour |
594
+ | Research / evergreen | ~2โ€“24 hours |
595
+ | Empty results | very short (avoid freezing โ€œno hitsโ€) |
596
+
597
+ ### FAQ
598
+
599
+ **API ํ‚ค ์—†์ด๋„ ๋˜๋‚˜์š”?**
600
+ ๋„ค. ๋งŽ์€ ๋กœ์ปฌ ๋ฌด๋ฃŒ ์—”์ง„๊ณผ ๋ฌด๋ฃŒ API; ํ‚ค ์—†๋Š” ๊ฒฝ๋กœ๊ฐ€ ์ž๋™์ž…๋‹ˆ๋‹ค.
601
+
602
+ **์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ vs npx?**
603
+ ์Šคํฌ๋ฆฝํŠธ: ๊ณ ์ • ๋กœ์ปฌ ์„ค์น˜, ์„ค์ •, Skill ๋งํฌ. npx: MCP๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ถ™์ž„. ๊ฐ™์€ Python ์ฝ”์–ด.
604
+
605
+ **์—”์ง„ ํ™•์ธ์€?**
606
+ `python3 scripts/search.py --list-engines`, ๋˜๋Š” `--explain` ์ถ”๊ฐ€.
607
+
608
+ **์ €์žฅ์†Œ์— ์ฝ”๋“œ ์‚ฌ๋ณธ์ด ์—ฌ๋Ÿฌ ๊ฐœ?**
609
+ ์•„๋‹ˆ์š”. `link_source.py`๋กœ ๋‹จ์ผ ์†Œ์Šค + ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๊ถŒ์žฅ, rsync ๋ณต์ œ ์ง€์–‘.
610
+
611
+ ---
612
+
613
+ ## CLI ํ”Œ๋ž˜๊ทธ
614
+
615
+ ```
616
+ python3 scripts/search.py [options] query
617
+
618
+ --engine, -e engine, default auto
619
+ --max-results, -n count, default 5
620
+ --depth, -d fast | balanced | deep
621
+ --mode fast | auto | deep | budget
622
+ --no-cache skip cache
623
+ --explain print routing explanation
624
+ --json JSON output
625
+ --timeout, -t timeout seconds
626
+ --list-engines list engines
627
+ ```
628
+
629
+ ---
630
+
631
+ ## ์„ค๊ณ„ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„
632
+
633
+ 1. **์—์ด์ „ํŠธ ํก์ˆ˜ ์šฐ์„ , ๋งํฌ ๊ฐœ์ˆ˜ ์ฐจ์„ .**
634
+ 2. **๋ฌด๋ฃŒยท๋กœ์ปฌ ์šฐ์„ , ์œ ๋ฃŒ๋Š” ์„ ํƒ์  ํ–ฅ์ƒ.**
635
+ 3. **์‹คํŒจ๋Š” ๊ด€์ธก ๊ฐ€๋Šฅ**: empty / timeout / breaker์— ๋ผ๋ฒจโ€”์กฐ์šฉํžˆ ์‚ผํ‚ค์ง€ ์•Š์Œ.
636
+ 4. **์„ค์ • ์ฃผ๋„ ์—”์ง„**; `config.yaml`์ด ๋‹จ์ผ ์ง„์›.
637
+ 5. **๋‹จ์ผ ์†Œ์Šค ์„ค์น˜**: ๋งํฌ ์—”ํŠธ๋ฆฌ, rsync ๋ณต์ œ ๊ธˆ์ง€.
638
+ 6. **์†Œ์…œ์€ ์ง„๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹˜**; ํ™•์žฅยท๊ฐ์„ฑ์—๋Š” ์ข‹์œผ๋‚˜ ์œ ์ผํ•œ ์‚ฌ์‹ค ๊ทผ๊ฑฐ๋Š” ์•„๋‹˜.
639
+
640
+ ---
641
+
642
+ ## ์ž˜ ๋งž๋Š” ๊ฒฝ์šฐ
643
+
644
+ - Claude Code / Grok Build / Codex / Kimi ์—์ด์ „ํŠธ์˜ ๊ฒ€์ƒ‰ ๋ฐฑ์—”๋“œ
645
+ - **๋‹ค๊ตญ์–ดยท๋‹ค๋„๋ฉ”์ธ** Q&A: CJK + EN + ๊ธˆ์œต / ์˜ํ™” / ์Šคํฌ์ธ  / ํ•™์ˆ  / ์ฝ”๋“œ
646
+ - **์žฌํ˜„ ๊ฐ€๋Šฅยท์บ์‹œ ๊ฐ€๋Šฅ** ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•œ ์Šคํฌ๋ฆฝํŠธ์™€ ํŒŒ์ดํ”„๋ผ์ธ
647
+ - ๊ณต๊ฐœ ๊ธˆ์œต / ์—”ํ‹ฐํ‹ฐ ๋ฐ์ดํ„ฐ์˜ ํŒฉํŠธ์ฒดํฌ์™€ ๋‹ค์ค‘ ์†Œ์Šค ๋น„๊ต
648
+
649
+ ๋‹จ๋… ์†”๋ฃจ์…˜์œผ๋กœ ๋œ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ: ํ”Œ๋žซํผ ๋„ค์ดํ‹ฐ๋ธŒ ์ธ๊ฒŒ์ด์ง€๋จผํŠธ ๋žญํ‚น, ๋˜๋Š” ์žฅ๊ธฐ max-recall ์• ๊ทธ๋ฆฌ๊ฒŒ์ดํ„ฐ(๋‚ด์žฅ ๋กœ์ปฌ ์—”์ง„์ด ์™ธ๋ถ€ SearXNG ๋ฉ”์ธ ๊ฒฝ๋กœ๋ฅผ ๋Œ€์ฒด).
650
+
651
+ ---
652
+
653
+ ## ํŠธ๋ฆฌ (์š”์•ฝ)
654
+
655
+ ```
656
+ argo/
657
+ โ”œโ”€โ”€ README.md # Chinese (default)
658
+ โ”œโ”€โ”€ README.en.md # English
659
+ โ”œโ”€โ”€ README.ja.md # Japanese
660
+ โ”œโ”€โ”€ README.ko.md # Korean
661
+ โ”œโ”€โ”€ README.es.md # Spanish
662
+ โ”œโ”€โ”€ SKILL.md
663
+ โ”œโ”€โ”€ package.json # npx entry
664
+ โ”œโ”€โ”€ bin/argo.js # Node MCP launcher
665
+ โ”œโ”€โ”€ bin/argo # Python CLI
666
+ โ”œโ”€โ”€ config.yaml # engines & domains (source of truth)
667
+ โ”œโ”€โ”€ assets/readme/ # README visuals
668
+ โ”œโ”€โ”€ backends/
669
+ โ”œโ”€โ”€ mcp/ # ๋‹ค์ค‘ ํด๋ผ์ด์–ธํŠธ MCP ์ฃผ์ž… ์ง„์› (clients.yaml)
670
+ โ”œโ”€โ”€ scripts/ # search / research / mcp / install โ€ฆ
671
+ โ”œโ”€โ”€ sub-skills/local-search/
672
+ โ”œโ”€โ”€ sub-skills/ego-search/ # ๋กœ๊ทธ์ธ ์ƒํƒœ ์ „๋ฌธ ๊ฒ€์ƒ‰ (๊ธฐ๋ณธ ๊บผ์ง)
673
+ โ”œโ”€โ”€ tests/
674
+ โ””โ”€โ”€ docs/
675
+ ```
676
+
677
+ ---
678
+
679
+ ## ์ตœ๊ทผ ์—…๋ฐ์ดํŠธ
680
+
681
+ ### ๋ฏธ๋ฆด๋ฆฌ์Šค (DSH ํ”Œ๋Ÿฌ๊ทธ์ธ): ์„ค์ • ํŽ˜์ด์ง€์— "์—”์ง„" ๊ตฌ์—ญ ์ถ”๊ฐ€ + ์ทจ์†Œ๊ฐ€ ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ๊นŒ์ง€ ๋„๋‹ฌ
682
+
683
+ - **์—ฌ์„ฏ ๋ฒˆ์งธ ์„ค์ • ๊ตฌ์—ญ "ๅผ•ๆ“Ž"**: argo ๋ณธ์ฒด์˜ 28๊ฐœ ๋™์ž‘ ์Šค์œ„์น˜๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ํŒจ๋„๋กœ ์˜ฎ๊น€(์บ์‹œ / TF-IDF ์žฌ์ˆœ์œ„ / ์ˆ˜์น˜ ๊ต์ฐจ ๊ฒ€์ฆ / MinHash ์ค‘๋ณต ์ œ๊ฑฐ / SERP ๊ฐ€๋“œ, Jina / ๋ชจ๋ฐ”์ผ UA / Parallel ๊ธ๊ธฐ ๊ณ„์ธต, ์˜๋ฏธ ์ฆ๊ฑฐ ๊ณ„์ธต, ํ—ค์ง€ ์—ฌ์œ ์™€ ๊ผฌ๋ฆฌ ํญ, ์—”์ง„ ํ™œ์„ฑํ™” ๋ชฉ๋ก, ํ”„๋ก์‹œ, ๋กœ์ปฌ ๊ฒ€์ƒ‰ ๋ฃจํŠธ์™€ ์ฝ๊ธฐ ํ—ˆ์šฉ ๋ชฉ๋ก, ์›œ์—… / ์‚ฌ์šฉ ๋กœ๊ทธ / ์—ฐ๊ฒฐ ํ’€ / ๊ฐ์ข… TTL). ์ƒˆ volatile ์„ค์ • `argoEnv`(ํ•œ ์ค„์— ํ•˜๋‚˜์˜ `KEY=VALUE`)๋กœ argo ์„œ๋ธŒํ”„๋กœ์„ธ์Šค env์— ๋ฐ˜์˜. ์ด๋ฆ„์€ `ARGO_ENV_SPECS` ํ—ˆ์šฉ ๋ชฉ๋ก์„ ๊ฑฐ์น˜๊ณ  ํ—ˆ์šฉ ๋ชฉ๋ก ๋ฐ–์€ apply ์‹œ์ ์— loud failํ•˜๋ฏ€๋กœ ์˜คํƒ€๊ฐ€ ์กฐ์šฉํžˆ ๋ฌดํšจ๊ฐ€ ๋˜๋Š” ์ผ์„ ๋ง‰๋Š”๋‹ค. ์Šค์œ„์น˜๋ฅ˜๋Š” ์ฆ‰์‹œ ๋ฐ˜์˜, ์ˆซ์žยทํ…์ŠคํŠธยท๋ชฉ๋ก๋ฅ˜๋Š” ๊ทธ๋ฃน ์ €์žฅ. ๋ฏธ์„ค์ • ํ–‰์€ argo ๊ธฐ๋ณธ๊ฐ’์„ ํ‘œ์‹œํ•˜๊ณ  "้ป˜่ฎค"๋กœ ํ‘œ๊ธฐ. ์ธ๊ฐ€ ๊ณ„์—ด ์Šค์œ„์น˜(์žฌ๊ณ„์‚ฐ ์‹คํ–‰, ์ธํŠธ๋ผ๋„ท URL)๋Š” ์˜๋„์ ์œผ๋กœ ํŒจ๋„์— ๋„ฃ์ง€ ์•Š์Œ
684
+ - **ํ‚ค ์ถœ์ฒ˜ ๊ณ„์ธต์ด ๋ณด์ด๊ฒŒ**: "์„ค์ •๋จ / ๋ฏธ์„ค์ • + ์ถœ์ฒ˜ ๊ณ„์ธต(ๅ‡ญ่ฏๅบ“ / ์‹œ์ž‘ ํ™˜๊ฒฝ / ํ”„๋กœ์ ํŠธ .env / ํ™ˆ .env) + ์ฝ๊ธฐ ์ „์šฉ ์ƒํƒœ"๋ฅผ ํ‘œ์‹œํ•˜๊ณ  file ๊ณ„์ธต ์™ธ์—๋Š” ์ €์žฅ ์‹œ ๋ฎ์–ด์“ฐ์ž„์„ ์•ˆ๋‚ด. `DEEPSEEK_API_KEY`๋Š” ํ˜ธ์ŠคํŠธ์˜ `web_search`์™€ ๊ณต์œ ์ž„์„ ๋ช…๊ธฐ. `fetchMaxChars`๋Š” ์ €์žฅ ์‹œ argo ๋„๊ตฌ ์Šคํ‚ค๋งˆ ์ƒํ•œ 50000์œผ๋กœ ์ž˜๋ผ "ํ‘œ์‹œ๊ฐ’๊ณผ ์‹คํšจ๊ฐ’์˜ ๋ถˆ์ผ์น˜"๋ฅผ ํ•ด์†Œ
685
+ - **์ทจ์†Œ๊ฐ€ ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ๊นŒ์ง€ ๋„๋‹ฌ**: `acquireMcp`๊ฐ€ ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ์ค‘์—๋„ ์ทจ์†Œ๋ฅผ ์ธ์ •ํ•˜๊ฒŒ ๋จ. abortํ•˜๋ฉด ์„œ๋ธŒํ”„๋กœ์„ธ์Šค๋ฅผ ์ฃฝ์ด๊ณ  `WEB_ABORTED`๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ ํƒ€์ž„์•„์›ƒ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Œ. ์ทจ์†Œ๋Š” ๋‹จ๋ฐœ ํด๋ฐฑ์—๋„ ๊ด€ํ†ต
686
+ - **์ˆ˜์ •**: ์ฆ๊ฑฐ ์ค‘๋ณต ์ œ๊ฑฐ๊ฐ€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ์‚ผํ‚ค์ง€ ์•Š๊ฒŒ ๋จ. `effect`๊ฐ€ ์—†๋Š” ๊ตฌํ˜• ํ˜ธ์ŠคํŠธ์—์„œ ํ™œ์„ฑํ™”๊ฐ€ ํญ๋ฐœํ•˜์ง€ ์•Š๊ฒŒ ๋จ. `saveKey` / `setForward` / `toggleTool`์ด ์‹ค์‹œ๊ฐ„ ์Šค๋ƒ…์ƒท์„ ์ฝ์–ด ์—ฐ์† ์กฐ์ž‘์˜ ๋ ˆ์ด์Šค๋กœ ๊ฐฑ์‹ ์ด ์œ ์‹ค๋˜๋˜ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •. `describe` ์‘๋‹ต์€ ์ˆœ์„œ ๋’ค์„ž์ž„์„ ๋ฐฉ์–ดํ•˜๊ณ  ์ตœ์‹  ์š”์ฒญ์˜ ์‘๋‹ต๋งŒ ์ธ์ •
687
+
688
+ ### v2.9.7: ์•„ํ‚คํ…์ฒ˜ ์ˆ˜๋ ดโ€”โ€”DSH web_fetch ์‹ฌ + explicit_only ๊ณ„์•ฝ + ์ƒํƒœ ๊ณ„์•ฝ ํ†ต์ผ(License Apache-2.0์œผ๋กœ)
689
+
690
+ - **License ๋ณ€๊ฒฝ**: MIT โ†’ Apache License 2.0(ํŠนํ—ˆ ํ—ˆ๊ฐ€๊ฐ€ ๋ช…์‹œ๋˜์–ด ์ƒ์šฉ์— ๋” ์•ˆ์ „; ๊ทธ ์™ธ ๋ถˆ๋ณ€)
691
+ - **DSH ํ”Œ๋Ÿฌ๊ทธ์ธ web_fetch ์‹ฌ**: ํ˜ธ์ŠคํŠธ web_fetch๊ฐ€ ใ€Œ์ด URL์„ ์ฝ๋Š”๋‹คใ€๋Š” ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋กœ argo๋ฅผ ์™„์ „ํžˆ ์šฐํšŒํ–ˆ์œผ๋‚˜, fetch provider๋ฅผ ๋“ฑ๋กํ•ด argo_fetch ์ฒด์ธ์„ ํ๋ฅด๊ฒŒ ํ•จ(HTTP ์šฐ์„ , Cloudflare / JS ๋ Œ๋”๋ง ์‹œ ๋ฐ˜ํƒ์ง€ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ž๋™ ์Šน๊ธ‰); search provider์™€ ๋™ํ˜•์˜ ์Œ๋กœ ์‹คํ–‰โ€”โ€”์ƒ์ฃผ MCP ํ’€ ์šฐ์„ , ์ „์†ก์ธต ๊ณ ์žฅ ์‹œ์—๋งŒ CLI ๋‹จ๋ฐœ ํด๋ฐฑ, ๋„๊ตฌ ๋ ˆ๋ฒจ ์˜ค๋ฅ˜์™€ ํƒ€์ž„์•„์›ƒ์€ ์žฌ๋ฐœ์†ก ์•ˆ ํ•จ(ํ˜ธ์ถœ์€ ์ด๋ฏธ ๋๋‚ฌ์œผ๋‹ˆ ์žฌ๋ฐœ์†ก์€ ์—”์ง„ ํ˜ธ์ถœ๊ณผ ์ฟผํ„ฐ๋งŒ ๋ฐฐ๋กœ); ์‹คํŒจ๋Š” ๋‹ค์„ฏ ๋ถ€๋ฅ˜(ํƒ€์ž„์•„์›ƒ / ์ฐจ๋‹จ / ๋นˆ ๊ฒฐ๊ณผ / ์ผ๋ฐ˜ / ์ทจ์†Œ)๋กœ ๋ถ„๋ฅ˜ํ•ด ์‹คํ–‰ ๊ฐ€๋Šฅ ๋ฌธ๊ตฌ๋ฅผ ๋ถ€์—ฌ; ์ƒˆ ์„ค์ • `fetchProviderEnabled` / `fetchProviderId` / `fetchTimeoutMs`(๊ธฐ๋ณธ 25000) / `fetchMaxChars`(๊ธฐ๋ณธ 50000)๋Š” ๊ธฐ๋ณธ ์ „์ฒด ๊ฐœ๋ฐฉยทํƒˆ์ถœ๊ตฌ ํฌํ•จ; ์‹ค์ธก: ํฌ๋กœ์Šค ์˜ค๋ฆฌ์ง„ ์ ํ”„(๋‹จ์ถ• ๋งํฌ, ํ”„๋กœํ† ์ฝœ ์Šน๊ธ‰, ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ป์งˆ)์™€ JS ์ฑŒ๋ฆฐ์ง€ ํŽ˜์ด์ง€๊ฐ€ ํ˜ธ์ŠคํŠธ ๊ตฌ์กฐ์  ์‹คํŒจ์—์„œ argo ์„ฑ๊ณต์œผ๋กœ, ์ผ๋ฐ˜ ์ •์  ํŽ˜์ด์ง€๋Š” ํ’ˆ์งˆ ๋ถˆ๋ณ€
692
+ - **explicit_only ๊ณ„์•ฝ ์ˆ˜๋ ด**: `config._routable_filter`๋Š” ํ™˜๊ฒฝ ํ‘๋ฐฑ ๋ชฉ๋ก / ํ‚ค / ์ฐจ๋‹จ๋งŒ ๊ฑธ๋Ÿฌ explicit_only๋Š” ๊ฑธ์ง€ ์•Š์•„, 18๊ฐœ ๋ช…์‹œ ์ „์šฉ ์—”์ง„(์œ ์ผํ•œ ์œ ๋ฃŒ `deepseek_search` ํฌํ•จ)์ด enabled ํ›„๋ณด ํ’€์— ๋ˆ„์šด ์ฑ„ TF-IDF ์ฃผ์ž…ยทcatch-allยทbackfillยทํด๋ฐฑ ๋“ฑ ์—ฌ์„ฏ ๊ฒฝ๋กœ ์ „๋ถ€๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ์—ˆ์Œโ€”โ€”์•ˆ ํ„ฐ์ง„ ๊ฑด ์ฝ”ํผ์Šค์— ํ‘œ์ œ์–ด๊ฐ€ ์—†์–ด์„œ๋ฟ, ํ•œ ์ค„ ์ถ”๊ฐ€ํ•˜๋ฉด auto ๋‹จ์—์„œ ์œ ๋ฃŒ ์—”์ง„์„ ๋ณ‘๋ ฌ ํ˜ธ์ถœํ•ด ๊ณผ๊ธˆ๋จ; ์ด์ œ ํ›„๋ณด ํ’€ ์œ ์ผ ์ƒ์‚ฐ์ž ํ•œ ๊ณณ์—์„œ ๊ฑธ๋Ÿฌ๋‚ด๊ณ  `tests/test_explicit_only_gate.py`๊ฐ€ ์„ธ ๊ณ„์•ฝ(์ฃผ์ž… ๋ฏธํŽธ์ž… / ํ›„๋ณด ํ’€ ์ œ์™ธ / ๋ช…์‹œ `--engine` ์ •์ƒ ๋‹จ๋ฐœ)์„ ์ž ๊ธˆ
693
+ - **์ƒํƒœ ๊ณ„์•ฝ ํ†ต์ผ**: ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ๋Š” ๊ฑด๊ฐ• closed ์ƒํƒœ์— ์นด์šดํŠธ 0์ผ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๋‹จ๋ฝ(ํŒŒ์ผ ์ž ๊ธˆ ์ œ๋กœยท๋””์Šคํฌ ์žฌ๊ธฐ๋ก ์ œ๋กœ), `(st_mtime_ns, st_size)`๋กœ ํฌ๋กœ์Šค ํ”„๋กœ์„ธ์Šค ๋ณ€๊ฒฝ์„ ๊ฐ์ง€; adaptive ๋ถ€๊ธฐ๋Š” `MAX(created_at)`์„ ๋‹จ์ผ ์ง‘์•ฝ SQL์— ํ†ตํ•ฉํ•˜๊ณ  `batch()` ์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ €๋กœ ๋‹ค์ค‘ ์—”์ง„ ๋ถ€๊ธฐ๋ฅผ ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜์œผ๋กœ; ์ฟผํ„ฐ ๊ณ ๊ฐˆ์€ ์œ ํšจ ์ž๊ฒฉ์ฆ๋ช… ์ง€๋ฌธ์„ ๊ธฐ๋กํ•˜๊ณ  ์ƒˆ ํ‚ค ๊ต์ฒด ์‹œ ์ž๋™ ์ž ๊ธˆ ํ•ด์ œ; route ์บ์‹œ๋Š” ์ฝค๋ณด ์—”์ง„ ๊ณ ๊ฐˆ ๋˜๋Š” ๊ธฐ์กด ๊ณ ๊ฐˆ ์—”์ง„ ํšŒ๋ณต ์‹œ ์ž๋™ ๋ฌดํšจ ์žฌ๊ณ„์‚ฐ; `is_engine_routable` ๋‹จ์ผ ์ž…์ž… ์ˆ ์–ด๊ฐ€ backfill / tfidf / breaker_filter์˜ ๋‹ค์ธต ํ•„ํ„ฐ๋ฅผ ์ˆ˜๋ ด
694
+ - **์Šค์ผ€์ค„๊ณผ ์ „์†ก**: auto / deep ๋‹จ์—์„œ๋„ ์ฟผํ„ฐ ํ•˜๋“œ ๊ณ ๊ฐˆ ์—”์ง„์„ ์ œ๊ฑฐ(fail-open ํด๋ฐฑ); ํ—ค์ง€ ๋Œ€๊ธฐ ์ฐฝ์„ ์ขํžˆ๊ณ  ์กฐ๊ธฐ ์ •์ง€ ํŒ์ •์„ ์™„ํ™”(Wave-1 ํฌ๋กœ์Šค ์—”์ง„ ๋ˆ„์  ์ถฉ์กฑ ์‹œ ์ •์ง€, Wave-2 ๋ฏธ๊ธฐ๋™); POST ์—ฐ๊ฒฐ ํ’€ ๊ฐœํ†ต(anysearch ์•ฝ 320ms / octen ์•ฝ 561ms ๋งค๋ฒˆ ์ ˆ์•ฝ) + MCP ์‚ฌ์ „ ์—ฐ๊ฒฐ; ๊ธฐ์ƒ ๋„๋ฉ”์ธ์— `early_stop_min_results: 1` ์ถ”๊ฐ€
695
+ - **ํ•˜์œ„ ๊ธฐ์ˆ  ์—ด๊ฒฝ๋กœ ๊ฐ์‚ฐ**: js-run์ด SIGALRM์„ MiniRacer ๋„ค์ดํ‹ฐ๋ธŒ timeout์œผ๋กœ ๊ต์ฒดํ•ด crawl / research / mcp ์ž‘์—… ์Šค๋ ˆ๋“œ ํ˜ธ์ถœ ์‹œ ๋ฐ˜๋“œ์‹œ ๋˜์ง€๋˜ `ValueError: signal only works in main thread` ๋ถ•๊ดด๋ฅผ ๊ทผ์ ˆ; local-seek ์žฌ์ •๋ ฌ์ด ๋งค๋ฒˆ O(N) ์ฝ๊ธฐ์™€ JSON ํŒŒ์‹ฑ์„ ํ•ด์†Œ; local-search๊ฐ€ registry๋ฅผ ์žฌ์‚ฌ์šฉํ•ด ์ด์ค‘ YAML ํŒŒ์‹ฑ์„ ํ•ด์†Œ; ego-search๊ฐ€ auto ํ•˜์—์„œ ํƒ์นจ์„ ํ•„์š” ์‹œ ๋‹จ๋ฝ
696
+ - **๊ฒ€์ฆ**: ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ 71 passed; argo ์ „๋Ÿ‰ ํšŒ๊ท€ 4264 passed / 28 skipped; pre-commit ์ผ๊ณฑ ๋ฌธ 123 passed; fetch ์ฒด์ธ ๋Œ€๋น„์—์„œ ์ผ๋ฐ˜ ํŽ˜์ด์ง€ ๋น„ํ‡ดํ–‰, ํฌ๋กœ์Šค ์˜ค๋ฆฌ์ง„ ์ ํ”„์™€ JS ์ฑŒ๋ฆฐ์ง€๋Š” ์‹คํŒจโ†’์„ฑ๊ณต
697
+
698
+ ### v2.9.6: DeepSeek Search ์—”์ง„ + ์ฟผ๋ฆฌ ์—ฐ์‚ฐ์ž ๊ณ„์•ฝ + ไผ ่พ“์ธต ์—ฐ๊ฒฐ ํ’€ + ๋ผ์šฐํŒ… ์Šค๋ƒ…์ƒท ๋ฌธ
699
+
700
+ - ์ƒˆ ์—”์ง„ `deepseek_search`(๊ณต์‹ `api.deepseek.com/v1/tools/search`) ๊ธฐ๋ณธ ํ™œ์„ฑ: `DEEPSEEK_API_KEY` ์—†์„ ๋•Œ๋งŒ ์ž๋™ ์Šคํ‚ต, ๋‚˜๋จธ์ง€ 265 ์†Œ์Šค ๋ฌด์˜ํ–ฅ; ์‹ค์ธก 445-510ms(anysearch 1.7-4.5s / exa 3.7s), authority ๊ถŒ์œ„ ๋“ฑ๊ธ‰ / rerank_score / ๋ฐœํ–‰ ์‹œ๊ฐ์˜ ์…‹ ์ค‘ ์œ ์ผ ์ „ํ•ญ๋ชฉ ์ปค๋ฒ„, ja/ko/es ๋‹ค์–ธ์–ด๋Š” anysearch์™€ ๋Œ€๋“ฑ; ์ข…๋Ÿ‰ ๊ณผ๊ธˆ, ๋„๋ฉ”์ธ combo์— ์•ˆ ๋“ค๊ณ , ๋ช…์‹œ `--engine deepseek_search`๊ฐ€ ์ฃผ ๊ฒฝ๋กœ; DSH ํ˜ธ์ŠคํŠธ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์ž๊ฒฉ์ฆ๋ช… seam์œผ๋กœ ๊ณต์‹ ๋ฐฑ์—”๋“œ์™€ ๊ฐ™์€ key ๊ณต์œ (web Models ํŽ˜์ด์ง€์—์„œ key ๊ต์ฒด ์‹œ ๋‹ค์Œ ํ™‰๋ถ€ํ„ฐ ํšจ๋ ฅ, ์ €์žฅ๋„ ๋กœ๊ทธ๋„ ์•ˆ ๋จ)
701
+ - ์ˆ˜์ •: `--since/--until` ๊ฐ€ deepseek_search์— ์กฐ์šฉํžˆ ๋ฌดํšจ(TIME_CAPABLE_ENGINES์— ์ถ”๊ฐ€)
702
+ - ์ƒˆ `query_operators.py` ์ฟผ๋ฆฌ ์—ฐ์‚ฐ์ž ๊ณ„์•ฝ์ธต: `site:` / `-site:` / `-์–ด` / `-"๊ตฌ"` / `lang:` / `after:` / `before:` ๊ฐ€ ๋‹ค์„ฏ ๊ฐˆ๋ž˜ ํฉ์–ด์ง„ ํ˜•ํƒœ์—์„œ ๊ตฌ์กฐํ™” ์—ฐ์‚ฐ์ž๋กœ ์ˆ˜๋ ด; ๋ผ์šฐํŠธยท์บ์‹œยท์ฟผ๋ฆฌ ์ดํ•ด๋Š” ์ง€๋ น์„ ๋ฒ—๊ธด clean_query๋งŒ ์ธ์‹; `site:` / `-site:` ๊ฐ€ ์ง„์งœ ํ›„์น˜ ํ•„ํ„ฐ ์‹คํ–‰(์„œ๋ธŒ๋„๋ฉ”์ธ ๋งค์นญ, ๋‹ค์ค‘ ์‚ฌ์ดํŠธ OR, ํ•„ํ„ฐ ์ˆ˜๋Š” `site_filtered`์—), ์—ฐ์‚ฐ์ž๋Š” ๊ฒฐ๊ณผ ์บ์‹œ ํ‚ค์— ํŽธ์ž…๋˜์–ด ํ˜ผ์„  ๋ฐฉ์ง€
703
+ - `evidence.py`: Agent ๊ธ‰ ์ด์ธต ์š”์•ฝ `summary` ํ•„๋“œ ์‹ ์„ค(DeepSeek Search ์š”์•ฝ semantics ์ฐธ๊ณ )
704
+ - ไผ ่พ“์ธต ์ด์ค‘ ์ง€๋ถˆ ์ œ๊ฑฐ: POST๊ฐ€ ํ’€ ์—ฐ๊ฒฐ ์žฌ์‚ฌ์šฉ(์‹ค์ธก ๊ฐ™์€ ์—ฐ๊ฒฐ ๋‘ ๋ฒˆ์งธ ์š”์ฒญ์—์„œ anysearch 320ms / octen 561ms ์ ˆ์•ฝ), ๋Œ€์ถœ ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„์™€ ๋ชธํ†ต ์ฝ์€ ๋’ค ๋ฐ˜๋‚ฉ ํฌํ•จ; MCP ์‚ฌ์ „ ์—ฐ๊ฒฐ; ํ• ๋‹น๋Ÿ‰ ๊ณ ๊ฐˆ๊ณผ ์ฃฝ์€ ๋ถ€์ • ์บ์‹œ ์ˆ˜๊ตฌ
705
+ - ๋ผ์šฐํŠธ: octen์ด ์ผ๋ฐ˜ ํด๋ฐฑ ์‚ฌ์Šฌ 2๋ฒˆ์งธ์™€ TF-IDF ํ—ค์ง€ ์Šฌ๋กฏ์— ์ง„์ž…(anysearch ๋–จ๋ฆผ ์ฐฝ p90 3273โ†’1614ms, max 6266โ†’1928ms, ์˜ค๋ฅ˜ 9โ†’0; ๊ฑด์ „ ์ฐฝ์—์„œ๋Š” ์ค‘์œ„๊ฐ’ ์ฐจ ์—†์Œ, ๊ผฌ๋ฆฌ ๋ณดํ—˜์œผ๋กœ ์œ„์น˜), ๋„ํ”ผ ์Šค์œ„์น˜ `ARGO_GENERAL_FALLBACK_LEGACY=1`
706
+ - RRF ๊ถค๋„ ๊ฒฉ๋ฆฌ ๋ช…์ฐจ ๊ฐ์‡  ์ˆ˜์ •: ํ•œ ์—”์ง„์˜ ๋ชจ๋“  ๊ฒฐ๊ณผ๊ฐ€ ๋™์ (์‹ค์ธก anysearch 5๊ฑด ๋ชจ๋‘ 0.017213), ์ถœ๋ ฅ์ด ใ€Œ์—”์ง„ ๊ฐ€์ค‘์น˜ ๋ธ”๋ก ์ด์–ด๋ถ™์ด๊ธฐใ€๋กœ ํ‡ดํ™”; ใ€Œ๊ฐ™์€ ์—”์ง„ ๋‚ด ์ ์ˆ˜ ์—„๊ฒฉ ๋‹จ์กฐ ๊ฐ์†Œใ€๋ฅผ ์ž ๊ทธ๋Š” ์ƒˆ ํ…Œ์ŠคํŠธ
707
+ - Bing ck/a ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ป์งˆ์ด ํ™˜์›๋˜์ง€ ์•Š์•„ ์ง‘ํ•ฉ์ธต์ด ๊ฒฐ๊ณผ๋ฅผ ํ†ต์งธ๋กœ ๊ฑธ๋Ÿฌ๋ƒˆ๋˜ ๋ฌธ์ œ ์ˆ˜์ •(์ตœ๊ทผ 7์ผ 40.2% ๋นˆ ๊ฒฐ๊ณผ): ์˜คํ”„๋ผ์ธ base64url ๋ณตํ˜ธ๋กœ ์ง„๋งํฌ ํ™˜์›, ์ œ๋กœ ๋„คํŠธ์›Œํฌ
708
+ - TF-IDF ๋ฆฌ๋” combo๊ฐ€ `['anysearch','anysearch']` ๋ฅผ ๋ณ‘๋ ฌ ๋‘ ๋ฒˆ ์‹คํ–‰ํ•˜๋˜ ๋ฌธ์ œ ์ˆ˜์ •(ํ• ๋‹น๋Ÿ‰ ๋‘ ๋ฐฐ์— wasted_ms๋Š” 0 ๊ธฐ๋ก): 200๊ฑด ์‹ค์ œ ์ฟผ๋ฆฌ ์žฌ์ƒ, ์ค‘๋ณต combo 1โ†’0
709
+ - ๊ฒ€์ƒ‰ ๊ฐœ์„ : ์‹คํŒจ ๋ถ€์ • ์บ์‹œ, Nitter ํŽ˜์ผ์˜ค๋ฒ„, ๊ถค๋„ ๊ฒฉ๋ฆฌ, X Article ์ถ”์ถœ, ์ฟผ๋ฆฌ ์—์ฝ” ๋ฐฉ์–ด(์กฐ๊ธฐ ์ •์ง€ ๊ฑฐ๋ถ€ + ํšŒ๋ณต ์‚ฌ์Šฌ ์—”์ง„ ์ „ํ™˜)
710
+ - ๊ณตํ•™ํ™”: `scripts/pre-commit` ์†๋ฌธ ์‹ ์„ค(static_lint / module_size_gate / usage_doc / consistency / routing_snapshot / context_budget + engine_catalog, ์‹ค์ธก โ‰ˆ12s); ๋ผ์šฐํŒ… ๊ฒฐ์ • ์Šค๋ƒ…์ƒท ๋ฌธ์ด ๋ผ์šฐํŠธ ๋ฐ˜์ „์„ diff ๊ฐ€๋Šฅํ•œ golden์œผ๋กœ ๋ณ€ํ™˜(์„ธ ์ฃผ์„ ์ง‘ํ•ฉ์˜ ํ•ฉ, 115 ์ฟผ๋ฆฌ, domain๊ณผ kind๋งŒ ๋น„๊ตํ•ด ํ™˜๊ฒฝ ์žก์Œ์— ์˜ํ•œ ์˜ค์  ์—†์Œ); ๊ถค๋„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋™๊ธฐ ํ…Œ์ŠคํŠธ๊ฐ€ ใ€Œํ‘œ์˜ ์—”์ง„๋ช…์€ ์‹ค๋“ฑ๋ก ํ•„์ˆ˜ใ€๋ฅผ ์ž ๊ธˆ
711
+ - DSH ํ”Œ๋Ÿฌ๊ทธ์ธ์€ DSH 0.2.1-rc.2 ๋Œ€์‘: ์‹คํ–‰ ์‹œ ์ž…๊ตฌ ๋“€์–ผ ์Šคํƒ(`startActivation({provider, label, request, signal, delivery})` ์ƒˆ / `start(provider, request)` ๊ตฌ), rc.2์—์„œ `toolFilter` ์ œ๊ฑฐ ํ›„ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‚ด tool guard๊ฐ€ ์›Œ์ปค์˜ `wide_research` ์ค‘์ฒฉ ํ˜ธ์ถœ ์ฐจ๋‹จ; rc.2์—์„œ `wide_research`(planner โ†’ 2 worker โ†’ synthesis, passed=true / 14 sources)์™€ ๋„ค์ดํ‹ฐ๋ธŒ `argo_search`(count=3) ์ข…๋‹จ๊ฐ„ ์‹ค์ธก ํ†ต๊ณผ; 0.2.1-alpha.1 ํ˜ธํ™˜ ๋ถ„์ง€๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„; ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ 46โ†’50
712
+ - DSH ํ™˜๊ฒฝ ๋ฒ„์ „: **DSH 0.2.1-rc.2(ํ˜„ํ–‰ยท๊ฐ€๋™ ์ค‘, ์ข…๋‹จ๊ฐ„ ์‹ค์ธก) + DSH 0.2.1-alpha.1(ํ˜ธํ™˜, ๊ตฌ start ๋ถ„์ง€๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„)**; ๋Œ€์‘ํ‘œ๋Š” `packages/dsh-plugin/README.md`์˜ Compatibility ์ ˆ
713
+
714
+ ### v2.9.5: ํ™˜์œจ ์ „์šฉ ๋„๋ฉ”์ธ + 2์ธต ์ค‘๋ณต ์ œ๊ฑฐ + ์ˆœ์œ„ ์˜ค์ง„๋‹จ ์ˆ˜์ • + ์ฒดํฌ์•„์›ƒ๋ณ„ daemon ๊ฒฉ๋ฆฌ
715
+
716
+ - `config.yaml`: ์ƒˆ ๋„๋ฉ”์ธ `fx_query` โ€” "์œ„์•ˆ/๋‹ฌ๋Ÿฌ ํ™˜์œจ, ์ค‘์‹ฌํ™˜์œจ, ์˜คํ”„์‡ผ์–ด" ์งˆ๋ฌธ์ด ๊ฑฐ์‹œ ๋„๋ฉ”์ธ ๋นˆ ํšŒ์ „ ๋์— ๋ฐฑ๊ณผ์‚ฌ์ „ ํ•ญ๋ชฉ์œผ๋กœ ๋–จ์–ด์ง€์ง€ ์•Š๊ณ  ์ƒํ™˜์œจ + ๋งค์ผ ์ค‘์‹ฌํ™˜์œจ ๋‰ด์Šค๋ฅผ ๋Œ๋ ค์ค€๋‹ค(์‹ค์ธก 675ms, ์ˆ˜์ • ์ „์€ 1411ms์ด๋ฉด์„œ ๋น—๋‚˜๊ฐ)
717
+ - `search_rank.py`: ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ 2์ธต์œผ๋กœ โ€” ์ œ๋ชฉ ์‚ฌ์ดํŠธ suffix ์ •๊ทœํ™”(์ œ๋กœ ์˜์กด) + rapidfuzz ํผ์ง€ ๊ทผ์ ‘์ค‘๋ณต ๊ฒ€์‚ฌ(๊ทผ์ ‘ ๋ช…์ค‘ ๋Œ€์—ญ ๋‚ด์—์„œ๋งŒ ๊ฐ€๋™; `ARGO_DEDUP_FUZZY=0` ์œผ๋กœ ์ฐจ๋‹จ, ๋ฏธ์„ค์น˜ ์‹œ ์ˆœ์ˆ˜ minhash๋กœ ์ž๋™ ํด๋ฐฑ)
718
+ - ์ˆ˜์ •: ์—ดํ™” ๋ฆฌ๋žญํฌ์˜ ์ œ๋ชฉ ๊ตฌ๋ถ„์ž ์˜ค์ง„๋‹จ โ€” `|` / `_` / `โ€”โ€”` ๋ฅผ ํฌํ•จํ•œ ์ œ๋ชฉ์€ ์ผ๋ฅ  ร—0.6์œผ๋กœ ๊ณต์‹ ๋ฌธ์„œ๊ฐ€ 40% ๋ˆŒ๋ ธ๋‹ค; Bocha ํ‚ค ์—†๋Š” auto/deep ์งˆ๋ฌธ ์ „์ฒด๊ฐ€ ์˜ํ–ฅ(ํŒ์ •์€ rank_signals ๋‹จ์ผ ๊ตฌํ˜„์œผ๋กœ ์ˆ˜๋ ด)
719
+ - `query_understanding.py`: ๋ถ€์ • ์ดํ•ด์— ใ€Œไธๆ˜ฏXใ€ ์ถ”๊ฐ€(์˜๋ฌธํ˜• ใ€Œๆ˜ฏไธๆ˜ฏใ€์€ ๋ถ€์ •์œผ๋กœ ์˜ค์ง„๋‹จํ•˜์ง€ ์•Š์Œ)
720
+ - `daemon.py`: socket/pid/ํฌ์ธํ„ฐ ๋“ฑ ์˜จ๋””์Šคํฌ ์ด๋ฆ„์„ ์ฒดํฌ์•„์›ƒ๋ณ„๋กœ ๊ฒฉ๋ฆฌ โ€” ๋‹ค์ค‘ worktree/clone์˜ daemon ์Ÿํƒˆยท์˜ค์‚ดยท"๋ณ€๊ฒฝ์ด ์•ˆ ๋จนํž˜" ์„ธ ๊ณ ์žฅ์„ ๊ทผ์ ˆ
721
+ - ์ƒˆ ์„ ํƒ ์˜์กด rapidfuzz(`pip install rapidfuzz`; install.sh๊ฐ€ ์ž๋™ ์„ค์น˜, ๋ฏธ์„ค์น˜์—ฌ๋„ ์ฝ”์–ด ๊ธฐ๋Šฅ์— ์˜ํ–ฅ ์—†์Œ)
722
+
723
+ ### v2.9.4: ๋ช…์‹œ์  ์—”์ง„ ๋„๋ฉ”์ธ ์†์„ฑ + ๋ณต๊ตฌ ์ฒด์ธ ์ฐจ๋‹จ๊ธฐ + ๊ฒŒ์ดํŠธ ๋™๊ธฐํ™”
724
+
725
+ - `route.py`: `--engine X` ์‹œ `match_domains` ๋ณด์ถฉ์œผ๋กœ ์บ์‹œ TTL ์ผ๊ด„ ์ผ๋ฐ˜ํ™” ์ˆ˜์ •
726
+ - `recovery.py`: ๋‹จ์ผ ์—”์ง„์— ๋Œ€์ฒด ์—†์œผ๋ฉด L1 ๋นˆ ์‹คํ–‰ ๊ฑด๋„ˆ๋œ€
727
+ - `config.yaml`: `org_entity`์— ์ฃผ์ฃผ ์‹ค์‚ฌ ์šฉ์–ด ์ถ”๊ฐ€; `fund_query`์— ์ •์ฑ… ๋ฒ•๊ทœ ์šฉ์–ด ์ถ”๊ฐ€
728
+ - `mcp_launch.sh`: `set -a`๋ฅผ `. "$ENV_FILE"` ํ•œ ์ค„๋กœ ์ถ•์†Œ
729
+ - `sub-skills/local-search/`: ์—”์ง„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ณ„์ธต ํ์‡„ ๋ฐ search_v3 ํ’ˆ์งˆ ํ–ฅ์ƒ
730
+ - ๊ฒŒ์ดํŠธ ๋™๊ธฐํ™”: module_size_gate / ENGINE_CATALOG ์ •ํ•ฉ
731
+
732
+ ### v2.9.3: X ๊ฒŒ์‹œ๋ฌผ ์™„์ „ ํŒจํ‚ค์ง• + ๋ธŒ๋ผ์šฐ์ € ๋กœ๊ทธ์ธ ์ƒํƒœ ๋ ˆ์ธ + ๋กœ์ปฌ ์ฒด์ธ ํ’ˆ์งˆยท์†๋„ ์ˆ˜์ •
733
+
734
+ - **์‹ ๊ทœ**: `argo tweet` โ€” ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ์ง€์ • X ๊ฒŒ์‹œ๋ฌผ์˜ ์ „๋ฌธยท์Šค๋ ˆ๋“œ/์ธ์šฉ/๋ฆฌํฌ์ŠคํŠธยท์ธํ„ฐ๋ž™์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ํŒจํ‚ค์ง•; ๊ธฐ๋ณธ์€ ํ…์ŠคํŠธ๋งŒ, `--out`์œผ๋กœ 4ํŒŒ์ผ ์„ธํŠธ(post.md/raw.json/manifest.json/CHECKLIST.md), `--media`๋กœ ์ด๋ฏธ์ง€/๋™์˜์ƒ ํ•„์š” ์‹œ ๋‹ค์šด๋กœ๋“œ; ์‹คํŒจ ์›์ธ์€ ์‚ฐ์ถœ๋ฌผ์— ๊ฐ€์‹œํ™”
735
+ - **์‹ ๊ทœ**: `argo auth` ๋ธŒ๋ผ์šฐ์ € ๋กœ๊ทธ์ธ ์ƒํƒœ ๋ ˆ์ธ โ€” `login/status/logout`์œผ๋กœ ์‚ฌ์ดํŠธ๋ณ„ ์˜๊ตฌ ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœํ•„ ๊ด€๋ฆฌ; QR์„ ํ•œ ๋ฒˆ ์Šค์บ”ํ•˜๋ฉด ๋กœ๊ทธ์ธ ํ•„์ˆ˜ ํŽ˜์ด์ง€๋„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ; ์ฟ ํ‚ค๋Š” Chrome ์ž์ฒด ์•”ํ˜ธํ™” ์ €์žฅ์†Œ์—๋งŒ ๋ณด๊ด€๋˜๋ฉฐ argo๊ฐ€ ์ฝ์ง€ ์•Š๊ณ , ๋กœ๊ทธ์ธ ์ƒํƒœ ๊ฒฐ๊ณผ์—๋Š” `login_state_used`๋ฅผ ๋ถ™์—ฌ ๊ณต์œ  ์บ์‹œ์—์„œ ์ œ์™ธ(`ARGO_AUTH_FETCH`๋กœ ํ™œ์„ฑํ™”)
736
+ - **์ •ํ™•์„ฑ**: ์ค‘๊ตญ์–ด ๋กœ์ปฌ ์ฒด์ธ์ด Sogou/Baidu ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ป์งˆ์„ ์„ธ์…˜ ์—†์ด ์‹ค์ œ URL๋กœ ํ•ด์„(๋ณด์กด ๊ฒฐ๊ณผ 1โ†’5๊ฑด); ์ธํ…ํŠธ ๊ฒŒ์ดํŠธ ์˜ค์ž ๊ธˆ ์ˆ˜์ •("ํŠœํ† ๋ฆฌ์–ผ"๋ฅ˜ ์ฟผ๋ฆฌ๊ฐ€ ๋‹จ์ผ ์—”์ง„์— ๊ณ ์ •๋˜์ง€ ์•Š์Œ); ์ฒ ๋„ ํ…Œ์ด๋ธ” ํ–‰ ์‹๋ณ„ URL๋กœ ํ›„๋ณด ํผ๋„ ์••์ถ•(10โ†’1)์„ ์‹ค์ œ๋Œ€๋กœ 10โ†’10์œผ๋กœ ์ˆ˜์ •
737
+ - **์†๋„**: ์ปจ์„ผ์„œ์Šค ์œ ์˜ˆ ์ ์‘ํ™”(์ถฉ๋ถ„ํžˆ ์ „๋‹ฌํ•œ ์ฒซ ์—”์ง„์œผ๋กœ ๋ฐฉ์ถœ; ์˜์–ด ๋””์ŠคํŒจ์น˜ ~3.0sโ†’2.2-2.5s); ๋กœ์ปฌ ๋กฑํ…Œ์ผ ์กฐ๊ธฐ ์ค‘๋‹จ; ๋กœ์ปฌ ์ด๋ฏธ์ง€ ํ•‘๊ฑฐํ”„๋ฆฐํŠธ๋ฅผ mmap ํ–‰๋ ฌ๊ณฑ์œผ๋กœ(77k์žฅ 158msโ†’3.9ms, ๊ธฐ๋ณธ ๋น„ํ™œ์„ฑ `ARGO_LOCAL_IMAGE=1`); ์—์ด์ „ํŠธ ์†Œ๋น„ ์ž๋™ ์Šฌ๋ฆผํ™” + markdown ์ฝ˜ํ…์ธ  ํ˜‘์ƒ, MCP ํ˜ธ์ถœ๋‹น ๊ณ ์ • ์˜ค๋ฒ„ํ—ค๋“œ โˆ’32%
738
+ - **์†Œ์Šค**: ๋„๋ฉ”์ธ ์ฐธ์กฐ ์—†๋Š” 43๊ฐœ ์—”์ง„์„ ๊ฐ ๋„๋ฉ”์ธ์— ๋ฐฐ์„ ; route_lang ์–ธ์–ด ๋ผ์šฐํŒ…; ํ‚ค ๋ถˆํ•„์š” ๊ธˆ์œต ์†Œ์Šค 3๊ฑด ์ถ”๊ฐ€; `--academic-deep` ์›ํ”Œ๋ž˜๊ทธ ํ•™์ˆ  ๋ฉ€ํ‹ฐ์†Œ์Šค; ์ฒ ๋„ ํ™˜์Šนยท๊ฒฝ์œ  ์กฐํšŒ
739
+ - **์•ˆ์ •์„ฑ**: js-run์„ fetch ์ฒด์ธ ์ฒซ ๋ฒˆ์งธ ๋ ˆ์ธ์œผ๋กœ ์ ‘์„ (Chrome ํ•‘๊ฑฐํ”„๋ฆฐํŠธ ์žฌ์‹œ๋„); jsrun ์„ธ์…˜ ๋ˆ„์ˆ˜์™€ ๋ฐฑ์˜คํ”„ ์˜ˆ์‚ฐ ์ˆ˜์ •; ํƒ€์ž„์•„์›ƒ ์กฐ์ž„(redskill 60โ†’15s)๊ณผ ์„ ์–ธ ์ •์ฑ… ์‚ผ๋ถ„ํ• 
740
+
741
+ ### v2.9.2: DSH 0.2.1-alpha.1 ํ˜ธํ™˜ ๊ฒ€์ฆ + ๋ผ์šฐํŒ…/๊ฐ€๋“œ ์ˆ˜์ • + js-run ์„œ๋ธŒ ์Šคํ‚ฌ
742
+
743
+ - **ํ˜ธํ™˜์„ฑ**: DSH ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ตœ์‹  DSH 0.2.1-alpha.1์—์„œ ์‹ค์ธก ๊ฒ€์ฆ โ€” ๋„ค์ดํ‹ฐ๋ธŒ ํผ์ŠคํŠธํด๋ž˜์Šค ๋„๊ตฌ / web_search seam / wide_research ์‚ผํ˜•ํƒœ ๋ชจ๋‘ ์ •์ƒ ์ž‘๋™; `argo mcp inject`์— WorkBuddy๋ฅผ ์ถ”๊ฐ€ํ•ด 7๋ฒˆ์งธ ํ˜ธ์ŠคํŠธ๊นŒ์ง€ ์ง€์›
744
+ - **์ •ํ™•์„ฑ**: TF-IDF ์•ฝ์ฆ๊ฑฐ ๋ณด์กฐ ์†Œ์Šค ๊ฐ•๋“ฑ, ์ฃฝ์€ ์†Œ์Šค ํ”Œ๋กœ์–ด + ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ์Šฌ๋กฏ ์žฌ์ถฉ์ „, ์ฟผํ„ฐ ์†Œ์ง„ ์—”์ง„ ๊ฒฉ๋ฆฌ, serp_guard ์˜คํƒ ์ˆ˜์ •
745
+ - **์†๋„์™€ ์•ˆ์ •์„ฑ**: engines/evidence ์ง€์—ฐ ์ž„ํฌํŠธ(import๋Ÿ‰ โˆ’50%), ์–ด๋“œ๋ฏธ์…˜ ์กด์žฌ ์ง‘ํ•ฉ ๋‹จ๋ฝ(open 261 โ†’ 99), MCP ์ง„์ž…/์ˆ˜์น˜ ์ธ์ž ๊ฐ€๋“œ; ์‹ ๊ทœ ์„œ๋ธŒ ์Šคํ‚ฌ `sub-skills/js-run`(๋ธŒ๋ผ์šฐ์ € ์—†์ด ์›น JS ์‹คํ–‰, P50 โ‰ˆ 1ms)
746
+
747
+ ### v2.9.1: ์ฝ˜ํ…์ธ  ํ’ˆ์งˆ ์ตœ์ ํ™” + ์ฝ˜ํ…์ธ  ํŒœ ๋Œ€์‘ + ์ตœ์‹  ํ™˜๊ฒฝ ์ ์‘
748
+
749
+ - **๊นจ๋—ํ•จ**: ์ฝ˜ํ…์ธ  ํ’ˆ์งˆ ํ‰๊ฐ€๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ  ์ฝ˜ํ…์ธ  ํŒœ ๋Œ€์‘ ๋Šฅ๋ ฅ์„ ๊ฐ•ํ™” โ€” ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์˜ ์ €ํ’ˆ์งˆยท๋Œ€๋Ÿ‰ ์ƒ์„ฑ ์ฝ˜ํ…์ธ ๋ฅผ ๋” ํšจ๊ณผ์ ์œผ๋กœ ์‹๋ณ„ํ•˜๊ณ  ํ•„ํ„ฐ๋ง
750
+ - **ํ˜ธํ™˜์„ฑ**: ์ตœ์‹  ๋ฒ„์ „์— ์ ์‘ํ•˜์—ฌ ํ˜„์žฌ ํ™˜๊ฒฝ๊ณผ ์›ํ™œํ•˜๊ฒŒ ํ˜‘์—…
751
+ - **์•ˆ์ •์„ฑ**: ๋กœ์ปฌ ๊ฒ€์ƒ‰์— ์ž์ฒด ์„ค์น˜ ํŠธ๋ฆฌ ๊ฐ€๋“œ๋ฅผ ์ถ”๊ฐ€ โ€” ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ argo ์ž์‹ ์˜ ์†Œ์Šค ์ฝ”๋“œ๋กœ ์˜ค์—ผ๋˜์ง€ ์•Š๋„๋ก
752
+
753
+ ### v2.9.0: ์†Œ์Šค ์ตœ์ ํ™” + ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ CLI ๋Œ€๋“ฑ + ์†Œ์ˆ˜ ์–ธ์–ด
754
+
755
+ - **์ถฉ์‹ค**: ์†Œ์Šค 237 โ†’ 253(๋ฌด์„ค์ • 198 โ†’ 219). 14๊ฐœ ์†Œ์ˆ˜ ์–ธ์–ด ๋กœ์ปฌ ๋‰ด์Šค ์†Œ์Šค, CORE ์˜คํ”ˆ์•ก์„ธ์Šค ์ „๋ฌธ ์†Œ์Šค, TinEye ์—ญ๋ฐฉํ–ฅ ์ด๋ฏธ์ง€ ๊ฒ€์ƒ‰, Bing RSS ์•ˆ์ • ์ถœ๊ตฌ ๋“ฑ ์ถ”๊ฐ€; ๋ฐ”์ด๋‘์™€ ์†Œ๊ณ ์šฐ ๋‘ ์ƒ๋ก ์†Œ์Šค ๋ถ€ํ™œ
756
+ - **์ •๋ ฌ**: CLI 18๊ฐœ ๋ช…๋ น๊ณผ MCP 19๊ฐœ ๋„๊ตฌ๊ฐ€ ์ผ๋Œ€์ผ ๋Œ€์‘ โ€” ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ CLI ๊ฒ€์ƒ‰ ๋Šฅ๋ ฅ์ด ์ฒ˜์Œ์œผ๋กœ ์™„์ „ํžˆ ๋Œ€๋“ฑ
757
+ - **๋‹ค๊ตญ์–ด**: 14๊ฐœ ์†Œ์ˆ˜ ์–ธ์–ด ์†Œ์Šค(ํƒ€์ด/์•„๋ž์–ด/ํžˆ๋ธŒ๋ฆฌ์–ด/๊ทธ๋ฆฌ์Šค์–ด/ํžŒ๋””์–ด/๋ฒ ํŠธ๋‚จ์–ด/ํ„ฐํ‚ค์–ด/์ธ๋„๋„ค์‹œ์•„์–ด ๋“ฑ) ์ถ”๊ฐ€, ์ฟผ๋ฆฌ ์–ธ์–ด์— ๋”ฐ๋ผ ์ž๋™ ๋ฐฐ์น˜
758
+ - **๊ณ ์†**: ์ž„ํฌํŠธ ์ฒด์ธ โˆ’79%, n=200 ์žฌ๋žญํ‚น 33ms โ†’ 1.5ms, ์บ์‹œ ์ ์ค‘๋ฅ ์€ ์•ฝ 60%์—์„œ ๊ฑฐ์˜ ๋ฏธ์Šค ์—†์ด
759
+ - **์‹ ๋ขฐ์„ฑ**: ์ฟผํ„ฐ ์“ฐ๊ธฐ ๊ฒฝ๋กœ์˜ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์•ˆ์ „์„ฑ ์ˆ˜์ •, ์กฐ๊ธฐ ์ค‘๋‹จ ๊ฒฐ๊ณผ๊ฐ€ ํƒ€์ž„์•„์›ƒ์œผ๋กœ ์˜ค๊ธฐ๋˜์ง€ ์•Š์œผ๋ฉฐ, `argo stats`๋กœ ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์ด ์ž์ฒด ์žฅ๋ถ€๋ฅผ ๊ฐ€์ง
760
+
761
+ ### v2.8.9: ์ถœ๋ ฅ ๊ฒฝ๋Ÿ‰ํ™” + ๋” ๋น ๋ฅด๊ณ  ํ’๋ถ€ํ•œ ๊ฒ€์ƒ‰ + ํ•ด์™ธ ๋ฏธ๋””์–ด ๋ฐ ํŒฉํŠธ์ฒดํฌ ์†Œ์Šค 5๊ฐœ
762
+
763
+ - **๊ฒฝ๋Ÿ‰ํ™”**: ๊ธฐ๋ณธ ์ถœ๋ ฅ โˆ’66%(๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์„ธ ๋ฒˆ ์“ฐ์ง€ ์•Š์Œ); ๋ฐ˜๋ณต ์ฟผ๋ฆฌ โˆ’30%(๋ผ์šฐํŒ… ๊ฒฐ์ • ์บ์‹œ); ๋А๋ฆฐ ๋„คํŠธ์›Œํฌ ๋Œ€๊ธฐ โˆ’36%(์ฃผ ์†Œ์Šค๊ฐ€ 0.8์ดˆ๋ฅผ ๋„˜๊ธฐ๋ฉด ์ž๋™์œผ๋กœ ๋ฐฑ์—… ์†Œ์Šค ์ถ”๊ฐ€ ๊ธฐ๋™)
764
+ - **์ถฉ์‹คํ™”**: ๋ฆฌ์ฝœ +35%, ์ˆ˜์ง‘ ์ง€์—ฐ โˆ’30%; ๋ณธ๋ฌธ ๊ตฌ์กฐ ๋ณด์กด 0/6 โ†’ 6/6(์ œ๋ชฉยท๋ชฉ๋กยทํ‘œ๊ฐ€ ๋ˆŒ๋ฆฌ์ง€ ์•Š์Œ); ์ค‘๊ตญ์–ด ์ฝ˜ํ…์ธ ๊ฐ€ ์ฒด๊ณ„์ ์œผ๋กœ ์ €ํ’ˆ์งˆ ํŒ์ •๋ฐ›์ง€ ์•Š์Œ
765
+ - **์ถ”๊ฐ€**: ์†Œ์Šค 232 โ†’ 237(ํ‚ค ๋ถˆํ•„์š” 194 โ†’ 198, ์ „๋ถ€ ๋ฌด๋ฃŒ โ€” The Guardian, France 24, DW, ํŒฉํŠธ์ฒดํฌ FactCheck.org / Full Fact ๋ฏธยท์˜ ์–‘๊ถŒ); ์ฃฝ์€ ์†Œ์Šค gdelt ํ์ง€
766
+ - **์‹ ๋ขฐ์„ฑ**: ์ˆซ์ž๊ฐ€ ์„œ๋กœ ๋ชจ์ˆœ๋˜๋˜ ์—ฌ์„ฏ ์žฅ๋ถ€ ๊ฒฐํ•จ ์ˆ˜์ •; 6๋‹จ ํผ๋„๋กœ 0๊ฑด์ด ์–ด๋А ์ธต์—์„œ ๋ฌด๋„ˆ์กŒ๋Š”์ง€ ํŠน์ • ๊ฐ€๋Šฅ; ์˜คํ”„๋ผ์ธ ์žฌ์ƒ ๋„๊ตฌ๋กœ ๋ณ€๊ฒฝ ํšจ๊ณผ๋ฅผ ๋‹น์ผ ๊ฒ€์ฆ. ์ž์„ธํžˆ๋Š” [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.8.9.md)
767
+
768
+ ### v2.8.8: ์‹ค์‚ฌ์šฉ์ž ๋ฒ„๊ทธ ์ˆ˜์ • + ์ „๋ฉด ์†๋„ ๊ฐœ์„  + ์†Œ์Šค 232๊ฐœ
769
+
770
+ - **์ˆ˜์ •**: ๋ฌธ์„œ ์ถ”์ฒœ ์ด๋ฆ„์œผ๋กœ ํ‚ค๋ฅผ ์„ค์ •ํ•ด๋„ ์—”์ง„์ด ์กฐ์šฉํžˆ 0๊ฑด์„ ๋ฐ˜ํ™˜ํ•˜๋˜ ๋ฌธ์ œ(#12), ์ˆ˜์ง‘ ์ฒด์ธ์ด ํ”„๋ก์‹œ๋ฅผ ๋ฌด์‹œํ•ด GitHub ๊ฐ™์€ ์‚ฌ์ดํŠธ๊ฐ€ ํ•ญ์ƒ ์‹คํŒจํ•˜๋˜ ๋ฌธ์ œ(#13) โ€” ์ด์ œ `ARGO_PROXY`, config ๋„๋ฉ”์ธ๋ณ„ ๊ทœ์น™, ํ‘œ์ค€ ํ”„๋ก์‹œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ๋ชจ๋‘ ์ž‘๋™ํ•˜๊ณ  `NO_PROXY` ์กด์ค‘
771
+ - **์†๋„**: ๋ช…๋ น์–ด ์ฝœ๋“œ ์Šคํƒ€ํŠธ 2.1s โ†’ 0.55s; ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์„ค์ • ์บ์‹œ 50โ€“82ms โ†’ 16โ€“18ms; ๋งค ๊ฒ€์ƒ‰์— ๋‹จ๊ณ„๋ณ„ ์†Œ์š” ์‹œ๊ฐ„๊ณผ ์˜ˆ์‚ฐ ์†Œ๋น„๋ฅผ ์ถœ๋ ฅํ•ด ์–ด๋””๊ฐ€ ๋А๋ฆฐ์ง€ ์ถ”์ธก ๋ถˆํ•„์š”(`--no-timing`์œผ๋กœ ๋น„ํ™œ์„ฑํ™”)
772
+ - **์‹ ๊ทœ**: ์†Œ์Šค 218 โ†’ 232(์„ค์ • ์—†์ด ๋ฐ”๋กœ ์“ฐ๋Š” 184 โ†’ 194, ๋ชจ๋‘ ํ‚ค ๋ถˆํ•„์š”: ์ค‘๊ตญ ํŠธ๋ Œ๋“œ ๋ณด๋“œ, ๋ณด์•ˆ ์ทจ์•ฝ์ , ์˜คํ”ˆ ์•ก์„ธ์Šค ํ•™์ˆ , ์Šคํ‚ฌ ๋””๋ ‰ํ„ฐ๋ฆฌ, ์—์ด์ „ํŠธ ๊ฒ€์ƒ‰), ์ง๋‹ต `argo answer`, ์›น ๊ด€์ฐฐ `argo watch`, CLI/MCP ๋„๊ตฌ๋ฉด ์ •๋ ฌ
773
+ - **์•ˆ์ •์„ฑ**: 3๊ฐœ OS์˜ ๊ด€๋ก€ ๊ฒฝ๋กœ(`argo paths` ์ž๊ธฐ์ ๊ฒ€ ์‹ ๊ทœ), Python 3.9 ์ง€์›, ์กฐ์šฉํžˆ ์ง„ํ–‰๋˜๋˜ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ •์งํ•˜๊ฒŒ ๊ธฐ๋ก. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.8.8.md)
774
+
775
+ ### v2.8.7: ์†Œ์Šค 218๊ฐœ๋กœ ํ™•์ถฉ + ์ˆ˜์ • ์ผ๊ด„
776
+
777
+ - **์†Œ์Šค ํ™•์ถฉ**: 168 โ†’ 218 ์†Œ์Šค, 72 โ†’ 89 ๋„๋ฉ”์ธ (StackExchange Q&A, DOI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ์ทจ์•ฝ์  ์ธํ…”, ์ œํ’ˆ ์ˆ˜๋ช…์ฃผ๊ธฐ ๋“ฑ ๊ณต์‹ ์†Œ์Šค ์ถ”๊ฐ€), ๋ณธ๋ฌธ ํš๋“ ์งํ†ต ์ฑ„๋„ 3๊ฐœ ์ถ”๊ฐ€
778
+ - **์ˆ˜์ • ์ผ๊ด„**: ๋ฉ€ํ‹ฐ ์—”์ง„ ๋ผ์šฐํŒ…, ๋นˆ ๊ฒฐ๊ณผ ํด๋ฐฑ, ์ค‘๊ตญ์–ด ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ, ๋กœ์ปฌ ๊ฒ€์ƒ‰ ์—ดํ™” ๋“ฑ; ์ž์„ธํ•œ ๋‚ด์šฉ์€ [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.8.7.md)
779
+
780
+ ### v2.8.6: ๊ฒ€์ƒ‰ ๊ณ ์†ํ™” + ๋ฉ€ํ‹ฐ ์†Œ์Šค ๋ถ„๋‹ด
781
+
782
+ - ์—”์ง„ ๋ ˆ์ด์‹ฑ, ์ง€ํ›„ ์„ธ ์†Œ์Šค ๋ถ„๋‹ด, ์–ธ์–ด/ํ•™์ˆ  ๋””์ŠคํŒจ์น˜ ํ™•๋Œ€, ์ฃฝ์€ ์†Œ์Šค ๊ฒŒ์ดํŠธ
783
+
784
+ ### v2.8.5: DSH ํ”Œ๋Ÿฌ๊ทธ์ธ ๋„๊ตฌ ๋„ค์ดํ‹ฐ๋ธŒํ™” + MCP ๊ธฐ๋ณธ ๋” + Windows ํ˜ธํ™˜
785
+
786
+ - **ํ”Œ๋Ÿฌ๊ทธ์ธ ๋„๊ตฌ ๋„ค์ดํ‹ฐ๋ธŒํ™”**: `argo_search` / `argo_fetch`๊ฐ€ 1๊ธ‰ ๋„ค์ดํ‹ฐ๋ธŒ ๋„๊ตฌ๋กœ ๋“ฑ๋ก๋˜์–ด MCP ์—ฐ๊ฒฐ ์—†์ด ๊ธฐ๋ณธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ; ์Šคํ‚ค๋งˆ๋Š” ๋‹จ์ผ ์ง„์› `mcp_tools.py`์—์„œ ์ž๋™ ์ƒ์„ฑ๋˜์–ด ์–‘์ชฝ ๋ชจ๋‘ ๋“œ๋ฆฌํ”„ํŠธ ์—†์Œ; `argo_research`๋ฅผ ์ œ์™ธํ•œ 18๊ฐœ ๋„๊ตฌ๋ฅผ `nativeTools`๋กœ ์ˆ˜์‹œ ํ™œ์„ฑํ™” ๊ฐ€๋Šฅ
787
+ - **MCP ๊ธฐ๋ณธ ๋”**: 3๊ฐ€์ง€ ์ ‘์† ํ˜•ํƒœ(์ˆ˜์š” ์‹œ ๋งˆ์šดํŠธ MCP / ๊ธฐ๋ณธ ์ง„์ž… ๋„ค์ดํ‹ฐ๋ธŒ ๋„๊ตฌ / web_search seam); ํ‰์†Œ ์ƒ์ฃผ ํ† ํฐ ๋น„์šฉ 0, 19๊ฐœ ๋„๊ตฌ ์ „์ฒด๊ฐ€ ํ•„์š”ํ•˜๋ฉด profile patch ํ•œ ์žฅ์œผ๋กœ ์—ถ
788
+ - **Windows ํ˜ธํ™˜**(์ปค๋ฎค๋‹ˆํ‹ฐ PR #11): ์ž„์‹œ ๊ฒฝ๋กœ๋Š” ์‹œ์Šคํ…œ temp, GBK ์ธ์ฝ”๋”ฉ ์ˆ˜์ •, `python3`/`python` ๋Ÿฐํƒ€์ž„ ํ•ด์„, symlink๋Š” ๊ถŒํ•œ ์—†์œผ๋ฉด junction์œผ๋กœ ํด๋ฐฑ, PowerShell ์ผ๊ด„ ์„ค์น˜ `install.ps1` ์ถ”๊ฐ€
789
+ - **์ฟผํ„ฐ ์ž๊ฐ€ ์น˜์œ **: HTTP 200์— ์ˆจ์€ ์›๊ฒฉ ์ฟผํ„ฐ ๊ณ ๊ฐˆ์„ ๊ฐ์ง€ํ•˜๊ณ , ๋ผ์šฐํŒ…์ด ํ•ด๋‹น ์—”์ง„์„ ์ œ์™ธํ•ด ๋ฐฑ์—… ์†Œ์Šค๋กœ ์ „ํ™˜, ๋‹ค์Œ ์ฟผํ„ฐ ์ฃผ๊ธฐ์— ์ž๋™ ๋ณต๊ท€
790
+ - **ํŽ˜์น˜ ์ „์—ญ deadline**: `ARGO_FETCH_DEADLINE_S`(๊ธฐ๋ณธ 60s)๋กœ ํด๋ฐฑ ์‚ฌ์Šฌ ์ด ์‹œ๊ฐ„ ์ƒํ•œ; 429/503 ์ •์ง€ ์‹œ๊ทธ๋„ ์กด์ค‘; tinyfish ๋ Œ๋”๋ง + `.md` ๋ณ€ํ˜• ํ”„๋กœ๋ธŒ
791
+
792
+ ### v2.8.4: ๋กœ์ปฌ ๋ฐ์ดํ„ฐ ์œตํ•ฉ + ์› ์ปค๋งจ๋“œ MCP ์—ฐ๊ฒฐ
793
+
794
+ - **์‹ฌ์ธต ์—ฐ๊ตฌ๊ฐ€ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋จน์„ ์ˆ˜ ์žˆ์Œ**: ์ž‘์—… ํŒจํ‚ค์ง€์— `file_inputs`(1์ฐจ CSV / XLSX / ๋ฌธํ—Œ; ํ•ด์‹œ๋Š” ๋“ฑ๊ธฐ, ๋‚ด์šฉ์€ ๋„ฃ์ง€ ์•Š์Œ) + `recompute`(์ƒŒ๋“œ๋ฐ•์Šค ์žฌ๊ณ„์‚ฐ; ๋ถˆ์ผ์น˜๋Š” ํ”Œ๋ž˜๊ทธ)
795
+ - **MCP ์—ฐ๊ฒฐ์„ ๋” ์ด์ƒ ์†์œผ๋กœ ์•ˆ ๊ณ ์นจ**: `argo mcp inject`๊ฐ€ Claude Code / Cursor / Windsurf / Codex / OpenCode / Cline์— ๊ธฐ๋ก(์›์ž ์“ฐ๊ธฐ + ๋ฐฑ์—… + ๋˜๋Œ๋ฆฌ๊ธฐ)
796
+ - **๊ฐ„๋‹จํ•œ ์ฟผ๋ฆฌ๋Š” ์‹ธ๊ฒŒ ์œ ์ง€**: ์ •๊ทœํ™” + ๋ณต์žก๋„ ๊ฒŒ์ดํŠธ + ์†Œ์…œ/ํ”Œ๋žซํผ ๋ฌธ๋ฒ• ์šฐ์„  + ์ค‘๊ตญ์–ด ์—”์ง„์„ ๋ฒ„๋ ค๋„ ํ›„๋ณด๋ฅผ ๊ณ„์† ๋ด„
797
+ - **Keenable**์„ ๋ฌด๋ฃŒ ์ฒดํ—˜ ์›น ๊ฒ€์ƒ‰ ์†Œ์Šค๋กœ ์ถ”๊ฐ€
798
+ - **๋ณด์•ˆ**: recompute๊ฐ€ ์™ธ๋ถ€ ํ”„๋กœ์„ธ์Šค ์ถœ๋ง์„ ์ฐจ๋‹จ; ํ˜ธ์ŠคํŠธ ๊ฒฝ๋กœ๋Š” ์„ค์น˜ ์ธ์ง€
799
+
800
+ > ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ํ‘œ์™€ ๊ฐ ๋ฒ„์ „ [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/)ใ€‚
801
+
802
+ ---
803
+
804
+ ## ๋ณ€๊ฒฝ ์ด๋ ฅ
805
+
806
+ | ๋ฒ„์ „ | ๋น„๊ณ  |
807
+ |---------|-------|
808
+ | **v2.9.7** | **์•„ํ‚คํ…์ฒ˜ ์ˆ˜๋ ด + DSH web_fetch ์‹ฌ + License Apache-2.0์œผ๋กœ**: MIT โ†’ Apache License 2.0; ํ˜ธ์ŠคํŠธ web_fetch๊ฐ€ argo_fetch ์ฒด์ธ์„ ํ๋ฆ„(HTTP ์šฐ์„ , JS ์ฑŒ๋ฆฐ์ง€ ์‹œ ๋ธŒ๋ผ์šฐ์ € ์Šน๊ธ‰, ์Œ๋กœ ์‹คํ–‰, ๋„๊ตฌ ์˜ค๋ฅ˜ ์žฌ๋ฐœ์†ก ์—†์Œ, ์‹คํŒจ ๋‹ค์„ฏ ๋ถ„๋ฅ˜); 18๊ฐœ explicit_only ์—”์ง„์„ ๋ผ์šฐํŒ… ํ›„๋ณด ํ’€์—์„œ ์ œ๊ฑฐ(auto ๋‹จ ์œ ๋ฃŒ ์—”์ง„ ์˜ค๊ณผ๊ธˆ ๊ตฌ๋ฉ ํ์‡„); ํšŒ๋กœ ๊ฑด๊ฐ• ๋‹จ๋ฝ, adaptive ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜ ๋ถ€๊ธฐ, ์ฟผํ„ฐ ํ‚ค ๊ต์ฒด ์ž๋™ ์ž ๊ธˆ ํ•ด์ œ, route ์บ์‹œ ๊ณ ๊ฐˆ ๋ฌดํšจ; auto/deep ํ•˜๋“œ ๊ณ ๊ฐˆ ์ œ์™ธ + ์กฐ๊ธฐ ์ •์ง€ ์™„ํ™” + POST ์—ฐ๊ฒฐ ํ’€; js-run ๋น„๋ฉ”์ธ์Šค๋ ˆ๋“œ ๋ถ•๊ดด ์ˆ˜์ •. |
809
+ | **v2.9.6** | **DeepSeek Search ์—”์ง„ + ์ฟผ๋ฆฌ ์—ฐ์‚ฐ์ž ๊ณ„์•ฝ + ไผ ่พ“์ธต ์—ฐ๊ฒฐ ํ’€ + ๋ผ์šฐํŒ… ์Šค๋ƒ…์ƒท ๋ฌธ**: ์ƒˆ ์—”์ง„ `deepseek_search` ๊ธฐ๋ณธ ํ™œ์„ฑ(key ์—†์œผ๋ฉด ์ž๋™ ์Šคํ‚ต; 445-510ms, authority/rerank_score/๋ฐœํ–‰ ์‹œ๊ฐ ์œ ์ผ ์ „ํ•ญ๋ชฉ ์ปค๋ฒ„, ์‹œ๊ฐ„์ฐฝ ์ง„์งœ ํšจ๋ ฅ; DSH๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์ž๊ฒฉ์ฆ๋ช… seam์œผ๋กœ key ๊ณต์œ ); `site:`/`-site:`/`-์–ด`/`lang:`/`after:`/`before:` ๊ฐ€ ์—ฐ์‚ฐ์ž ๊ณ„์•ฝ์ธต์œผ๋กœ ์ˆ˜๋ ดํ•ด ์ง„์งœ ํ›„์น˜ ํ•„ํ„ฐ + ์บ์‹œ ํ‚ค ํŽธ์ž…; POST ์—ฐ๊ฒฐ ํ’€(ํšŒ๋‹น 320-561ms ์ ˆ์•ฝ) + MCP ์‚ฌ์ „ ์—ฐ๊ฒฐ; octen์ด ํด๋ฐฑ๊ณผ ํ—ค์ง€ ์Šฌ๋กฏ์—(p90 3273โ†’1614ms, ๋„ํ”ผ ์Šค์œ„์น˜ `ARGO_GENERAL_FALLBACK_LEGACY=1`); RRF ๋ช…์ฐจ ๊ฐ์‡ ์™€ Bing ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ป์งˆ(40.2% ๋นˆ ๊ฒฐ๊ณผ) ์ˆ˜์ •; pre-commit ์†๋ฌธ๊ณผ ๋ผ์šฐํŒ… ์Šค๋ƒ…์ƒท ๋ฌธ ์‹ ์„ค; DSH ํ”Œ๋Ÿฌ๊ทธ์ธ์€ 0.2.1-rc.2 ๋“€์–ผ ์Šคํƒ + alpha.1 ๋‹จ์œ„ ์ปค๋ฒ„. |
810
+ | **v2.9.5** | **ํ™˜์œจ ์ „์šฉ ๋„๋ฉ”์ธ + 2์ธต ์ค‘๋ณต ์ œ๊ฑฐ + ์ˆœ์œ„ ์˜ค์ง„๋‹จ ์ˆ˜์ • + ์ฒดํฌ์•„์›ƒ๋ณ„ daemon ๊ฒฉ๋ฆฌ**: ์ƒˆ ๋„๋ฉ”์ธ `fx_query`(ํ™˜์œจ/์ค‘์‹ฌํ™˜์œจ์„ 675ms๋กœ ์ƒํ™˜์œจ+์ผ์ผ ๋‰ด์Šค, ์ˆ˜์ • ์ „์€ ๋ฐฑ๊ณผ์‚ฌ์ „); ์ค‘๋ณต ์ œ๊ฑฐ์— ์‚ฌ์ดํŠธ suffix ์ •๊ทœํ™”(์ œ๋กœ ์˜์กด) + rapidfuzz ํผ์ง€ ๊ฒ€์‚ฌ(์„ ํƒ, `ARGO_DEDUP_FUZZY`, ํด๋ฐฑ)๋ฅผ ์ถ”๊ฐ€; ๊ตฌ๋ถ„์ž ร—0.6 ์˜ค์ง„๋‹จ์„ ์ˆ˜์ •(๊ณต์‹ ๋ฌธ์„œ๊ฐ€ ์•ž์—ด๋กœ); ๋ถ€์ •์— ใ€Œไธๆ˜ฏXใ€ ์ถ”๊ฐ€; daemon ์ด๋ฆ„์„ ์ฒดํฌ์•„์›ƒ๋ณ„๋กœ ๊ฒฉ๋ฆฌ. |
811
+ | **v2.9.4** | **๋ช…์‹œ์  ์—”์ง„ ๋„๋ฉ”์ธ ์†์„ฑ + ๋ณต๊ตฌ ์ฒด์ธ ์ฐจ๋‹จ๊ธฐ + ๊ฒŒ์ดํŠธ ๋™๊ธฐํ™”**: `--engine X` ์‹œ `match_domains` ๋ณด์ถฉ์œผ๋กœ ์บ์‹œ TTL ์ผ๊ด„ ์ผ๋ฐ˜ํ™” ์ˆ˜์ •; ๋‹จ์ผ ์—”์ง„์— ๋Œ€์ฒด ์—†์œผ๋ฉด L1 ๋นˆ ์‹คํ–‰ ๊ฑด๋„ˆ๋œ€; `config.yaml` ๋„๋ฉ”์ธ ๊ทœ์น™ ๊ฐ•ํ™”; `mcp_launch.sh` ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋‚ด๋ณด๋‚ด๊ธฐ ์ถ•์†Œ; ๋กœ์ปฌ ๊ฒ€์ƒ‰ ์—”์ง„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ณ„์ธต ํ์‡„ ๋ฐ ํ’ˆ์งˆ ํ–ฅ์ƒ; ๊ฒŒ์ดํŠธ ๋™๊ธฐํ™”. |
812
+ | **v2.9.3** | **X ๊ฒŒ์‹œ๋ฌผ ์™„์ „ ํŒจํ‚ค์ง• + ๋ธŒ๋ผ์šฐ์ € ๋กœ๊ทธ์ธ ์ƒํƒœ ๋ ˆ์ธ + ๋กœ์ปฌ ์ฒด์ธ ํ’ˆ์งˆยท์†๋„ ์ˆ˜์ •**: ์‹ ๊ทœ `argo tweet`(์ „๋ฌธ/์Šค๋ ˆ๋“œ/์ธ์šฉ/๋ฆฌํฌ์ŠคํŠธ/๋ฏธ๋””์–ด๋ฅผ ํ•„์š”์— ๋”ฐ๋ผ ํŒจํ‚ค์ง•, `--out` 4ํŒŒ์ผ ์„ธํŠธ); ์‹ ๊ทœ `argo auth` ๋ธŒ๋ผ์šฐ์ € ๋กœ๊ทธ์ธ ์ƒํƒœ ๋ ˆ์ธ(์‚ฌ์ดํŠธ๋ณ„ ์˜๊ตฌ ํ”„๋กœํ•„, ์ฟ ํ‚ค๋Š” Chrome์˜ ์•”ํ˜ธํ™” ์ €์žฅ์†Œ์—๋งŒ, ๋กœ๊ทธ์ธ ์ƒํƒœ ๊ฒฐ๊ณผ๋Š” ๊ณต์œ  ์บ์‹œ ์ œ์™ธ); ์ค‘๊ตญ์–ด ๋กœ์ปฌ ์ฒด์ธ์ด Sogou/Baidu ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ป์งˆ์„ ์„ธ์…˜ ์—†์ด ํ•ด์„(๋ณด์กด 1โ†’5) + ์ปจ์„ผ์„œ์Šค ์œ ์˜ˆ ์ ์‘ํ™”(์˜์–ด ๋””์ŠคํŒจ์น˜ ~3.0sโ†’2.2-2.5s); js-run์„ fetch ์ฒด์ธ ์ฒซ ๋ ˆ์ธ์œผ๋กœ ์ ‘์„ (Chrome ํ•‘๊ฑฐํ”„๋ฆฐํŠธ ์žฌ์‹œ๋„); ์ฒ ๋„ ํ™˜์Šนยท๊ฒฝ์œ  ์กฐํšŒ(ํผ๋„ 10โ†’1์„ ์‹ค์ œ๋Œ€๋กœ 10โ†’10์œผ๋กœ ์ˆ˜์ •); `--academic-deep` ์›ํ”Œ๋ž˜๊ทธ ํ•™์ˆ  ์‹ฌ์ธต; 43๊ฐœ ์—”์ง„ ๋„๋ฉ”์ธ ๋ฐฐ์„  + ํ‚ค ๋ถˆํ•„์š” ๊ธˆ์œต ์†Œ์Šค 3๊ฑด + ์ธํ…ํŠธ ๊ฒŒ์ดํŠธ ์˜ค์ž ๊ธˆ ์ˆ˜์ •; ๋กœ์ปฌ ์ด๋ฏธ์ง€ ํ•‘๊ฑฐํ”„๋ฆฐํŠธ 158msโ†’3.9ms; ์—์ด์ „ํŠธ ์†Œ๋น„ ์Šฌ๋ฆผํ™”(MCP ๊ณ ์ • ์˜ค๋ฒ„ํ—ค๋“œ โˆ’32%). |
813
+ | **v2.9.2** | **DSH 0.2.1-alpha.1 ํ˜ธํ™˜ ๊ฒ€์ฆ + ๋ผ์šฐํŒ…/๊ฐ€๋“œ ์ˆ˜์ • ์ผ๊ด„ + js-run ์„œ๋ธŒ ์Šคํ‚ฌ**: DSH ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ผํ˜•ํƒœ๋ฅผ ์ตœ์‹  DSH 0.2.1-alpha.1์—์„œ ์‹ค์ธก ๊ฒ€์ฆ; `argo mcp inject`์— WorkBuddy๋ฅผ ์ถ”๊ฐ€ํ•ด 7๋ฒˆ์งธ ํ˜ธ์ŠคํŠธ๊นŒ์ง€ ์ง€์›; TF-IDF ์•ฝ์ฆ๊ฑฐ ๋ณด์กฐ ์†Œ์Šค ๊ฐ•๋“ฑ, ์ฃฝ์€ ์†Œ์Šค ํ”Œ๋กœ์–ด + ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ์Šฌ๋กฏ ์žฌ์ถฉ์ „, ์ฟผํ„ฐ ์†Œ์ง„ ์—”์ง„ ๋ผ์šฐํŒ… ๊ฒฉ๋ฆฌ, serp_guard ์—ฐ์‡„ ์˜คํƒ ์ˆ˜์ •; engines/evidence ์ง€์—ฐ ์ž„ํฌํŠธ(import๋Ÿ‰ โˆ’50%)์™€ ์–ด๋“œ๋ฏธ์…˜ ์กด์žฌ ์ง‘ํ•ฉ ๋‹จ๋ฝ(open 261โ†’99); MCP ์ง„์ž…ยท์ˆ˜์น˜ ์ธ์ž ๊ฐ€๋“œ ์ˆ˜์Šต; js-run ์„œ๋ธŒ ์Šคํ‚ฌ ์‹ ๊ทœ(๋ธŒ๋ผ์šฐ์ € ์—†์ด ์›น JS, P50 โ‰ˆ1ms). |
814
+ | **v2.9.1** | **์ฝ˜ํ…์ธ  ํ’ˆ์งˆ ์ตœ์ ํ™” + ์ฝ˜ํ…์ธ  ํŒœ ๋Œ€์‘ + ์ตœ์‹  ๋ฒ„์ „ ์ ์‘**: ์ฝ˜ํ…์ธ  ํ’ˆ์งˆ ํ‰๊ฐ€๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ์ €ํ’ˆ์งˆ ๋Œ€๋Ÿ‰ ์ƒ์„ฑ ์ฝ˜ํ…์ธ  ์‹๋ณ„ยทํ•„ํ„ฐ๋ง ๋Šฅ๋ ฅ ํ–ฅ์ƒ; ์ตœ์‹  ๋ฒ„์ „์— ์ ์‘ํ•ด ์›ํ™œํ•œ ํ˜‘์—… ๋ณด์žฅ; ๋กœ์ปฌ ๊ฒ€์ƒ‰์— ์ž์ฒด ์„ค์น˜ ํŠธ๋ฆฌ ๊ฐ€๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ๊ฒฐ๊ณผ๊ฐ€ ์ž์ฒด ์†Œ์Šค๋กœ ์˜ค์—ผ๋˜์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€. |
815
+ | **v2.9.0** | **์†Œ์Šค ์ตœ์ ํ™” + ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ CLI ๋Œ€๋“ฑ + ๋‹ค๊ตญ์–ด ์†Œ์ˆ˜ ์–ธ์–ด**: ์†Œ์Šค 237โ†’253(๋ฌด์„ค์ • 198โ†’219). 14๊ฐœ ์†Œ์ˆ˜ ์–ธ์–ด ๋‰ด์Šค ์†Œ์Šค, CORE ์ „๋ฌธ ์†Œ์Šค, TinEye ์—ญ๋ฐฉํ–ฅ ์ด๋ฏธ์ง€ ๊ฒ€์ƒ‰, Bing RSS ๋“ฑ ์ถ”๊ฐ€; ๋ฐ”์ด๋‘ยท์†Œ๊ณ ์šฐ ๋ถ€ํ™œ; CLI 18๊ฐœ ๋ช…๋ น๊ณผ MCP 19๊ฐœ ๋„๊ตฌ ์ผ๋Œ€์ผ ๋Œ€์‘; ์ž„ํฌํŠธ ์ฒด์ธ โˆ’79%, ์žฌ๋žญํ‚น 33msโ†’1.5ms, ์บ์‹œ ์ ์ค‘๋ฅ  ๋Œ€ํญ ํ–ฅ์ƒ; ์ฟผํ„ฐ ์“ฐ๊ธฐ ๊ฒฝ๋กœ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์•ˆ์ „ ์ˆ˜์ •; `argo stats` ๋กœ์ปฌ ์‚ฌ์šฉ ๋กœ๊ทธ ์‹ ๊ทœ ์ถ”๊ฐ€. ์ž์„ธํžˆ๋Š” [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.9.0.md) |
816
+ | **v2.8.9** | **์ถœ๋ ฅ ๊ฒฝ๋Ÿ‰ํ™” + ๋” ๋น ๋ฅด๊ณ  ํ’๋ถ€ํ•œ ๊ฒ€์ƒ‰ + ํ•ด์™ธ ๋ฏธ๋””์–ด ๋ฐ ํŒฉํŠธ์ฒดํฌ ์†Œ์Šค 5๊ฐœ**: ๊ธฐ๋ณธ ์ถœ๋ ฅ 15.5KBโ†’5.2KB(โˆ’66%, `--envelope`๋กœ ์ „์ฒด ๋ด‰ํˆฌ ๋ณต์›); ๋ผ์šฐํŒ… ๊ฒฐ์ • ์บ์‹œ๋กœ ๋ฐ˜๋ณต ์ฟผ๋ฆฌ โˆ’30%; ๋А๋ฆฐ ๋„คํŠธ์›Œํฌ ๋””์ŠคํŒจ์น˜ โˆ’36%(์ง๋ ฌ ๋„๋ฉ”์ธ์€ 0.8์ดˆ ์ดˆ๊ณผ ์‹œ ์ž๋™ ํ—ค์ง€); ์ˆ˜์ง‘ ์ฒด์ธ 5์ฐจ ๊ฐœ์„ (๋ฆฌ์ฝœ +35%, ์ง€์—ฐ โˆ’30%, ๋กฑํ…Œ์ผ P90 โˆ’8%) + ๋ณธ๋ฌธ ๊ตฌ์กฐ ๋ณต์›(์ œ๋ชฉ/๋ชฉ๋ก/ํ‘œ ๋ณด์กด 0/6โ†’6/6) + CJK ํ’ˆ์งˆ ์ ์ˆ˜ ์ˆ˜์ •; ํ‚ค ๋ถˆํ•„์š” ์‹ ๊ทœ ์†Œ์Šค Guardian RSS / France 24 / DW / FactCheck.org / Full Fact(232โ†’237, ํ‚ค ๋ถˆํ•„์š” 194โ†’198, ๋„๋ฉ”์ธ 90โ†’92), ์ฃฝ์€ gdelt ํ์ง€; ์ž๊ธฐ์ผ๊ด€์„ฑ ๊ฒฐํ•จ 6๊ณณ ์ˆ˜์ • + 6๋‹จ ํผ๋„ ๊ท€์† + ์˜คํ”„๋ผ์ธ ์žฌ์ƒ ๋„๊ตฌ(`scripts/replay_eval.py`) + ์ •์ฑ… ํ›„ ๋ฐฐํฌ ๊ฒŒ์ดํŠธ ๋ฐ ์‹œ๋‚˜๋ฆฌ์˜ค ์ž„๊ณ„๊ฐ’ ๊ณ„์•ฝ. ์ž์„ธํžˆ๋Š” [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.8.9.md) |
817
+ | **v2.8.8** | **์‹ค์‚ฌ์šฉ์ž ์‹ ๊ณ  ์ˆ˜์ •(#12 ํ‚ค ๋ณ„์นญ ๋ฌด์Œ ์‹คํŒจ, #13 ํ”„๋ก์‹œ ๋ฏธ์ง€์› ์ˆ˜์ง‘) + ์ „๋ฉด ์†๋„ ๊ฐœ์„  + ์†Œ์Šค 218 โ†’ 232**: ์ถœ๊ตฌ ๋””์ŠคํŒจ์น˜ ํ†ต์ผ(`ARGO_PROXY` / ๋„๋ฉ”์ธ๋ณ„ ๊ทœ์น™ / ํ‘œ์ค€ ํ”„๋ก์‹œ ๋ณ€์ˆ˜, `NO_PROXY` ์กด์ค‘); ํ‚ค ์ฝ๊ธฐ 16๊ณณ์„ ๋ณ„์นญ ์ฒด์ธ์œผ๋กœ ํ†ต์ผ; ๋ช…๋ น์–ด ์ฝœ๋“œ ์Šคํƒ€ํŠธ 2.1sโ†’0.55s, ์„ค์ • ์บ์‹œ 50โ€“82msโ†’16โ€“18ms, QPP ํ‰ํƒ„๋„ ๊ฒŒ์ดํŠธ ์กฐ๊ธฐ ์ค‘๋‹จ, `--list-engines --detail` 152KBโ†’51KB ์ถ•์†Œ; ์ง๋‹ต `argo answer`์™€ ์›น ๊ด€์ฐฐ `argo watch` ์ถ”๊ฐ€, ํ‚ค ๋ถˆํ•„์š” ์†Œ์Šค 14๊ฐœ(์ค‘๊ตญ ํŠธ๋ Œ๋“œยท๋ผ์ดํ”„์Šคํƒ€์ผ / ๋ณด์•ˆ ์ทจ์•ฝ์  / ์˜คํ”ˆ ์•ก์„ธ์Šค ํ•™์ˆ  / ์Šคํ‚ฌ ๋””๋ ‰ํ„ฐ๋ฆฌ / ์—์ด์ „ํŠธ ๊ฒ€์ƒ‰), 69๊ฐœ ์—”์ง„ ์žฌ๋ถ„๋ฅ˜(`web_general` ํด๋ฐฑ ๋น„์ค‘ 41%โ†’20%, security ๋„๋ฉ”์ธ ์‹ ์„ค); 3๊ฐœ OS ๊ด€๋ก€ ๊ฒฝ๋กœ(`argo paths`) + Python 3.9 + ์œ ๊ณ„ ๋™์‹œ์„ฑ์œผ๋กœ ํƒ€์ž„์•„์›ƒ ์‹คํšจํ™”; search.py ๋ชจ๋“ˆ ๋ถ„ํ•  3351โ†’2526ํ–‰, 22๊ฐœ ์—”์ง„ ๊ด€๋ จ์„ฑ ๊ณจ๋“ , ์ •์  ๊ฒฐํ•จยท์ถœ๋ ฅ ๊ณ„์•ฝ ๊ฒŒ์ดํŠธ. ์ž์„ธํžˆ๋Š” [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.8.8.md) |
818
+ | **v2.8.7** | **218 ์†Œ์Šค / 89 ๋„๋ฉ”์ธ + ๋ณธ๋ฌธ ์ง์ถœ 3์ฑ„๋„ + ๋ผ์šฐํŒ… ๋ฐœํ™” ๊ทœ์œจ + macro ์ œ๋กœ ๊ฒฐ๊ณผ ์ˆ˜์ •**: ๋ฐฐ์น˜ 7/8/9 ๋ˆ„์  50๊ฐœ ์‹ ๊ทœ ์†Œ์Šค(๋ฒ•๋ น, ํ‘œ์ค€, ๋ณด์•ˆ ์ธํ…”, ํ•™์ˆ , ๋‰ด์Šค, ์—”ํ„ฐ, ์—๋„ˆ์ง€ยท๊ตํ†ต, ๋ฒ•๋ฌดยทํ–‰์ •), stackexchangeยทdoi ์—”์ง„; ์ˆ˜์ง‘ ์ฒด์ธ 0๋‹จ๊ณ„์— llms.txt์™€ `.md` ์ง์ถœ ํ”„๋กœ๋ธŒ, r.jina.ai ๋ฆฌ๋” ๋‹จ๊ณ„ ์ถ”๊ฐ€; `--engine` ์ฝค๋งˆ ๋‹ค์ค‘ ์ง€์ • ์ˆ˜์ •, tfidf ๊ธฐ์ค€๊ณผ route_reason, ๋ถ€์ • ๋ผ์šฐํŒ… ์ œ์–ด ๋งคํŠธ๋ฆญ์Šค, ๋žญํ‚น ๊ณจ๋“ ๊ณผ ์œตํ•ฉ ์ด๋“ ์†Œ๊ฑฐ ๊ฒŒ์ดํŠธ; ์ค‘๊ตญ ๊ฑฐ์‹œ ์กฐํšŒ๋Š” ๊ตญ๊ฐ€ํ†ต๊ณ„๊ตญ ์šฐ์„ , ์ „์—ญ ์ œ๋กœ ๊ฒฐ๊ณผ ๋ณต๊ตฌ๊ฐ€ L3 ๊ฐœ๋ฐฉ, ๊ตฌ์กฐ ์—”์ง„ ์ •์ง ์ง‘๊ณ„. ์ž์„ธํžˆ๋Š” [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.8.7.md) |
819
+ | **v2.8.6** | **hedged ๋ ˆ์ด์‹ฑ + ์ง€ํ›„ 3์†Œ์Šค ๋ถ„๋‹ด + ์„ ์–ธ์  ์–ธ์–ด ๋””์ŠคํŒจ์น˜ + ๋„๋‹ฌ์„ฑ ๊ฒŒ์ดํŠธ + ํ•™์ˆ  ๊ฒ€์ƒ‰ ํ”„๋กœํ† ์ฝœ**: ์„ ๋‘ ์—”์ง„ ์œ ์˜ˆ ์ฐฝ ๋ ˆ์ด์‹ฑ(๋น ๋ฅธ ์—”์ง„์€ ํ˜ธ์ถœ 1ํšŒ), zhihu ์ „์ฒด ๊ฒ€์ƒ‰/๊ฐœ์ธ ๋ฐ์ดํ„ฐ ์—ฐ๋™๊ณผ ์•„์‚ฌ ๋ฐฉ์ง€, ํ•˜์œ„ ์ฟผ๋ฆฌ ์–ธ์–ดยทํ•™์ˆ  ๋””์ŠคํŒจ์น˜(์˜์–ด ์†Œ์Šค์™€ 17๊ฐœ ํ•™์ˆ  ์†Œ์Šค๋ฅผ ์—ฐ๊ตฌ ์ˆ˜์ง‘์— ์—ฐ๊ฒฐ), ์—”์ง„ ์–ธ์–ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๋„๋‹ฌ์„ฑ ๊ฒŒ์ดํŠธ(์ฃฝ์€ ์†Œ์Šค ๋…ธ์ถœ), geo ๊ผฌ๋ฆฌ โˆ’56%, ํ•™์ˆ  ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ ๊ตฌ์„ฑ ํ”„๋กœํ† ์ฝœ. ์ž์„ธํžˆ๋Š” [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.8.6.md) |
820
+ | **v2.8.5** | **DSH ํ”Œ๋Ÿฌ๊ทธ์ธ ๋„๊ตฌ ๋„ค์ดํ‹ฐ๋ธŒํ™” + MCP ๊ธฐ๋ณธ ๋” + Windows ํ˜ธํ™˜ + ์ฟผํ„ฐ ์ž๊ฐ€ ์น˜์œ  + ํŽ˜์น˜ deadline**: `argo_search`/`argo_fetch`๊ฐ€ 1๊ธ‰ ๋„ค์ดํ‹ฐ๋ธŒ ๋„๊ตฌ๋กœ ๊ธฐ๋ณธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ(CLI ๋‹จ๋ฐœ์€ MCP์™€ ๋™์ผ ์—”์ง„ยท๊ฐ€๋“œ, ์Šคํ‚ค๋งˆ ๋‹จ์ผ ์ง„์› + ๋“œ๋ฆฌํ”„ํŠธ ๊ฒŒ์ดํŠธ); 3๊ฐ€์ง€ ํ˜•ํƒœ ์ ‘์†, MCP๋Š” ์ˆ˜์š” ์‹œ ๋งˆ์šดํŠธ ๊ธฐ๋ณธ ๋”; Windows ํ˜ธํ™˜(temp ๊ฒฝ๋กœ / GBK / ์ธํ„ฐํ”„๋ฆฌํ„ฐ ํ•ด์„ / junction / `install.ps1`, PR #11); ์ฟผํ„ฐ ์ž๊ฐ€ ์น˜์œ  ๋ฃจํ”„(200 ์—…๋ฌด ์˜ค๋ฅ˜ ๋ด‰ํˆฌ ๊ฐ์ง€ + ๋ผ์šฐํŠธ ์ œ์™ธ + ์ฃผ๊ธฐ ์ž๊ฐ€ ์น˜์œ ); ํŽ˜์น˜ ์ „์—ญ deadline(`ARGO_FETCH_DEADLINE_S`) + tinyfish ๋ Œ๋”๋ง + `.md` ๋ณ€ํ˜• ํ”„๋กœ๋ธŒ; ํ•ซ๋ฆฌ๋กœ๋“œ env์™€ ์ƒํƒœ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‹จ์ผ ์ง„์›. [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.8.5.md) |
821
+ | **v2.8.4** | **๋กœ์ปฌ ๋ฐ์ดํ„ฐ ์œตํ•ฉ + ๋‹ค์ค‘ ํด๋ผ์ด์–ธํŠธ MCP ์ฃผ์ž… + ๊ตฌ์กฐํ™” ๊ฒ€์ƒ‰ + Keenable**: ์—ฐ๊ตฌ L1 ๋กœ์ปฌ 1์ฐจ ๋ฐ์ดํ„ฐ(`file_inputs` + `recompute` + `local_sources`); `argo mcp inject`(์„ ์–ธ์  `mcp/clients.yaml`); ์ฟผ๋ฆฌ ์ •๊ทœํ™” / ๋ณ€์ฒด / ๋ณต์žก๋„ ๊ฒŒ์ดํŠธ / ์†Œ์…œ ๋ฌธ๋ฒ• ์šฐ์„  / TF-IDF ์ˆ˜์ • / `--include-local`; Keenable(๋ฌด๋ฃŒ ์ฒดํ—˜); ๋ณด์•ˆ ๊ฐ•ํ™”. [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.8.4.md) |
822
+ | **v2.8.3** | **๋‹ค๊ตญ์–ด ๋ผ์šฐํŒ… ์ˆ˜์ • + ํ”„๋กœ์„ธ์Šค ๋‚ด anysearch + weighted RRF**: ja/ko๊ฐ€ ๋Œ€์ƒ ์–ธ์–ด๋ฅผ ๋ฐ˜ํ™˜; ๋…/๋ถˆ/์„œ/์ด anysearch; weakest-link ๋‹ค์šด์›จ์ดํŠธ(๋…ผ๋ฌธ 2508.01405). [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.8.3.md) |
823
+ | **v2.8.2** | **Windows + ์ฆ๊ฑฐ ์˜๋ฏธ ํ†ต์ผ**: npm `os` ์ œํ•œ ์ œ๊ฑฐ; GBK ํฌ๋ž˜์‹œ ๋Œ€๋น„ UTF-8; ๋ฉ”์ธ ํŒจํ‚ค์ง€ `dsh.bundle`; `wide_research` ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ. [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.8.2.md) |
824
+ | **v2.8.0** | **์ฆ๊ฑฐ ๋ฃจํ”„ + ๊ตฌ์ง v3 + ๋‚ ์”จ ์Œ์†Œ์Šค**: `fetch_required` / `--verify`; `argo job`; wttr.in + Open-Meteo; Parallel / You.com. [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.8.0.md) |
825
+ | **v2.7.3** | ์—”์ง„ ์ธต HttpClient; TF-IDF๋กœ ์ˆ˜์ง 25๊ฐœ ํ™œ์„ฑํ™”; 70 ๋„๋ฉ”์ธ TTL; ์ˆ˜์ง ์ค‘์˜. [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.7.3.md) |
826
+ | **v2.7.2** | ๋กœ๊ทธ์ธ ์ƒํƒœ ์ „๋ฌธ ๊ฒ€์ƒ‰(ego-search, ๊ธฐ๋ณธ ๊บผ์ง); ํ•œ์ผ ์ฟผ๋ฆฌ๊ฐ€ ์ค‘๊ตญ์–ด ์—”์ง„์— ์„ž์ด์ง€ ์•Š์Œ. [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.7.2.md) |
827
+ | **v2.7.1** | SSRF ๊ฐ•ํ™” + ๋ผ์šฐํŒ… ํ—ฌ์Šค ์˜๋ฏธ ์ˆ˜์ •. [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.7.1.md) |
828
+ | **v2.7.0** | **์ˆ˜์ง ๊ตฌ์กฐํ™” ๋ชจ๋‹ฌ ์นด๋“œ**: ๋‚ด์žฅ `bocha` / `bocha_ai` ๋„ค์ดํ‹ฐ๋ธŒ ์—”์ง„, `modal_card` ๋„๋ฉ”์ธ์—์„œ ๊ธฐ์ฐจํ‘œ / ์œ ๊ฐ€ / ๊ท€๊ธˆ์† / ๋งŒ๋…„๋ ฅ / ๋ณ„์ž๋ฆฌ / ํœด๋Œ€ํฐ / ์ž๋™์ฐจ / ์ง„๋ฃŒ ์˜ˆ์•ฝ ๋“ฑ ์‹ค์‹œ๊ฐ„ ์นด๋“œ ํ†ต์ผ ์ธ์‹; `bocha` ์›น ํŒŒ์‹ฑ ๊ฒฐํ•จ ์ˆ˜์ •. ์ž์„ธํžˆ๋Š” [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.7.0.md) |
829
+ | **v2.6.2** | ๋…๋ฆฝ ๊ฐœ์„  ๋ผ์ธ ํ†ตํ•ฉ: ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ ์ธ์ง€ / ๊ฐ€์ค‘ RRF + ์‹œ๋งจํ‹ฑ ์บ์‹œ / ์ ์‘ํ˜• ์—”์ง„ ๋น„ํ™œ์„ฑํ™” / ์ฝ˜ํ…์ธ  ์•ˆ์ „ + ์ฟผ๋ฆฌ ๋ณ€ํ˜• / 3๋Œ€ ์ˆ˜์ง ์—”์ง„ / ์ผยทํ•œ ๋„๋ฉ”์ธ ๋ผ์šฐํŒ… ๋ณด์™„; v2.6.1 ๋ผ์šฐํŒ… ์ˆ˜์ • ํฌํ•จ. ์ž์„ธํžˆ๋Š” [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.6.2.md) |
830
+ | **v2.6.1** | v2.6.0 ์ˆ˜์ •ํŒ: ๋ผ์šฐํŒ… ์—ฐ์‡„ ํ”ผํ•ด ์ˆ˜์ •(`capital of`์ด fact_check๋ฅผ ๊ฐ€๋กœ์ฑ„์ง€ ์•Š์Œ); ๋ฒ„์ „ ๋™๊ธฐํ™”. ์ž์„ธํžˆ๋Š” [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.6.1.md) |
831
+ | **v2.6.0** | **๋‹ค๊ตญ์–ด ๊ฒ€์ƒ‰** (detect / engine params / cross-lang fallback); filmยทsportsยทgeoยทorgยทmedia ์ˆ˜์ง; recovery ์˜ค์—ผ ๋ฐฉ์ง€; ๋Šฅ๋ ฅ ํŒจ๋ฐ€๋ฆฌ + ๋งคํŠธ๋ฆญ์Šค ํšŒ๊ท€; ~120+ ์†Œ์Šค. [๋ฆด๋ฆฌ์Šค ๋…ธํŠธ](docs/RELEASE_NOTES_v2.6.0.md) |
832
+ | **v2.5.1** | ๊ธˆ์œต/๋งคํฌ๋กœ/ํ™”ํ•™ ๋‹ตํ˜• ์†Œ์Šค ๊ฐ•ํ™”; ์—”์ง„ ํ‹ฐ์–ด + combo ์˜ˆ์‚ฐ; [v2.5.1 notes](docs/RELEASE_NOTES_v2.5.1.md) |
833
+ | **v2.5.0** | ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ + npx; rewrite์™€ ๋ผ์šฐํŒ… ๋ถ„๋ฆฌ; hot-path ์บ์‹œ; compact MCP |
834
+ | **v2.4.0** | ์ €์ ์ˆ˜ ๋ผ์šฐํŠธ ํด๋ฐฑ + ์†Œ์…œ ์˜ค๋ผ์šฐํŠธ ํ•„ํ„ฐ; ์บ์‹œ depth / soft hits; breakers & negative cache; `engine_outcomes` |
835
+ | **v2.2โ€“v2.3** | 2๋‹จ๊ณ„ ์ฆ๊ฑฐ, ์ค‘๊ตญ ์†Œ์Šค ํ‘œ, content_signals, fetch ์Šคํƒ, ์—”์ง„ ํ™•์žฅ |
836
+ | **v2.1** | ์†Œ์…œ ์—”์ง„ ๋ ˆ์ด์–ด (๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ UGC) |
837
+ | **v1.x** | ํ†ตํ•ฉ ์ด๋ฆ„ Argo; ๋‹ค์ค‘ ์—”์ง„ ๋ผ์šฐํŒ… + ์ด์ค‘ ์บ์‹œ |
838
+
839
+ ---
840
+
841
+ ## ๊ธฐ์—ฌ
842
+
843
+ Issue์™€ PR ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ผ์šฐํŒ…์ด๋‚˜ ์ฆ๊ฑฐ ๋กœ์ง์„ ๋ฐ”๊ฟ€ ๋•Œ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์„ธ์š”:
844
+
845
+ ```bash
846
+ python3 -m pytest tests/test_unit.py tests/test_multilingual.py -q
847
+ python3 scripts/regression_p0p1.py --offline
848
+ python3 scripts/matrix_search_eval.py --offline
849
+ python3 scripts/ab_eval_p0p1.py # optional, online
850
+ ```
851
+
852
+ ์ปค๋ฐ‹ ์ „: ์‹ค์ œ API ํ‚ค, ๋ณธ๊ธฐ ์ ˆ๋Œ€ ๊ฒฝ๋กœ, ๊ณ„์ • ์ฟ ํ‚ค ์—†์Œ. ๋กœ์ปฌ Skill ๊ฒฝ๋กœ๋Š” `installs.local.yaml`(gitignored)์—.
853
+
854
+ ## License
855
+
856
+ Apache License 2.0 ยฉ 2026 [taxueseek](https://github.com/taxueseek)
857
+
858
+ <p align="center">
859
+ <a href="https://github.com/oil-oil/beautify-github-readme"><img src="assets/readme/made-with-beautify.svg" width="300" alt="README made with beautify-github-readme"></a>
860
+ </p>
861
+
862
+ ---
863
+
864
+ > ์ข‹์€ ๊ฒ€์ƒ‰์€ ๋” ๋งŽ์ด ๋ณด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ž์‹  ์žˆ๊ฒŒ ๊ฒฐ๋ก  ๋‚ด๋ฆฌ๊ณ , ์•„์ง ๊ฒฐ๋ก  ๋‚ด๋ฆฌ๋ฉด ์•ˆ ๋  ๋•Œ๋ฅผ ์•„๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.