octo-agent 0.11.2

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 (319) hide show
  1. checksums.yaml +7 -0
  2. data/.clacky/skills/commit/SKILL.md +423 -0
  3. data/.clacky/skills/gem-release/SKILL.md +199 -0
  4. data/.clacky/skills/gem-release/scripts/release.sh +304 -0
  5. data/.clacky/skills/oss-upload/SKILL.md +47 -0
  6. data/.octorules +106 -0
  7. data/.rspec +3 -0
  8. data/.rubocop.yml +8 -0
  9. data/CHANGELOG.md +76 -0
  10. data/CODE_OF_CONDUCT.md +132 -0
  11. data/CONTRIBUTING.md +92 -0
  12. data/Dockerfile +28 -0
  13. data/LICENSE.txt +22 -0
  14. data/POSITIONING.md +46 -0
  15. data/README.md +134 -0
  16. data/README_CN.md +134 -0
  17. data/Rakefile +34 -0
  18. data/benchmark/fixtures/sample_project/Gemfile +3 -0
  19. data/benchmark/fixtures/sample_project/lib/api_handler.rb +32 -0
  20. data/benchmark/fixtures/sample_project/lib/order_calculator.rb +23 -0
  21. data/benchmark/fixtures/sample_project/lib/user_renderer.rb +20 -0
  22. data/benchmark/fixtures/sample_project/spec/order_calculator_spec.rb +20 -0
  23. data/benchmark/results/EVALUATION_REPORT.md +165 -0
  24. data/benchmark/results/baseline_20260511_174424.json +128 -0
  25. data/benchmark/results/report_20260511_175256.json +271 -0
  26. data/benchmark/results/report_20260511_175444.json +271 -0
  27. data/benchmark/results/treatment_20260511_175103.json +130 -0
  28. data/benchmark/runner.rb +441 -0
  29. data/bin/octo +7 -0
  30. data/docs/agent-first-ui-design.md +77 -0
  31. data/docs/billing-system.md +318 -0
  32. data/docs/channel-architecture.md +235 -0
  33. data/docs/engineering-article.md +343 -0
  34. data/docs/session-skill-invocation.md +69 -0
  35. data/docs/time_machine_design.md +247 -0
  36. data/docs/ui2-architecture.md +124 -0
  37. data/homebrew/README.md +96 -0
  38. data/homebrew/openocto.rb +24 -0
  39. data/lib/octo/agent/hook_manager.rb +61 -0
  40. data/lib/octo/agent/llm_caller.rb +800 -0
  41. data/lib/octo/agent/memory_updater.rb +246 -0
  42. data/lib/octo/agent/message_compressor.rb +225 -0
  43. data/lib/octo/agent/message_compressor_helper.rb +869 -0
  44. data/lib/octo/agent/next_message_suggester.rb +215 -0
  45. data/lib/octo/agent/session_serializer.rb +685 -0
  46. data/lib/octo/agent/skill_auto_creator.rb +114 -0
  47. data/lib/octo/agent/skill_evolution.rb +61 -0
  48. data/lib/octo/agent/skill_manager.rb +466 -0
  49. data/lib/octo/agent/skill_reflector.rb +89 -0
  50. data/lib/octo/agent/system_prompt_builder.rb +101 -0
  51. data/lib/octo/agent/time_machine.rb +214 -0
  52. data/lib/octo/agent/tool_executor.rb +454 -0
  53. data/lib/octo/agent/tool_registry.rb +150 -0
  54. data/lib/octo/agent.rb +2180 -0
  55. data/lib/octo/agent_config.rb +989 -0
  56. data/lib/octo/agent_profile.rb +112 -0
  57. data/lib/octo/anthropic_stream_aggregator.rb +137 -0
  58. data/lib/octo/background_task_registry.rb +324 -0
  59. data/lib/octo/banner.rb +34 -0
  60. data/lib/octo/bedrock_stream_aggregator.rb +137 -0
  61. data/lib/octo/block_font.rb +331 -0
  62. data/lib/octo/cli.rb +968 -0
  63. data/lib/octo/client.rb +623 -0
  64. data/lib/octo/default_agents/SOUL.md +3 -0
  65. data/lib/octo/default_agents/USER.md +1 -0
  66. data/lib/octo/default_agents/base_prompt.md +66 -0
  67. data/lib/octo/default_agents/coding/profile.yml +2 -0
  68. data/lib/octo/default_agents/coding/system_prompt.md +67 -0
  69. data/lib/octo/default_agents/general/profile.yml +2 -0
  70. data/lib/octo/default_agents/general/system_prompt.md +16 -0
  71. data/lib/octo/default_parsers/doc_parser.rb +69 -0
  72. data/lib/octo/default_parsers/docx_parser.rb +188 -0
  73. data/lib/octo/default_parsers/pdf_parser.rb +120 -0
  74. data/lib/octo/default_parsers/pdf_parser_ocr.py +103 -0
  75. data/lib/octo/default_parsers/pdf_parser_plumber.py +62 -0
  76. data/lib/octo/default_parsers/pptx_parser.rb +140 -0
  77. data/lib/octo/default_parsers/xlsx_parser.rb +121 -0
  78. data/lib/octo/default_skills/browser-setup/SKILL.md +426 -0
  79. data/lib/octo/default_skills/channel-manager/SKILL.md +623 -0
  80. data/lib/octo/default_skills/channel-manager/dingtalk_setup.rb +191 -0
  81. data/lib/octo/default_skills/channel-manager/discord_setup.rb +199 -0
  82. data/lib/octo/default_skills/channel-manager/feishu_setup.rb +574 -0
  83. data/lib/octo/default_skills/channel-manager/import_lark_skills.rb +97 -0
  84. data/lib/octo/default_skills/channel-manager/install_feishu_skills.rb +105 -0
  85. data/lib/octo/default_skills/channel-manager/weixin_setup.rb +274 -0
  86. data/lib/octo/default_skills/code-explorer/SKILL.md +36 -0
  87. data/lib/octo/default_skills/cron-task-creator/SKILL.md +257 -0
  88. data/lib/octo/default_skills/cron-task-creator/evals/evals.json +38 -0
  89. data/lib/octo/default_skills/onboard/SKILL.md +578 -0
  90. data/lib/octo/default_skills/onboard/scripts/import_external_skills.rb +413 -0
  91. data/lib/octo/default_skills/onboard/scripts/install_builtin_skills.rb +97 -0
  92. data/lib/octo/default_skills/persist-memory/SKILL.md +59 -0
  93. data/lib/octo/default_skills/personal-website/SKILL.md +113 -0
  94. data/lib/octo/default_skills/personal-website/publish.rb +235 -0
  95. data/lib/octo/default_skills/product-help/SKILL.md +123 -0
  96. data/lib/octo/default_skills/product-help/docs/agent-config.md +74 -0
  97. data/lib/octo/default_skills/product-help/docs/best-practices.md +49 -0
  98. data/lib/octo/default_skills/product-help/docs/browser-tool.md +53 -0
  99. data/lib/octo/default_skills/product-help/docs/built-in-skills.md +43 -0
  100. data/lib/octo/default_skills/product-help/docs/cli-reference.md +82 -0
  101. data/lib/octo/default_skills/product-help/docs/create-your-first-skill.md +47 -0
  102. data/lib/octo/default_skills/product-help/docs/faq.md +98 -0
  103. data/lib/octo/default_skills/product-help/docs/how-to-use-a-skill.md +58 -0
  104. data/lib/octo/default_skills/product-help/docs/installation.md +59 -0
  105. data/lib/octo/default_skills/product-help/docs/memory-system.md +61 -0
  106. data/lib/octo/default_skills/product-help/docs/octorules.md +62 -0
  107. data/lib/octo/default_skills/product-help/docs/session-management.md +63 -0
  108. data/lib/octo/default_skills/product-help/docs/skill-basics.md +55 -0
  109. data/lib/octo/default_skills/product-help/docs/skill-frontmatter.md +61 -0
  110. data/lib/octo/default_skills/product-help/docs/web-server.md +49 -0
  111. data/lib/octo/default_skills/product-help/docs/what-is-octo.md +37 -0
  112. data/lib/octo/default_skills/product-help/docs/windows-installation.md +36 -0
  113. data/lib/octo/default_skills/product-help/docs/writing-tips.md +53 -0
  114. data/lib/octo/default_skills/recall-memory/SKILL.md +65 -0
  115. data/lib/octo/default_skills/skill-add/SKILL.md +59 -0
  116. data/lib/octo/default_skills/skill-add/scripts/install_from_zip.rb +295 -0
  117. data/lib/octo/default_skills/skill-creator/SKILL.md +602 -0
  118. data/lib/octo/default_skills/skill-creator/agents/analyzer.md +274 -0
  119. data/lib/octo/default_skills/skill-creator/agents/comparator.md +202 -0
  120. data/lib/octo/default_skills/skill-creator/agents/grader.md +223 -0
  121. data/lib/octo/default_skills/skill-creator/eval-viewer/generate_review.py +471 -0
  122. data/lib/octo/default_skills/skill-creator/eval-viewer/viewer.html +1325 -0
  123. data/lib/octo/default_skills/skill-creator/references/schemas.md +430 -0
  124. data/lib/octo/default_skills/skill-creator/scripts/__init__.py +0 -0
  125. data/lib/octo/default_skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  126. data/lib/octo/default_skills/skill-creator/scripts/generate_report.py +326 -0
  127. data/lib/octo/default_skills/skill-creator/scripts/improve_description.py +310 -0
  128. data/lib/octo/default_skills/skill-creator/scripts/quick_validate.py +103 -0
  129. data/lib/octo/default_skills/skill-creator/scripts/run_eval.py +317 -0
  130. data/lib/octo/default_skills/skill-creator/scripts/run_loop.py +331 -0
  131. data/lib/octo/default_skills/skill-creator/scripts/utils.py +47 -0
  132. data/lib/octo/default_skills/skill-creator/scripts/validate_skill_frontmatter.rb +143 -0
  133. data/lib/octo/idle_compression_timer.rb +115 -0
  134. data/lib/octo/json_ui_controller.rb +204 -0
  135. data/lib/octo/message_format/anthropic.rb +409 -0
  136. data/lib/octo/message_format/bedrock.rb +361 -0
  137. data/lib/octo/message_format/open_ai.rb +222 -0
  138. data/lib/octo/message_history.rb +373 -0
  139. data/lib/octo/openai_stream_aggregator.rb +130 -0
  140. data/lib/octo/plain_ui_controller.rb +166 -0
  141. data/lib/octo/providers.rb +534 -0
  142. data/lib/octo/server/browser_manager.rb +397 -0
  143. data/lib/octo/server/channel/adapters/base.rb +82 -0
  144. data/lib/octo/server/channel/adapters/dingtalk/adapter.rb +314 -0
  145. data/lib/octo/server/channel/adapters/dingtalk/api_client.rb +391 -0
  146. data/lib/octo/server/channel/adapters/dingtalk/stream_client.rb +203 -0
  147. data/lib/octo/server/channel/adapters/discord/adapter.rb +229 -0
  148. data/lib/octo/server/channel/adapters/discord/api_client.rb +107 -0
  149. data/lib/octo/server/channel/adapters/discord/gateway_client.rb +270 -0
  150. data/lib/octo/server/channel/adapters/feishu/adapter.rb +320 -0
  151. data/lib/octo/server/channel/adapters/feishu/bot.rb +478 -0
  152. data/lib/octo/server/channel/adapters/feishu/file_processor.rb +36 -0
  153. data/lib/octo/server/channel/adapters/feishu/message_parser.rb +129 -0
  154. data/lib/octo/server/channel/adapters/feishu/ws_client.rb +423 -0
  155. data/lib/octo/server/channel/adapters/telegram/adapter.rb +375 -0
  156. data/lib/octo/server/channel/adapters/telegram/api_client.rb +205 -0
  157. data/lib/octo/server/channel/adapters/wecom/adapter.rb +148 -0
  158. data/lib/octo/server/channel/adapters/wecom/media_downloader.rb +115 -0
  159. data/lib/octo/server/channel/adapters/wecom/ws_client.rb +395 -0
  160. data/lib/octo/server/channel/adapters/weixin/adapter.rb +692 -0
  161. data/lib/octo/server/channel/adapters/weixin/api_client.rb +402 -0
  162. data/lib/octo/server/channel/channel_config.rb +178 -0
  163. data/lib/octo/server/channel/channel_manager.rb +468 -0
  164. data/lib/octo/server/channel/channel_ui_controller.rb +224 -0
  165. data/lib/octo/server/channel.rb +33 -0
  166. data/lib/octo/server/discover.rb +77 -0
  167. data/lib/octo/server/epipe_safe_io.rb +105 -0
  168. data/lib/octo/server/http_server.rb +3554 -0
  169. data/lib/octo/server/scheduler.rb +317 -0
  170. data/lib/octo/server/server_master.rb +325 -0
  171. data/lib/octo/server/session_registry.rb +431 -0
  172. data/lib/octo/server/web_ui_controller.rb +487 -0
  173. data/lib/octo/session_manager.rb +385 -0
  174. data/lib/octo/skill.rb +466 -0
  175. data/lib/octo/skill_loader.rb +328 -0
  176. data/lib/octo/tools/base.rb +118 -0
  177. data/lib/octo/tools/browser.rb +625 -0
  178. data/lib/octo/tools/edit.rb +165 -0
  179. data/lib/octo/tools/file_reader.rb +549 -0
  180. data/lib/octo/tools/glob.rb +162 -0
  181. data/lib/octo/tools/grep.rb +356 -0
  182. data/lib/octo/tools/invoke_skill.rb +96 -0
  183. data/lib/octo/tools/list_tasks.rb +54 -0
  184. data/lib/octo/tools/redo_task.rb +41 -0
  185. data/lib/octo/tools/request_user_feedback.rb +84 -0
  186. data/lib/octo/tools/security.rb +333 -0
  187. data/lib/octo/tools/terminal/output_cleaner.rb +63 -0
  188. data/lib/octo/tools/terminal/persistent_session.rb +268 -0
  189. data/lib/octo/tools/terminal/safe_rm.sh +106 -0
  190. data/lib/octo/tools/terminal/session_manager.rb +213 -0
  191. data/lib/octo/tools/terminal.rb +1828 -0
  192. data/lib/octo/tools/todo_manager.rb +374 -0
  193. data/lib/octo/tools/trash_manager.rb +388 -0
  194. data/lib/octo/tools/undo_task.rb +35 -0
  195. data/lib/octo/tools/web_fetch.rb +242 -0
  196. data/lib/octo/tools/web_search.rb +260 -0
  197. data/lib/octo/tools/write.rb +77 -0
  198. data/lib/octo/ui2/block_font.rb +10 -0
  199. data/lib/octo/ui2/components/base_component.rb +163 -0
  200. data/lib/octo/ui2/components/command_suggestions.rb +290 -0
  201. data/lib/octo/ui2/components/common_component.rb +96 -0
  202. data/lib/octo/ui2/components/inline_input.rb +226 -0
  203. data/lib/octo/ui2/components/input_area.rb +1338 -0
  204. data/lib/octo/ui2/components/message_component.rb +99 -0
  205. data/lib/octo/ui2/components/modal_component.rb +419 -0
  206. data/lib/octo/ui2/components/todo_area.rb +149 -0
  207. data/lib/octo/ui2/components/tool_component.rb +107 -0
  208. data/lib/octo/ui2/components/welcome_banner.rb +139 -0
  209. data/lib/octo/ui2/layout_manager.rb +807 -0
  210. data/lib/octo/ui2/line_editor.rb +363 -0
  211. data/lib/octo/ui2/markdown_renderer.rb +100 -0
  212. data/lib/octo/ui2/output_buffer.rb +370 -0
  213. data/lib/octo/ui2/progress_handle.rb +362 -0
  214. data/lib/octo/ui2/progress_indicator.rb +55 -0
  215. data/lib/octo/ui2/screen_buffer.rb +273 -0
  216. data/lib/octo/ui2/terminal_detector.rb +119 -0
  217. data/lib/octo/ui2/theme_manager.rb +85 -0
  218. data/lib/octo/ui2/themes/base_theme.rb +105 -0
  219. data/lib/octo/ui2/themes/hacker_theme.rb +62 -0
  220. data/lib/octo/ui2/themes/minimal_theme.rb +56 -0
  221. data/lib/octo/ui2/thinking_verbs.rb +26 -0
  222. data/lib/octo/ui2/ui_controller.rb +1625 -0
  223. data/lib/octo/ui2/view_renderer.rb +177 -0
  224. data/lib/octo/ui2.rb +40 -0
  225. data/lib/octo/ui_interface.rb +154 -0
  226. data/lib/octo/utils/arguments_parser.rb +191 -0
  227. data/lib/octo/utils/browser_detector.rb +195 -0
  228. data/lib/octo/utils/encoding.rb +92 -0
  229. data/lib/octo/utils/environment_detector.rb +140 -0
  230. data/lib/octo/utils/file_ignore_helper.rb +170 -0
  231. data/lib/octo/utils/file_processor.rb +601 -0
  232. data/lib/octo/utils/gitignore_parser.rb +154 -0
  233. data/lib/octo/utils/limit_stack.rb +152 -0
  234. data/lib/octo/utils/logger.rb +124 -0
  235. data/lib/octo/utils/login_shell.rb +72 -0
  236. data/lib/octo/utils/model_pricing.rb +646 -0
  237. data/lib/octo/utils/parser_manager.rb +165 -0
  238. data/lib/octo/utils/path_helper.rb +15 -0
  239. data/lib/octo/utils/scripts_manager.rb +59 -0
  240. data/lib/octo/utils/string_matcher.rb +158 -0
  241. data/lib/octo/utils/trash_directory.rb +112 -0
  242. data/lib/octo/utils/workspace_rules.rb +46 -0
  243. data/lib/octo/version.rb +5 -0
  244. data/lib/octo/web/app.css +7141 -0
  245. data/lib/octo/web/app.js +543 -0
  246. data/lib/octo/web/apple-touch-icon.png +0 -0
  247. data/lib/octo/web/auth.js +150 -0
  248. data/lib/octo/web/channels.js +276 -0
  249. data/lib/octo/web/datepicker.js +205 -0
  250. data/lib/octo/web/favicon.png +0 -0
  251. data/lib/octo/web/i18n.js +1073 -0
  252. data/lib/octo/web/icon-512.png +0 -0
  253. data/lib/octo/web/icon-dark.svg +25 -0
  254. data/lib/octo/web/icon.svg +29 -0
  255. data/lib/octo/web/index.html +871 -0
  256. data/lib/octo/web/marked.min.js +69 -0
  257. data/lib/octo/web/onboard.js +491 -0
  258. data/lib/octo/web/profile.js +442 -0
  259. data/lib/octo/web/sessions.js +4421 -0
  260. data/lib/octo/web/settings.js +913 -0
  261. data/lib/octo/web/sidebar.js +32 -0
  262. data/lib/octo/web/skills.js +885 -0
  263. data/lib/octo/web/tasks.js +297 -0
  264. data/lib/octo/web/theme.js +105 -0
  265. data/lib/octo/web/trash.js +343 -0
  266. data/lib/octo/web/vendor/hljs/highlight.min.js +1244 -0
  267. data/lib/octo/web/vendor/hljs/hljs-theme.css +95 -0
  268. data/lib/octo/web/vendor/katex/auto-render.min.js +1 -0
  269. data/lib/octo/web/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  270. data/lib/octo/web/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  271. data/lib/octo/web/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  272. data/lib/octo/web/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  273. data/lib/octo/web/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  274. data/lib/octo/web/vendor/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  275. data/lib/octo/web/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  276. data/lib/octo/web/vendor/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  277. data/lib/octo/web/vendor/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  278. data/lib/octo/web/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  279. data/lib/octo/web/vendor/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  280. data/lib/octo/web/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  281. data/lib/octo/web/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  282. data/lib/octo/web/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  283. data/lib/octo/web/vendor/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  284. data/lib/octo/web/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  285. data/lib/octo/web/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  286. data/lib/octo/web/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  287. data/lib/octo/web/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  288. data/lib/octo/web/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  289. data/lib/octo/web/vendor/katex/katex.min.css +1 -0
  290. data/lib/octo/web/vendor/katex/katex.min.js +1 -0
  291. data/lib/octo/web/version.js +449 -0
  292. data/lib/octo/web/weixin-qr.html +209 -0
  293. data/lib/octo/web/ws-dispatcher.js +357 -0
  294. data/lib/octo/web/ws.js +128 -0
  295. data/lib/octo.rb +145 -0
  296. data/scripts/build/build.sh +329 -0
  297. data/scripts/build/lib/apt.sh +56 -0
  298. data/scripts/build/lib/brew.sh +89 -0
  299. data/scripts/build/lib/colors.sh +17 -0
  300. data/scripts/build/lib/gem.sh +95 -0
  301. data/scripts/build/lib/mise.sh +125 -0
  302. data/scripts/build/lib/network.sh +157 -0
  303. data/scripts/build/lib/os.sh +57 -0
  304. data/scripts/build/lib/shell.sh +37 -0
  305. data/scripts/build/src/install.sh.cc +174 -0
  306. data/scripts/build/src/install_browser.sh.cc +101 -0
  307. data/scripts/build/src/install_full.sh.cc +290 -0
  308. data/scripts/build/src/install_rails_deps.sh.cc +145 -0
  309. data/scripts/build/src/install_system_deps.sh.cc +123 -0
  310. data/scripts/build/src/uninstall.sh.cc +101 -0
  311. data/scripts/install.ps1 +532 -0
  312. data/scripts/install.sh +567 -0
  313. data/scripts/install_browser.sh +479 -0
  314. data/scripts/install_full.sh +838 -0
  315. data/scripts/install_rails_deps.sh +746 -0
  316. data/scripts/install_system_deps.sh +518 -0
  317. data/scripts/uninstall.sh +287 -0
  318. data/sig/octo.rbs +4 -0
  319. metadata +614 -0
