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.
- checksums.yaml +7 -0
- data/.clacky/skills/commit/SKILL.md +423 -0
- data/.clacky/skills/gem-release/SKILL.md +199 -0
- data/.clacky/skills/gem-release/scripts/release.sh +304 -0
- data/.clacky/skills/oss-upload/SKILL.md +47 -0
- data/.octorules +106 -0
- data/.rspec +3 -0
- data/.rubocop.yml +8 -0
- data/CHANGELOG.md +76 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/CONTRIBUTING.md +92 -0
- data/Dockerfile +28 -0
- data/LICENSE.txt +22 -0
- data/POSITIONING.md +46 -0
- data/README.md +134 -0
- data/README_CN.md +134 -0
- data/Rakefile +34 -0
- data/benchmark/fixtures/sample_project/Gemfile +3 -0
- data/benchmark/fixtures/sample_project/lib/api_handler.rb +32 -0
- data/benchmark/fixtures/sample_project/lib/order_calculator.rb +23 -0
- data/benchmark/fixtures/sample_project/lib/user_renderer.rb +20 -0
- data/benchmark/fixtures/sample_project/spec/order_calculator_spec.rb +20 -0
- data/benchmark/results/EVALUATION_REPORT.md +165 -0
- data/benchmark/results/baseline_20260511_174424.json +128 -0
- data/benchmark/results/report_20260511_175256.json +271 -0
- data/benchmark/results/report_20260511_175444.json +271 -0
- data/benchmark/results/treatment_20260511_175103.json +130 -0
- data/benchmark/runner.rb +441 -0
- data/bin/octo +7 -0
- data/docs/agent-first-ui-design.md +77 -0
- data/docs/billing-system.md +318 -0
- data/docs/channel-architecture.md +235 -0
- data/docs/engineering-article.md +343 -0
- data/docs/session-skill-invocation.md +69 -0
- data/docs/time_machine_design.md +247 -0
- data/docs/ui2-architecture.md +124 -0
- data/homebrew/README.md +96 -0
- data/homebrew/openocto.rb +24 -0
- data/lib/octo/agent/hook_manager.rb +61 -0
- data/lib/octo/agent/llm_caller.rb +800 -0
- data/lib/octo/agent/memory_updater.rb +246 -0
- data/lib/octo/agent/message_compressor.rb +225 -0
- data/lib/octo/agent/message_compressor_helper.rb +869 -0
- data/lib/octo/agent/next_message_suggester.rb +215 -0
- data/lib/octo/agent/session_serializer.rb +685 -0
- data/lib/octo/agent/skill_auto_creator.rb +114 -0
- data/lib/octo/agent/skill_evolution.rb +61 -0
- data/lib/octo/agent/skill_manager.rb +466 -0
- data/lib/octo/agent/skill_reflector.rb +89 -0
- data/lib/octo/agent/system_prompt_builder.rb +101 -0
- data/lib/octo/agent/time_machine.rb +214 -0
- data/lib/octo/agent/tool_executor.rb +454 -0
- data/lib/octo/agent/tool_registry.rb +150 -0
- data/lib/octo/agent.rb +2180 -0
- data/lib/octo/agent_config.rb +989 -0
- data/lib/octo/agent_profile.rb +112 -0
- data/lib/octo/anthropic_stream_aggregator.rb +137 -0
- data/lib/octo/background_task_registry.rb +324 -0
- data/lib/octo/banner.rb +34 -0
- data/lib/octo/bedrock_stream_aggregator.rb +137 -0
- data/lib/octo/block_font.rb +331 -0
- data/lib/octo/cli.rb +968 -0
- data/lib/octo/client.rb +623 -0
- data/lib/octo/default_agents/SOUL.md +3 -0
- data/lib/octo/default_agents/USER.md +1 -0
- data/lib/octo/default_agents/base_prompt.md +66 -0
- data/lib/octo/default_agents/coding/profile.yml +2 -0
- data/lib/octo/default_agents/coding/system_prompt.md +67 -0
- data/lib/octo/default_agents/general/profile.yml +2 -0
- data/lib/octo/default_agents/general/system_prompt.md +16 -0
- data/lib/octo/default_parsers/doc_parser.rb +69 -0
- data/lib/octo/default_parsers/docx_parser.rb +188 -0
- data/lib/octo/default_parsers/pdf_parser.rb +120 -0
- data/lib/octo/default_parsers/pdf_parser_ocr.py +103 -0
- data/lib/octo/default_parsers/pdf_parser_plumber.py +62 -0
- data/lib/octo/default_parsers/pptx_parser.rb +140 -0
- data/lib/octo/default_parsers/xlsx_parser.rb +121 -0
- data/lib/octo/default_skills/browser-setup/SKILL.md +426 -0
- data/lib/octo/default_skills/channel-manager/SKILL.md +623 -0
- data/lib/octo/default_skills/channel-manager/dingtalk_setup.rb +191 -0
- data/lib/octo/default_skills/channel-manager/discord_setup.rb +199 -0
- data/lib/octo/default_skills/channel-manager/feishu_setup.rb +574 -0
- data/lib/octo/default_skills/channel-manager/import_lark_skills.rb +97 -0
- data/lib/octo/default_skills/channel-manager/install_feishu_skills.rb +105 -0
- data/lib/octo/default_skills/channel-manager/weixin_setup.rb +274 -0
- data/lib/octo/default_skills/code-explorer/SKILL.md +36 -0
- data/lib/octo/default_skills/cron-task-creator/SKILL.md +257 -0
- data/lib/octo/default_skills/cron-task-creator/evals/evals.json +38 -0
- data/lib/octo/default_skills/onboard/SKILL.md +578 -0
- data/lib/octo/default_skills/onboard/scripts/import_external_skills.rb +413 -0
- data/lib/octo/default_skills/onboard/scripts/install_builtin_skills.rb +97 -0
- data/lib/octo/default_skills/persist-memory/SKILL.md +59 -0
- data/lib/octo/default_skills/personal-website/SKILL.md +113 -0
- data/lib/octo/default_skills/personal-website/publish.rb +235 -0
- data/lib/octo/default_skills/product-help/SKILL.md +123 -0
- data/lib/octo/default_skills/product-help/docs/agent-config.md +74 -0
- data/lib/octo/default_skills/product-help/docs/best-practices.md +49 -0
- data/lib/octo/default_skills/product-help/docs/browser-tool.md +53 -0
- data/lib/octo/default_skills/product-help/docs/built-in-skills.md +43 -0
- data/lib/octo/default_skills/product-help/docs/cli-reference.md +82 -0
- data/lib/octo/default_skills/product-help/docs/create-your-first-skill.md +47 -0
- data/lib/octo/default_skills/product-help/docs/faq.md +98 -0
- data/lib/octo/default_skills/product-help/docs/how-to-use-a-skill.md +58 -0
- data/lib/octo/default_skills/product-help/docs/installation.md +59 -0
- data/lib/octo/default_skills/product-help/docs/memory-system.md +61 -0
- data/lib/octo/default_skills/product-help/docs/octorules.md +62 -0
- data/lib/octo/default_skills/product-help/docs/session-management.md +63 -0
- data/lib/octo/default_skills/product-help/docs/skill-basics.md +55 -0
- data/lib/octo/default_skills/product-help/docs/skill-frontmatter.md +61 -0
- data/lib/octo/default_skills/product-help/docs/web-server.md +49 -0
- data/lib/octo/default_skills/product-help/docs/what-is-octo.md +37 -0
- data/lib/octo/default_skills/product-help/docs/windows-installation.md +36 -0
- data/lib/octo/default_skills/product-help/docs/writing-tips.md +53 -0
- data/lib/octo/default_skills/recall-memory/SKILL.md +65 -0
- data/lib/octo/default_skills/skill-add/SKILL.md +59 -0
- data/lib/octo/default_skills/skill-add/scripts/install_from_zip.rb +295 -0
- data/lib/octo/default_skills/skill-creator/SKILL.md +602 -0
- data/lib/octo/default_skills/skill-creator/agents/analyzer.md +274 -0
- data/lib/octo/default_skills/skill-creator/agents/comparator.md +202 -0
- data/lib/octo/default_skills/skill-creator/agents/grader.md +223 -0
- data/lib/octo/default_skills/skill-creator/eval-viewer/generate_review.py +471 -0
- data/lib/octo/default_skills/skill-creator/eval-viewer/viewer.html +1325 -0
- data/lib/octo/default_skills/skill-creator/references/schemas.md +430 -0
- data/lib/octo/default_skills/skill-creator/scripts/__init__.py +0 -0
- data/lib/octo/default_skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- data/lib/octo/default_skills/skill-creator/scripts/generate_report.py +326 -0
- data/lib/octo/default_skills/skill-creator/scripts/improve_description.py +310 -0
- data/lib/octo/default_skills/skill-creator/scripts/quick_validate.py +103 -0
- data/lib/octo/default_skills/skill-creator/scripts/run_eval.py +317 -0
- data/lib/octo/default_skills/skill-creator/scripts/run_loop.py +331 -0
- data/lib/octo/default_skills/skill-creator/scripts/utils.py +47 -0
- data/lib/octo/default_skills/skill-creator/scripts/validate_skill_frontmatter.rb +143 -0
- data/lib/octo/idle_compression_timer.rb +115 -0
- data/lib/octo/json_ui_controller.rb +204 -0
- data/lib/octo/message_format/anthropic.rb +409 -0
- data/lib/octo/message_format/bedrock.rb +361 -0
- data/lib/octo/message_format/open_ai.rb +222 -0
- data/lib/octo/message_history.rb +373 -0
- data/lib/octo/openai_stream_aggregator.rb +130 -0
- data/lib/octo/plain_ui_controller.rb +166 -0
- data/lib/octo/providers.rb +534 -0
- data/lib/octo/server/browser_manager.rb +397 -0
- data/lib/octo/server/channel/adapters/base.rb +82 -0
- data/lib/octo/server/channel/adapters/dingtalk/adapter.rb +314 -0
- data/lib/octo/server/channel/adapters/dingtalk/api_client.rb +391 -0
- data/lib/octo/server/channel/adapters/dingtalk/stream_client.rb +203 -0
- data/lib/octo/server/channel/adapters/discord/adapter.rb +229 -0
- data/lib/octo/server/channel/adapters/discord/api_client.rb +107 -0
- data/lib/octo/server/channel/adapters/discord/gateway_client.rb +270 -0
- data/lib/octo/server/channel/adapters/feishu/adapter.rb +320 -0
- data/lib/octo/server/channel/adapters/feishu/bot.rb +478 -0
- data/lib/octo/server/channel/adapters/feishu/file_processor.rb +36 -0
- data/lib/octo/server/channel/adapters/feishu/message_parser.rb +129 -0
- data/lib/octo/server/channel/adapters/feishu/ws_client.rb +423 -0
- data/lib/octo/server/channel/adapters/telegram/adapter.rb +375 -0
- data/lib/octo/server/channel/adapters/telegram/api_client.rb +205 -0
- data/lib/octo/server/channel/adapters/wecom/adapter.rb +148 -0
- data/lib/octo/server/channel/adapters/wecom/media_downloader.rb +115 -0
- data/lib/octo/server/channel/adapters/wecom/ws_client.rb +395 -0
- data/lib/octo/server/channel/adapters/weixin/adapter.rb +692 -0
- data/lib/octo/server/channel/adapters/weixin/api_client.rb +402 -0
- data/lib/octo/server/channel/channel_config.rb +178 -0
- data/lib/octo/server/channel/channel_manager.rb +468 -0
- data/lib/octo/server/channel/channel_ui_controller.rb +224 -0
- data/lib/octo/server/channel.rb +33 -0
- data/lib/octo/server/discover.rb +77 -0
- data/lib/octo/server/epipe_safe_io.rb +105 -0
- data/lib/octo/server/http_server.rb +3554 -0
- data/lib/octo/server/scheduler.rb +317 -0
- data/lib/octo/server/server_master.rb +325 -0
- data/lib/octo/server/session_registry.rb +431 -0
- data/lib/octo/server/web_ui_controller.rb +487 -0
- data/lib/octo/session_manager.rb +385 -0
- data/lib/octo/skill.rb +466 -0
- data/lib/octo/skill_loader.rb +328 -0
- data/lib/octo/tools/base.rb +118 -0
- data/lib/octo/tools/browser.rb +625 -0
- data/lib/octo/tools/edit.rb +165 -0
- data/lib/octo/tools/file_reader.rb +549 -0
- data/lib/octo/tools/glob.rb +162 -0
- data/lib/octo/tools/grep.rb +356 -0
- data/lib/octo/tools/invoke_skill.rb +96 -0
- data/lib/octo/tools/list_tasks.rb +54 -0
- data/lib/octo/tools/redo_task.rb +41 -0
- data/lib/octo/tools/request_user_feedback.rb +84 -0
- data/lib/octo/tools/security.rb +333 -0
- data/lib/octo/tools/terminal/output_cleaner.rb +63 -0
- data/lib/octo/tools/terminal/persistent_session.rb +268 -0
- data/lib/octo/tools/terminal/safe_rm.sh +106 -0
- data/lib/octo/tools/terminal/session_manager.rb +213 -0
- data/lib/octo/tools/terminal.rb +1828 -0
- data/lib/octo/tools/todo_manager.rb +374 -0
- data/lib/octo/tools/trash_manager.rb +388 -0
- data/lib/octo/tools/undo_task.rb +35 -0
- data/lib/octo/tools/web_fetch.rb +242 -0
- data/lib/octo/tools/web_search.rb +260 -0
- data/lib/octo/tools/write.rb +77 -0
- data/lib/octo/ui2/block_font.rb +10 -0
- data/lib/octo/ui2/components/base_component.rb +163 -0
- data/lib/octo/ui2/components/command_suggestions.rb +290 -0
- data/lib/octo/ui2/components/common_component.rb +96 -0
- data/lib/octo/ui2/components/inline_input.rb +226 -0
- data/lib/octo/ui2/components/input_area.rb +1338 -0
- data/lib/octo/ui2/components/message_component.rb +99 -0
- data/lib/octo/ui2/components/modal_component.rb +419 -0
- data/lib/octo/ui2/components/todo_area.rb +149 -0
- data/lib/octo/ui2/components/tool_component.rb +107 -0
- data/lib/octo/ui2/components/welcome_banner.rb +139 -0
- data/lib/octo/ui2/layout_manager.rb +807 -0
- data/lib/octo/ui2/line_editor.rb +363 -0
- data/lib/octo/ui2/markdown_renderer.rb +100 -0
- data/lib/octo/ui2/output_buffer.rb +370 -0
- data/lib/octo/ui2/progress_handle.rb +362 -0
- data/lib/octo/ui2/progress_indicator.rb +55 -0
- data/lib/octo/ui2/screen_buffer.rb +273 -0
- data/lib/octo/ui2/terminal_detector.rb +119 -0
- data/lib/octo/ui2/theme_manager.rb +85 -0
- data/lib/octo/ui2/themes/base_theme.rb +105 -0
- data/lib/octo/ui2/themes/hacker_theme.rb +62 -0
- data/lib/octo/ui2/themes/minimal_theme.rb +56 -0
- data/lib/octo/ui2/thinking_verbs.rb +26 -0
- data/lib/octo/ui2/ui_controller.rb +1625 -0
- data/lib/octo/ui2/view_renderer.rb +177 -0
- data/lib/octo/ui2.rb +40 -0
- data/lib/octo/ui_interface.rb +154 -0
- data/lib/octo/utils/arguments_parser.rb +191 -0
- data/lib/octo/utils/browser_detector.rb +195 -0
- data/lib/octo/utils/encoding.rb +92 -0
- data/lib/octo/utils/environment_detector.rb +140 -0
- data/lib/octo/utils/file_ignore_helper.rb +170 -0
- data/lib/octo/utils/file_processor.rb +601 -0
- data/lib/octo/utils/gitignore_parser.rb +154 -0
- data/lib/octo/utils/limit_stack.rb +152 -0
- data/lib/octo/utils/logger.rb +124 -0
- data/lib/octo/utils/login_shell.rb +72 -0
- data/lib/octo/utils/model_pricing.rb +646 -0
- data/lib/octo/utils/parser_manager.rb +165 -0
- data/lib/octo/utils/path_helper.rb +15 -0
- data/lib/octo/utils/scripts_manager.rb +59 -0
- data/lib/octo/utils/string_matcher.rb +158 -0
- data/lib/octo/utils/trash_directory.rb +112 -0
- data/lib/octo/utils/workspace_rules.rb +46 -0
- data/lib/octo/version.rb +5 -0
- data/lib/octo/web/app.css +7141 -0
- data/lib/octo/web/app.js +543 -0
- data/lib/octo/web/apple-touch-icon.png +0 -0
- data/lib/octo/web/auth.js +150 -0
- data/lib/octo/web/channels.js +276 -0
- data/lib/octo/web/datepicker.js +205 -0
- data/lib/octo/web/favicon.png +0 -0
- data/lib/octo/web/i18n.js +1073 -0
- data/lib/octo/web/icon-512.png +0 -0
- data/lib/octo/web/icon-dark.svg +25 -0
- data/lib/octo/web/icon.svg +29 -0
- data/lib/octo/web/index.html +871 -0
- data/lib/octo/web/marked.min.js +69 -0
- data/lib/octo/web/onboard.js +491 -0
- data/lib/octo/web/profile.js +442 -0
- data/lib/octo/web/sessions.js +4421 -0
- data/lib/octo/web/settings.js +913 -0
- data/lib/octo/web/sidebar.js +32 -0
- data/lib/octo/web/skills.js +885 -0
- data/lib/octo/web/tasks.js +297 -0
- data/lib/octo/web/theme.js +105 -0
- data/lib/octo/web/trash.js +343 -0
- data/lib/octo/web/vendor/hljs/highlight.min.js +1244 -0
- data/lib/octo/web/vendor/hljs/hljs-theme.css +95 -0
- data/lib/octo/web/vendor/katex/auto-render.min.js +1 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- data/lib/octo/web/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- data/lib/octo/web/vendor/katex/katex.min.css +1 -0
- data/lib/octo/web/vendor/katex/katex.min.js +1 -0
- data/lib/octo/web/version.js +449 -0
- data/lib/octo/web/weixin-qr.html +209 -0
- data/lib/octo/web/ws-dispatcher.js +357 -0
- data/lib/octo/web/ws.js +128 -0
- data/lib/octo.rb +145 -0
- data/scripts/build/build.sh +329 -0
- data/scripts/build/lib/apt.sh +56 -0
- data/scripts/build/lib/brew.sh +89 -0
- data/scripts/build/lib/colors.sh +17 -0
- data/scripts/build/lib/gem.sh +95 -0
- data/scripts/build/lib/mise.sh +125 -0
- data/scripts/build/lib/network.sh +157 -0
- data/scripts/build/lib/os.sh +57 -0
- data/scripts/build/lib/shell.sh +37 -0
- data/scripts/build/src/install.sh.cc +174 -0
- data/scripts/build/src/install_browser.sh.cc +101 -0
- data/scripts/build/src/install_full.sh.cc +290 -0
- data/scripts/build/src/install_rails_deps.sh.cc +145 -0
- data/scripts/build/src/install_system_deps.sh.cc +123 -0
- data/scripts/build/src/uninstall.sh.cc +101 -0
- data/scripts/install.ps1 +532 -0
- data/scripts/install.sh +567 -0
- data/scripts/install_browser.sh +479 -0
- data/scripts/install_full.sh +838 -0
- data/scripts/install_rails_deps.sh +746 -0
- data/scripts/install_system_deps.sh +518 -0
- data/scripts/uninstall.sh +287 -0
- data/sig/octo.rbs +4 -0
- 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`.
|