@@ -0,0 +1,47 @@
1
+ # Create Your First Skill
2
+
3
+ ## Step 1: Create the Skill Directory
4
+
5
+ ```bash
6
+ mkdir -p ~/.octo/skills/hello-world
7
+ ```
8
+
9
+ ## Step 2: Write SKILL.md
10
+
11
+ ```bash
12
+ cat > ~/.octo/skills/hello-world/SKILL.md << 'EOF'
13
+ ---
14
+ name: hello-world
15
+ description: 'Use this skill when the user wants a greeting'
16
+ ---
17
+
18
+ # Hello World Skill
19
+
20
+ When invoked, greet the user warmly and ask how you can help today.
21
+ EOF
22
+ ```
23
+
24
+ ## Step 3: Test It
25
+
26
+ Start octo and invoke your skill:
27
+
28
+ ```bash
29
+ $ octo
30
+ > /hello-world
31
+ ```
32
+
33
+ ## Step 4: Iterate
34
+
35
+ Refine the instructions based on how the agent behaves. Add more detail, examples, or constraints.
36
+
37
+ ## Step 5: Share (Optional)
38
+
39
+ Skills are plain Markdown. Zip the directory and share it:
40
+
41
+ ```bash
42
+ cd ~/.octo/skills && zip -r hello-world.zip hello-world/
43
+ ```
44
+
45
+ Others can install it with `/skill-add hello-world.zip`.
46
+
47
+ That's it — no compilation, no registration, no encryption keys.
@@ -0,0 +1,98 @@
1
+ # FAQ & Troubleshooting
2
+
3
+ ## General
4
+
5
+ ### Q: What models are supported?
6
+
7
+ Any model speaking Anthropic Messages, OpenAI (Chat Completions / Responses), or AWS Bedrock protocols. Out-of-the-box presets include:
8
+
9
+ - **Claude** (Anthropic)
10
+ - **GPT** (OpenAI)
11
+ - **DeepSeek**
12
+ - **Kimi** (Moonshot)
13
+ - **MiniMax**
14
+ - **OpenRouter**
15
+ - **AWS Bedrock**
16
+ - **Qwen**
17
+ - **GLM**
18
+
19
+ ### Q: Can I use a custom endpoint?
20
+
21
+ Yes. Set `base_url` to any OpenAI-compatible or Anthropic-compatible endpoint.
22
+
23
+ ### Q: How do I update Octo?
24
+
25
+ ```bash
26
+ gem update octo-agent
27
+ ```
28
+
29
+ Or pull latest and `bundle install` if running from source.
30
+
31
+ ## Configuration
32
+
33
+ ### Q: Where is the config file stored?
34
+
35
+ `~/.octo/config.yml`
36
+
37
+ ### Q: Can I have multiple models configured?
38
+
39
+ Yes. The config supports multiple model entries with different types (default, lite, fallback).
40
+
41
+ ### Q: What if I don't have an API key?
42
+
43
+ Octo requires your own API key (BYOK). Get one from your model provider (Anthropic, OpenAI, etc.).
44
+
45
+ ## Web UI
46
+
47
+ ### Q: What port does the web UI use?
48
+
49
+ Default is `8888`. Change with `--port`.
50
+
51
+ ### Q: Can I access the web UI from another device?
52
+
53
+ Use `--host 0.0.0.0` to listen on all interfaces.
54
+
55
+ ## Restart / Upgrade / Downgrade
56
+
57
+ ### Normal Restart
58
+
59
+ ```bash
60
+ kill -USR1 $OCTO_MASTER_PID
61
+ ```
62
+
63
+ This performs a hot restart with zero downtime.
64
+
65
+ ### Restart or Upgrade Failure
66
+
67
+ If restart fails:
68
+ 1. Check if another process is using the port (`lsof -i :8888`)
69
+ 2. Kill the stale process and restart
70
+ 3. If issues persist, run `gem uninstall octo-agent && gem install octo-agent` for a clean reinstall
71
+
72
+ ### Downgrade
73
+
74
+ ```bash
75
+ gem install octo-agent -v <desired-version>
76
+ ```
77
+
78
+ ## Session Management
79
+
80
+ ### Q: Where are sessions stored?
81
+
82
+ `~/.octo/sessions/`
83
+
84
+ ### Q: How do I continue a previous session?
85
+
86
+ ```bash
87
+ octo -c
88
+ # or
89
+ octo --continue
90
+ ```
91
+
92
+ ### Q: How do I list recent sessions?
93
+
94
+ ```bash
95
+ octo -l
96
+ # or
97
+ octo --list
98
+ ```
@@ -0,0 +1,58 @@
1
+ # How to Use a Skill
2
+
3
+ A **skill** is a Markdown instruction file that guides the agent to accomplish a specific task using existing tools.
4
+
5
+ ## Installing a Skill
6
+
7
+ ```bash
8
+ /skill-add <zip-url-or-local-path>
9
+ ```
10
+
11
+ Or place skill files manually:
12
+
13
+ - **Project-level**: `.octo/skills/<skill-name>/SKILL.md`
14
+ - **User-level**: `~/.octo/skills/<skill-name>/SKILL.md`
15
+
16
+ ## Invoking a Skill
17
+
18
+ In an active session, type `/` followed by the skill name:
19
+
20
+ ```bash
21
+ > /code-explorer
22
+ ```
23
+
24
+ Use Tab or fuzzy search to find skills quickly.
25
+
26
+ ## Built-in Skills
27
+
28
+ Octo ships with built-in skills for common tasks:
29
+
30
+ - `browser-setup` — Configure Chrome/Edge for browser automation
31
+ - `channel-manager` — Set up IM platform integrations
32
+ - `code-explorer` — Analyze and explore codebases
33
+ - `cron-task-creator` — Create scheduled automated tasks
34
+ - `product-help` — Help with Octo features and configuration
35
+ - And more — type `/` to see the full list
36
+
37
+ ## Skill Format
38
+
39
+ A skill is a single `SKILL.md` file with YAML frontmatter:
40
+
41
+ ```yaml
42
+ ---
43
+ name: my-skill
44
+ description: 'Use this skill when...'
45
+ fork_agent: true
46
+ user-invocable: true
47
+ ---
48
+
49
+ # Skill Instructions
50
+
51
+ Write detailed instructions here...
52
+ ```
53
+
54
+ ## Creating a Skill
55
+
56
+ Describe what you want in natural language, and the agent can draft a `SKILL.md` for you.
57
+
58
+ Skills are plain Markdown — no compilation, no encryption, no license keys.
@@ -0,0 +1,59 @@
1
+ # Installation
2
+
3
+ ## Requirements
4
+
5
+ - Ruby >= 3.1.0
6
+
7
+ ## RubyGem
8
+
9
+ ```bash
10
+ gem install octo-agent
11
+ ```
12
+
13
+ ## One-line Installer (macOS / Ubuntu)
14
+
15
+ ```bash
16
+ /bin/bash -c "$(curl -sSL https://raw.githubusercontent.com/Leihb/octo/main/scripts/install.sh)"
17
+ ```
18
+
19
+ ## Windows
20
+
21
+ ```powershell
22
+ powershell -c "& ([scriptblock]::Create((irm 'https://raw.githubusercontent.com/Leihb/octo/main/scripts/install.ps1')))"
23
+ ```
24
+
25
+ ## From Source
26
+
27
+ ```bash
28
+ git clone https://github.com/Leihb/octo.git
29
+ cd octo
30
+ bundle install
31
+ bin/octo
32
+ ```
33
+
34
+ ## After Installation
35
+
36
+ Run `octo` to start an interactive agent session. On first run, configure your API key and model:
37
+
38
+ ```bash
39
+ $ octo
40
+ > /config
41
+ ```
42
+
43
+ Set your **API Key**, **Model**, and **Base URL**. Octo routes each model to its native protocol automatically.
44
+
45
+ ## Environment Variables
46
+
47
+ You can also configure via environment variables:
48
+
49
+ | Variable | Description |
50
+ |---|---|
51
+ | `OCTO_API_KEY` | Default model API key |
52
+ | `OCTO_BASE_URL` | Default model base URL |
53
+ | `OCTO_MODEL` | Default model name |
54
+ | `OCTO_ANTHROPIC_FORMAT` | Use anthropic format (true/false) |
55
+ | `OCTO_LITE_API_KEY` | Lite model API key |
56
+ | `OCTO_LITE_BASE_URL` | Lite model base URL |
57
+ | `OCTO_LITE_MODEL` | Lite model name |
58
+
59
+ Or use ClaudeCode-compatible variables: `ANTHROPIC_API_KEY`, `ANTHROPIC_BASE_URL`.
@@ -0,0 +1,61 @@
1
+ # Memory System
2
+
3
+ Octo maintains **long-term memory** across sessions.
4
+
5
+ ## Storage Location
6
+
7
+ ```
8
+ ~/.octo/memories/
9
+ ```
10
+
11
+ Memories are stored as Markdown files with YAML frontmatter.
12
+
13
+ ## How It Works
14
+
15
+ - The agent automatically reads relevant memories at the start of a session
16
+ - New information can be persisted to memory during a session
17
+ - Memories are topic-organized and searchable
18
+
19
+ ## Manual Memory Management
20
+
21
+ Use the `persist-memory` skill to save information:
22
+
23
+ ```bash
24
+ > /persist-memory
25
+ ```
26
+
27
+ Use the `recall-memory` skill to retrieve information:
28
+
29
+ ```bash
30
+ > /recall-memory
31
+ ```
32
+
33
+ ## Disabling Memory
34
+
35
+ When starting the web server:
36
+
37
+ ```bash
38
+ octo server --no-memory
39
+ ```
40
+
41
+ ## Memory Files
42
+
43
+ Each memory file contains:
44
+
45
+ ```yaml
46
+ ---
47
+ topics:
48
+ - topic-name
49
+ created_at: 2026-01-01
50
+ type: factual
51
+ ---
52
+
53
+ Content here...
54
+ ```
55
+
56
+ ## Scope
57
+
58
+ - **User-level**: `~/.octo/memories/` — Shared across all projects
59
+ - **Project-level**: `.octo/memories/` — Project-specific
60
+
61
+ The agent loads both scopes and merges them by relevance.
@@ -0,0 +1,62 @@
1
+ # Project Rules (.octorules)
2
+
3
+ The `.octorules` file contains project-specific instructions for the agent.
4
+
5
+ ## Location
6
+
7
+ Place `.octorules` in your project root:
8
+
9
+ ```
10
+ my-project/
11
+ .octorules
12
+ src/
13
+ ...
14
+ ```
15
+
16
+ ## Format
17
+
18
+ A Markdown file with sections:
19
+
20
+ ```markdown
21
+ # Project Rules
22
+
23
+ ## Overview
24
+
25
+ This is a Ruby on Rails API project...
26
+
27
+ ## Architecture
28
+
29
+ - Models in app/models/
30
+ - Controllers in app/controllers/
31
+ - Services in app/services/
32
+
33
+ ## Code Style
34
+
35
+ - Use frozen_string_literal: true
36
+ - Single quotes for strings without interpolation
37
+ - Max line length: 100
38
+
39
+ ## Testing
40
+
41
+ - RSpec for tests
42
+ - Run `bundle exec rspec` before committing
43
+ ```
44
+
45
+ ## What to Include
46
+
47
+ - Project overview and tech stack
48
+ - Architecture conventions
49
+ - Code style guidelines
50
+ - Testing requirements
51
+ - Security considerations
52
+ - Deployment notes
53
+
54
+ ## How It Works
55
+
56
+ When you run `octo` in a directory containing `.octorules`, the agent reads this file and incorporates the instructions into its context. This ensures consistent behavior across sessions for the same project.
57
+
58
+ ## User-Level Rules
59
+
60
+ You can also place `.octorules` in `~/.octo/` for global defaults that apply to all projects.
61
+
62
+ Project-level rules override user-level rules when there are conflicts.
@@ -0,0 +1,63 @@
1
+ # Session Management
2
+
3
+ ## Starting a Session
4
+
5
+ ```bash
6
+ octo
7
+ ```
8
+
9
+ ## Continuing a Session
10
+
11
+ ```bash
12
+ octo -c
13
+ octo --continue
14
+ ```
15
+
16
+ ## Listing Sessions
17
+
18
+ ```bash
19
+ octo -l
20
+ octo --list
21
+ ```
22
+
23
+ ## Attaching to a Specific Session
24
+
25
+ ```bash
26
+ octo -a 2 # By number
27
+ octo -a b6682a87 # By session ID prefix
28
+ ```
29
+
30
+ ## Storage
31
+
32
+ Sessions are stored in:
33
+
34
+ ```
35
+ ~/.octo/sessions/
36
+ ```
37
+
38
+ Each session is a Markdown file with conversation history and metadata.
39
+
40
+ ## Session Files
41
+
42
+ Sessions are chunked and organized by date:
43
+
44
+ ```
45
+ ~/.octo/sessions/
46
+ 2026-05-25/
47
+ session-id-1.md
48
+ session-id-2.md
49
+ ```
50
+
51
+ ## Web UI Sessions
52
+
53
+ The web UI supports multiple concurrent sessions. Each browser tab can have its own independent session.
54
+
55
+ ## Session Limits
56
+
57
+ - Context window depends on the model being used
58
+ - Older messages may be compressed to fit within token limits
59
+ - Use `--no-compression` to disable compression (saves tokens but may lose context)
60
+
61
+ ## Cleanup
62
+
63
+ Sessions are kept indefinitely. To clean up old sessions, manually remove files from `~/.octo/sessions/`.
@@ -0,0 +1,55 @@
1
+ # Skill Basics
2
+
3
+ A **skill** is a Markdown file that teaches the agent how to perform a specific task.
4
+
5
+ ## File Structure
6
+
7
+ ```
8
+ .skills/my-skill/
9
+ SKILL.md
10
+ ```
11
+
12
+ Or at project/user level:
13
+
14
+ ```
15
+ .octo/skills/my-skill/SKILL.md
16
+ ~/.octo/skills/my-skill/SKILL.md
17
+ ```
18
+
19
+ ## SKILL.md Format
20
+
21
+ ```markdown
22
+ ---
23
+ name: my-skill
24
+ description: 'Use this skill when...'
25
+ fork_agent: true
26
+ user-invocable: true
27
+ ---
28
+
29
+ # Instructions
30
+
31
+ Detailed instructions for the agent...
32
+ ```
33
+
34
+ ## Frontmatter Fields
35
+
36
+ | Field | Type | Description |
37
+ |---|---|---|
38
+ | `name` | string | Skill identifier |
39
+ | `description` | string | When to trigger this skill (auto-matching) |
40
+ | `fork_agent` | boolean | Run in a subagent (default: false) |
41
+ | `user-invocable` | boolean | Allow `/skill-name` invocation (default: true) |
42
+ | `auto_summarize` | boolean | Auto-summarize results |
43
+ | `forbidden_tools` | array | Tool names the skill cannot use |
44
+
45
+ ## Invocation
46
+
47
+ - **Auto-trigger**: Agent matches user intent against `description`
48
+ - **Manual**: `/skill-name` in chat
49
+
50
+ ## Best Practices
51
+
52
+ - Write `description` as a natural language trigger condition
53
+ - Use `fork_agent: true` for complex tasks to isolate context
54
+ - Keep instructions concrete and actionable
55
+ - Test skills by invoking them directly
@@ -0,0 +1,61 @@
1
+ # SKILL.md Frontmatter Reference
2
+
3
+ All frontmatter fields for `SKILL.md`:
4
+
5
+ ## Required Fields
6
+
7
+ | Field | Type | Description |
8
+ |---|---|---|
9
+ | `name` | string | Skill identifier (kebab-case recommended) |
10
+ | `description` | string | Natural language trigger condition |
11
+
12
+ ## Optional Fields
13
+
14
+ | Field | Type | Default | Description |
15
+ |---|---|---|---|
16
+ | `fork_agent` | boolean | false | Run in a subagent with isolated context |
17
+ | `user-invocable` | boolean | true | Allow `/skill-name` manual invocation |
18
+ | `auto_summarize` | boolean | false | Automatically summarize results |
19
+ | `forbidden_tools` | array | [] | Tool names the skill cannot use |
20
+
21
+ ## Example
22
+
23
+ ```yaml
24
+ ---
25
+ name: code-explorer
26
+ description: 'Use this skill when exploring, analyzing, or understanding project/code structure'
27
+ fork_agent: true
28
+ user-invocable: true
29
+ auto_summarize: true
30
+ forbidden_tools:
31
+ - write
32
+ - edit
33
+ - terminal
34
+ ---
35
+ ```
36
+
37
+ ## Trigger Matching
38
+
39
+ The `description` field is matched against user intent using semantic similarity. Write it as a condition:
40
+
41
+ ```yaml
42
+ description: 'Use this skill when the user asks about browser setup, Chrome configuration, or Edge automation'
43
+ ```
44
+
45
+ ## fork_agent Behavior
46
+
47
+ When `fork_agent: true`:
48
+ - A new subagent is spawned
49
+ - The subagent gets a fresh context
50
+ - Results are summarized back to the parent session
51
+ - Prevents long skill executions from polluting main session context
52
+
53
+ ## forbidden_tools
54
+
55
+ Common values:
56
+
57
+ - `write` — Cannot create files
58
+ - `edit` — Cannot modify files
59
+ - `terminal` — Cannot run shell commands
60
+ - `web_search` — Cannot search the web
61
+ - `browser` — Cannot control browser
@@ -0,0 +1,49 @@
1
+ # Web UI
2
+
3
+ Start the Octo web interface:
4
+
5
+ ```bash
6
+ octo server
7
+ ```
8
+
9
+ Default address: **http://localhost:8888**
10
+
11
+ ## Options
12
+
13
+ ```bash
14
+ octo server --port 8080 # Custom port
15
+ octo server --host 0.0.0.0 # Listen on all interfaces
16
+ octo server --no-compression # Disable message compression
17
+ octo server --no-memory # Disable automatic memory updates
18
+ octo server --no-caching # Disable prompt caching
19
+ octo server --no-skill-evolution # Disable automatic skill evolution
20
+ ```
21
+
22
+ ## Features
23
+
24
+ - Full chat interface with markdown rendering
25
+ - Multi-session support
26
+ - File attachments (images, documents)
27
+ - Session history browser
28
+ - Real-time streaming responses
29
+
30
+ ## API Endpoints
31
+
32
+ The web server exposes a REST API for programmatic access:
33
+
34
+ - `POST /api/sessions` — Create a new session
35
+ - `POST /api/sessions/:id/chat` — Send a message
36
+ - `GET /api/sessions/:id` — Get session info
37
+ - `DELETE /api/sessions/:id` — End a session
38
+
39
+ ## Security
40
+
41
+ By default, the server binds to `127.0.0.1` (localhost only). Use `--host 0.0.0.0` with caution — there is no built-in authentication.
42
+
43
+ ## Hot Restart
44
+
45
+ Send `USR1` to the master process for zero-downtime restart:
46
+
47
+ ```bash
48
+ kill -USR1 $OCTO_MASTER_PID
49
+ ```
@@ -0,0 +1,37 @@
1
+ # What is Octo
2
+
3
+ Octo is a **functionality-first** AI agent with three equal interfaces:
4
+
5
+ - **Terminal (CLI)** — Interactive agent sessions in your shell
6
+ - **Web UI** — Full chat interface with multi-session support at `localhost:8888`
7
+ - **Instant Messaging** — Feishu, WeChat, WeCom, Discord, Telegram
8
+
9
+ All three interfaces are first-class citizens with identical capabilities.
10
+
11
+ ## Core Protocols
12
+
13
+ Octo speaks three API protocols natively:
14
+
15
+ 1. **Anthropic Messages** — Claude models with full `cache_control` fidelity
16
+ 2. **OpenAI** — Chat Completions + Responses API
17
+ 3. **AWS Bedrock** — Claude via AWS
18
+
19
+ Any provider exposing one of these shapes works out of the box.
20
+
21
+ ## Key Features
22
+
23
+ | Feature | Description |
24
+ |---|---|
25
+ | **Skills** | Installable capability packs in Markdown format |
26
+ | **Autonomous Agent** | ReAct pattern with tool execution |
27
+ | **BYOK** | Bring your own API key for any compatible model |
28
+ | **Session Management** | Persistent conversation history |
29
+ | **Memory** | Long-term memory across sessions |
30
+
31
+ ## What Octo Is Not
32
+
33
+ - Not a token-minimization obsession — functionality comes first
34
+ - Not web-first — local CLI usage has no master-worker overhead
35
+ - Not a marketplace — skills are open Markdown, not encrypted binaries
36
+
37
+ Octo is a hard fork of [clacky-ai/openclacky](https://github.com/clacky-ai/openclacky).
@@ -0,0 +1,36 @@
1
+ # Windows Installation
2
+
3
+ ## PowerShell One-liner
4
+
5
+ ```powershell
6
+ powershell -c "& ([scriptblock]::Create((irm 'https://raw.githubusercontent.com/Leihb/octo/main/scripts/install.ps1')))"
7
+ ```
8
+
9
+ ## Manual Installation
10
+
11
+ 1. Install Ruby >= 3.1.0 from [rubyinstaller.org](https://rubyinstaller.org/)
12
+ 2. Open PowerShell or Command Prompt
13
+ 3. Run:
14
+
15
+ ```powershell
16
+ gem install octo-agent
17
+ ```
18
+
19
+ ## WSL (Recommended)
20
+
21
+ For the best experience on Windows, use WSL2:
22
+
23
+ ```bash
24
+ # In WSL terminal
25
+ /bin/bash -c "$(curl -sSL https://raw.githubusercontent.com/Leihb/octo/main/scripts/install.sh)"
26
+ ```
27
+
28
+ Browser automation and most features work best under WSL or native Linux/macOS.
29
+
30
+ ## After Installation
31
+
32
+ ```bash
33
+ octo
34
+ ```
35
+
36
+ Configure your API key on first run via `> /config`.