connectonion 0.6.1__py3-none-any.whl → 0.6.3__py3-none-any.whl

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 (413) hide show
  1. connectonion/__init__.py +46 -9
  2. connectonion/cli/__init__.py +11 -1
  3. connectonion/cli/browser_agent/__init__.py +11 -1
  4. connectonion/cli/browser_agent/browser.py +95 -142
  5. connectonion/cli/browser_agent/element_finder.py +147 -0
  6. connectonion/cli/browser_agent/highlight_screenshot.py +182 -0
  7. connectonion/cli/browser_agent/prompt.md +188 -105
  8. connectonion/cli/browser_agent/prompts/element_matcher.md +59 -0
  9. connectonion/cli/browser_agent/prompts/form_filler.md +19 -0
  10. connectonion/cli/browser_agent/prompts/scroll_strategy.md +36 -0
  11. connectonion/cli/browser_agent/scripts/extract_elements.js +126 -0
  12. connectonion/cli/browser_agent/scroll.py +145 -0
  13. connectonion/cli/co_ai/__init__.py +6 -0
  14. connectonion/cli/co_ai/agent.py +87 -0
  15. connectonion/cli/co_ai/agents/__init__.py +5 -0
  16. connectonion/cli/co_ai/agents/registry.py +57 -0
  17. connectonion/cli/co_ai/commands/__init__.py +45 -0
  18. connectonion/cli/co_ai/commands/compact.py +173 -0
  19. connectonion/cli/co_ai/commands/cost.py +77 -0
  20. connectonion/cli/co_ai/commands/export.py +60 -0
  21. connectonion/cli/co_ai/commands/help.py +80 -0
  22. connectonion/cli/co_ai/commands/init.py +101 -0
  23. connectonion/cli/co_ai/commands/sessions.py +55 -0
  24. connectonion/cli/co_ai/commands/tasks.py +63 -0
  25. connectonion/cli/co_ai/commands/undo.py +103 -0
  26. connectonion/cli/co_ai/context.py +127 -0
  27. connectonion/cli/co_ai/main.py +52 -0
  28. connectonion/cli/co_ai/plugins/__init__.py +6 -0
  29. connectonion/cli/co_ai/plugins/reminder.py +76 -0
  30. connectonion/cli/co_ai/plugins/shell_approval.py +105 -0
  31. connectonion/cli/co_ai/prompts/agents/explore.md +79 -0
  32. connectonion/cli/co_ai/prompts/agents/plan.md +60 -0
  33. connectonion/cli/co_ai/prompts/assembler.py +303 -0
  34. connectonion/cli/{docs/co-vibecoding-principles-docs-contexts-all-in-one.md → co_ai/prompts/connectonion/README.md} +26 -0
  35. connectonion/cli/co_ai/prompts/connectonion/api.md +457 -0
  36. connectonion/cli/co_ai/prompts/connectonion/cli/README.md +805 -0
  37. connectonion/cli/co_ai/prompts/connectonion/cli/auth.md +46 -0
  38. connectonion/cli/co_ai/prompts/connectonion/cli/browser.md +235 -0
  39. connectonion/cli/co_ai/prompts/connectonion/cli/copy.md +184 -0
  40. connectonion/cli/co_ai/prompts/connectonion/cli/create.md +335 -0
  41. connectonion/cli/co_ai/prompts/connectonion/cli/init.md +431 -0
  42. connectonion/cli/co_ai/prompts/connectonion/co-directory-structure.md +214 -0
  43. connectonion/cli/co_ai/prompts/connectonion/concepts/agent.md +1078 -0
  44. connectonion/cli/co_ai/prompts/connectonion/concepts/events.md +816 -0
  45. connectonion/cli/co_ai/prompts/connectonion/concepts/llm_do.md +256 -0
  46. connectonion/cli/co_ai/prompts/connectonion/concepts/max_iterations.md +362 -0
  47. connectonion/cli/co_ai/prompts/connectonion/concepts/models.md +641 -0
  48. connectonion/cli/co_ai/prompts/connectonion/concepts/plugins.md +100 -0
  49. connectonion/cli/co_ai/prompts/connectonion/concepts/prompts.md +122 -0
  50. connectonion/cli/co_ai/prompts/connectonion/concepts/tools.md +512 -0
  51. connectonion/cli/co_ai/prompts/connectonion/concepts/transcribe.md +156 -0
  52. connectonion/cli/co_ai/prompts/connectonion/concepts/trust.md +291 -0
  53. connectonion/cli/co_ai/prompts/connectonion/debug/README.md +18 -0
  54. connectonion/cli/co_ai/prompts/connectonion/debug/auto_debug.md +1026 -0
  55. connectonion/cli/co_ai/prompts/connectonion/debug/console.md +129 -0
  56. connectonion/cli/co_ai/prompts/connectonion/debug/eval-format.md +178 -0
  57. connectonion/cli/co_ai/prompts/connectonion/debug/eval.md +230 -0
  58. connectonion/cli/co_ai/prompts/connectonion/debug/exceptions.md +307 -0
  59. connectonion/cli/co_ai/prompts/connectonion/debug/log.md +117 -0
  60. connectonion/cli/co_ai/prompts/connectonion/debug/xray.md +215 -0
  61. connectonion/cli/co_ai/prompts/connectonion/design-decisions/001-choosing-input-method.md +202 -0
  62. connectonion/cli/co_ai/prompts/connectonion/design-decisions/002-choosing-llm-function-name.md +202 -0
  63. connectonion/cli/co_ai/prompts/connectonion/design-decisions/003-choosing-trust-keyword.md +141 -0
  64. connectonion/cli/co_ai/prompts/connectonion/design-decisions/004-cli-create-flow.md +117 -0
  65. connectonion/cli/co_ai/prompts/connectonion/design-decisions/005-designing-agent-network-protocol.md +503 -0
  66. connectonion/cli/co_ai/prompts/connectonion/design-decisions/006-agent-address-format.md +305 -0
  67. connectonion/cli/co_ai/prompts/connectonion/design-decisions/007-authentication-backend-design.md +240 -0
  68. connectonion/cli/co_ai/prompts/connectonion/design-decisions/008-naming-is-hard.md +228 -0
  69. connectonion/cli/co_ai/prompts/connectonion/design-decisions/009-why-connect-function.md +167 -0
  70. connectonion/cli/co_ai/prompts/connectonion/design-decisions/010-cli-ux-progressive-disclosure.md +176 -0
  71. connectonion/cli/co_ai/prompts/connectonion/design-decisions/011-global-config-identity-management.md +357 -0
  72. connectonion/cli/co_ai/prompts/connectonion/design-decisions/012-tool-execution-separation.md +259 -0
  73. connectonion/cli/co_ai/prompts/connectonion/design-decisions/013-debug-and-logging-design.md +253 -0
  74. connectonion/cli/co_ai/prompts/connectonion/design-decisions/014-hook-system-design.md +510 -0
  75. connectonion/cli/co_ai/prompts/connectonion/design-decisions/015-interactive-auto-debug-design.md +837 -0
  76. connectonion/cli/co_ai/prompts/connectonion/design-decisions/016-why-no-zero-knowledge-proofs.md +358 -0
  77. connectonion/cli/co_ai/prompts/connectonion/design-decisions/017-session-logging-and-eval-format.md +120 -0
  78. connectonion/cli/co_ai/prompts/connectonion/design-decisions/018-event-api-naming.md +274 -0
  79. connectonion/cli/co_ai/prompts/connectonion/design-decisions/019-agent-lifecycle-design.md +655 -0
  80. connectonion/cli/co_ai/prompts/connectonion/design-decisions/020-trust-system-and-network-architecture.md +503 -0
  81. connectonion/cli/co_ai/prompts/connectonion/design-decisions/021-task-storage-jsonl-design.md +496 -0
  82. connectonion/cli/co_ai/prompts/connectonion/design-decisions/022-raw-asgi-implementation.md +273 -0
  83. connectonion/cli/co_ai/prompts/connectonion/examples/agent_reasoning.md +62 -0
  84. connectonion/cli/co_ai/prompts/connectonion/examples/atomic_tools.md +24 -0
  85. connectonion/cli/co_ai/prompts/connectonion/examples/load_guide.md +18 -0
  86. connectonion/cli/co_ai/prompts/connectonion/examples.md +0 -0
  87. connectonion/cli/co_ai/prompts/connectonion/hook-system-options.md +364 -0
  88. connectonion/cli/co_ai/prompts/connectonion/index.md +162 -0
  89. connectonion/cli/co_ai/prompts/connectonion/integrations/README.md +12 -0
  90. connectonion/cli/co_ai/prompts/connectonion/integrations/auth.md +450 -0
  91. connectonion/cli/co_ai/prompts/connectonion/integrations/google.md +431 -0
  92. connectonion/cli/co_ai/prompts/connectonion/integrations/microsoft.md +370 -0
  93. connectonion/cli/co_ai/prompts/connectonion/network/README.md +14 -0
  94. connectonion/cli/co_ai/prompts/connectonion/network/connect.md +543 -0
  95. connectonion/cli/co_ai/prompts/connectonion/network/connection.md +538 -0
  96. connectonion/cli/co_ai/prompts/connectonion/network/deploy.md +123 -0
  97. connectonion/cli/co_ai/prompts/connectonion/network/host.md +1049 -0
  98. connectonion/cli/co_ai/prompts/connectonion/network/protocol/agent-relay-protocol.md +495 -0
  99. connectonion/cli/co_ai/prompts/connectonion/network/protocol/announce-message.md +115 -0
  100. connectonion/cli/co_ai/prompts/connectonion/principles.md +124 -0
  101. connectonion/cli/co_ai/prompts/connectonion/quickstart.md +261 -0
  102. connectonion/cli/co_ai/prompts/connectonion/roadmap.md +81 -0
  103. connectonion/cli/co_ai/prompts/connectonion/templates/README.md +77 -0
  104. connectonion/cli/co_ai/prompts/connectonion/templates/meta-agent.md +152 -0
  105. connectonion/cli/co_ai/prompts/connectonion/templates/minimal.md +105 -0
  106. connectonion/cli/co_ai/prompts/connectonion/templates/playwright.md +130 -0
  107. connectonion/cli/co_ai/prompts/connectonion/templates/web-research.md +144 -0
  108. connectonion/cli/co_ai/prompts/connectonion/tui/README.md +95 -0
  109. connectonion/cli/co_ai/prompts/connectonion/tui/chat.md +181 -0
  110. connectonion/cli/co_ai/prompts/connectonion/tui/divider.md +63 -0
  111. connectonion/cli/co_ai/prompts/connectonion/tui/dropdown.md +83 -0
  112. connectonion/cli/co_ai/prompts/connectonion/tui/footer.md +44 -0
  113. connectonion/cli/co_ai/prompts/connectonion/tui/fuzzy.md +68 -0
  114. connectonion/cli/co_ai/prompts/connectonion/tui/input.md +84 -0
  115. connectonion/cli/co_ai/prompts/connectonion/tui/keys.md +77 -0
  116. connectonion/cli/co_ai/prompts/connectonion/tui/pick.md +71 -0
  117. connectonion/cli/co_ai/prompts/connectonion/tui/providers.md +89 -0
  118. connectonion/cli/co_ai/prompts/connectonion/tui/status_bar.md +67 -0
  119. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/README.md +156 -0
  120. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/calendar_plugin.md +68 -0
  121. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/eval.md +89 -0
  122. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/gmail_plugin.md +68 -0
  123. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/image_result_formatter.md +74 -0
  124. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/re_act.md +86 -0
  125. connectonion/cli/co_ai/prompts/connectonion/useful_plugins/shell_approval.md +69 -0
  126. connectonion/cli/co_ai/prompts/connectonion/useful_tools/README.md +81 -0
  127. connectonion/cli/co_ai/prompts/connectonion/useful_tools/diff_writer.md +138 -0
  128. connectonion/cli/co_ai/prompts/connectonion/useful_tools/get_emails.md +499 -0
  129. connectonion/cli/co_ai/prompts/connectonion/useful_tools/gmail.md +135 -0
  130. connectonion/cli/co_ai/prompts/connectonion/useful_tools/google_calendar.md +106 -0
  131. connectonion/cli/co_ai/prompts/connectonion/useful_tools/memory.md +486 -0
  132. connectonion/cli/co_ai/prompts/connectonion/useful_tools/microsoft_calendar.md +106 -0
  133. connectonion/cli/co_ai/prompts/connectonion/useful_tools/outlook.md +120 -0
  134. connectonion/cli/co_ai/prompts/connectonion/useful_tools/send_email.md +403 -0
  135. connectonion/cli/co_ai/prompts/connectonion/useful_tools/shell.md +95 -0
  136. connectonion/cli/co_ai/prompts/connectonion/useful_tools/slash_command.md +96 -0
  137. connectonion/cli/co_ai/prompts/connectonion/useful_tools/terminal.md +97 -0
  138. connectonion/cli/co_ai/prompts/connectonion/useful_tools/todo_list.md +252 -0
  139. connectonion/cli/co_ai/prompts/connectonion/useful_tools/web_fetch.md +130 -0
  140. connectonion/cli/co_ai/prompts/connectonion/vibe-coding-guide.md +97 -0
  141. connectonion/cli/co_ai/prompts/connectonion/windows-support.md +258 -0
  142. connectonion/cli/co_ai/prompts/main.md +247 -0
  143. connectonion/cli/co_ai/prompts/reminders/plan_mode.md +34 -0
  144. connectonion/cli/co_ai/prompts/summarization.md +55 -0
  145. connectonion/cli/co_ai/prompts/tools/ask_user.md +61 -0
  146. connectonion/cli/co_ai/prompts/tools/background.md +57 -0
  147. connectonion/cli/co_ai/prompts/tools/edit.md +90 -0
  148. connectonion/cli/co_ai/prompts/tools/glob.md +52 -0
  149. connectonion/cli/co_ai/prompts/tools/grep.md +55 -0
  150. connectonion/cli/co_ai/prompts/tools/plan_mode.md +80 -0
  151. connectonion/cli/co_ai/prompts/tools/read.md +40 -0
  152. connectonion/cli/co_ai/prompts/tools/shell.md +67 -0
  153. connectonion/cli/co_ai/prompts/tools/task.md +51 -0
  154. connectonion/cli/co_ai/prompts/tools/todo.md +139 -0
  155. connectonion/cli/co_ai/prompts/tools/write.md +47 -0
  156. connectonion/cli/co_ai/prompts/workflow.md +89 -0
  157. connectonion/cli/co_ai/reminders.py +159 -0
  158. connectonion/cli/co_ai/sessions.py +110 -0
  159. connectonion/cli/co_ai/skills/__init__.py +37 -0
  160. connectonion/cli/co_ai/skills/builtin/commit/SKILL.md +63 -0
  161. connectonion/cli/co_ai/skills/builtin/review-pr/SKILL.md +76 -0
  162. connectonion/cli/co_ai/skills/loader.py +166 -0
  163. connectonion/cli/co_ai/skills/tool.py +46 -0
  164. connectonion/cli/co_ai/tools/__init__.py +92 -0
  165. connectonion/cli/co_ai/tools/ask_user.py +35 -0
  166. connectonion/cli/co_ai/tools/background.py +201 -0
  167. connectonion/cli/co_ai/tools/diff_writer.py +291 -0
  168. connectonion/cli/co_ai/tools/edit.py +89 -0
  169. connectonion/cli/co_ai/tools/glob.py +84 -0
  170. connectonion/cli/co_ai/tools/grep.py +158 -0
  171. connectonion/cli/co_ai/tools/load_guide.py +23 -0
  172. connectonion/cli/co_ai/tools/multi_edit.py +116 -0
  173. connectonion/cli/co_ai/tools/plan_mode.py +172 -0
  174. connectonion/cli/co_ai/tools/read.py +67 -0
  175. connectonion/cli/co_ai/tools/task.py +59 -0
  176. connectonion/cli/co_ai/tools/todo_list.py +159 -0
  177. connectonion/cli/co_ai/tools/write.py +126 -0
  178. connectonion/cli/commands/__init__.py +11 -1
  179. connectonion/cli/commands/ai_commands.py +34 -0
  180. connectonion/cli/commands/copy_commands.py +55 -6
  181. connectonion/cli/commands/create.py +20 -17
  182. connectonion/cli/commands/init.py +19 -22
  183. connectonion/cli/commands/project_cmd_lib.py +15 -0
  184. connectonion/cli/main.py +11 -0
  185. connectonion/console.py +15 -1
  186. connectonion/core/__init__.py +10 -1
  187. connectonion/core/agent.py +37 -16
  188. connectonion/core/exceptions.py +74 -0
  189. connectonion/core/llm.py +54 -6
  190. connectonion/core/tool_executor.py +32 -31
  191. connectonion/core/tool_factory.py +47 -10
  192. connectonion/debug/__init__.py +10 -1
  193. connectonion/debug/debug_explainer/__init__.py +10 -1
  194. connectonion/debug/execution_analyzer/__init__.py +10 -1
  195. connectonion/debug/execution_analyzer/execution_analysis.py +5 -2
  196. connectonion/debug/runtime_inspector/__init__.py +10 -1
  197. connectonion/docs/.package-ignore +6 -0
  198. connectonion/docs/README.md +2036 -0
  199. connectonion/docs/api.md +457 -0
  200. connectonion/docs/archive/001-ai-agent-is-just-prompt-plus-function.md +249 -0
  201. connectonion/docs/archive/README.md +53 -0
  202. connectonion/docs/archive/archive/consolidation-plan.md +72 -0
  203. connectonion/docs/archive/archive/core-principles-extracted.md +239 -0
  204. connectonion/docs/archive/archive/master-principles.md +222 -0
  205. connectonion/docs/archive/archive/principles.md +293 -0
  206. connectonion/docs/archive/archive/simplicity-principles.md +221 -0
  207. connectonion/docs/archive/attack-defense-insights.md +410 -0
  208. connectonion/docs/archive/business-model.md +305 -0
  209. connectonion/docs/archive/core-principles-unified.md +190 -0
  210. connectonion/docs/archive/discussion-journey.md +178 -0
  211. connectonion/docs/archive/economic-analysis.md +323 -0
  212. connectonion/docs/archive/features/01-share-and-find.md +256 -0
  213. connectonion/docs/archive/features/02-agent-authentication.md +93 -0
  214. connectonion/docs/archive/features/03-test-before-trust.md +71 -0
  215. connectonion/docs/archive/features/06-reliability-and-offline.md +197 -0
  216. connectonion/docs/archive/features/README.md +46 -0
  217. connectonion/docs/archive/features-roadmap.md +247 -0
  218. connectonion/docs/archive/mcp-comparison-insights.md +215 -0
  219. connectonion/docs/archive/migration-strategy.md +571 -0
  220. connectonion/docs/archive/mini-whitepaper.md +293 -0
  221. connectonion/docs/archive/network-protocol.md +394 -0
  222. connectonion/docs/archive/semantic-revolution.md +367 -0
  223. connectonion/docs/archive/technical-architecture.md +453 -0
  224. connectonion/docs/archive/the-semantic-insight.md +207 -0
  225. connectonion/docs/archive/threat-model.md +164 -0
  226. connectonion/docs/cli/README.md +805 -0
  227. connectonion/docs/cli/auth.md +46 -0
  228. connectonion/docs/cli/browser.md +235 -0
  229. connectonion/docs/cli/copy.md +232 -0
  230. connectonion/docs/cli/create.md +335 -0
  231. connectonion/docs/cli/init.md +431 -0
  232. connectonion/docs/co-directory-structure.md +214 -0
  233. connectonion/docs/concepts/agent.md +1078 -0
  234. connectonion/docs/concepts/events.md +699 -0
  235. connectonion/docs/concepts/llm_do.md +256 -0
  236. connectonion/docs/concepts/max_iterations.md +362 -0
  237. connectonion/docs/concepts/models.md +641 -0
  238. connectonion/docs/concepts/plugins.md +100 -0
  239. connectonion/docs/concepts/prompts.md +122 -0
  240. connectonion/docs/concepts/session.md +428 -0
  241. connectonion/docs/concepts/tools.md +512 -0
  242. connectonion/docs/concepts/transcribe.md +156 -0
  243. connectonion/docs/concepts/trust.md +291 -0
  244. connectonion/docs/connectonion.md +1256 -0
  245. connectonion/docs/debug/README.md +18 -0
  246. connectonion/docs/debug/auto_debug.md +1026 -0
  247. connectonion/docs/debug/console.md +129 -0
  248. connectonion/docs/debug/eval-format.md +178 -0
  249. connectonion/docs/debug/eval.md +230 -0
  250. connectonion/docs/debug/exceptions.md +307 -0
  251. connectonion/docs/debug/log.md +117 -0
  252. connectonion/docs/debug/xray.md +215 -0
  253. connectonion/docs/design-decisions/001-choosing-input-method.md +202 -0
  254. connectonion/docs/design-decisions/002-choosing-llm-function-name.md +202 -0
  255. connectonion/docs/design-decisions/003-choosing-trust-keyword.md +141 -0
  256. connectonion/docs/design-decisions/004-cli-create-flow.md +117 -0
  257. connectonion/docs/design-decisions/005-designing-agent-network-protocol.md +503 -0
  258. connectonion/docs/design-decisions/006-agent-address-format.md +305 -0
  259. connectonion/docs/design-decisions/007-authentication-backend-design.md +240 -0
  260. connectonion/docs/design-decisions/008-naming-is-hard.md +228 -0
  261. connectonion/docs/design-decisions/009-why-connect-function.md +167 -0
  262. connectonion/docs/design-decisions/010-cli-ux-progressive-disclosure.md +176 -0
  263. connectonion/docs/design-decisions/011-global-config-identity-management.md +357 -0
  264. connectonion/docs/design-decisions/012-tool-execution-separation.md +259 -0
  265. connectonion/docs/design-decisions/013-debug-and-logging-design.md +253 -0
  266. connectonion/docs/design-decisions/014-hook-system-design.md +510 -0
  267. connectonion/docs/design-decisions/015-interactive-auto-debug-design.md +837 -0
  268. connectonion/docs/design-decisions/016-why-no-zero-knowledge-proofs.md +358 -0
  269. connectonion/docs/design-decisions/017-session-logging-and-eval-format.md +120 -0
  270. connectonion/docs/design-decisions/018-event-api-naming.md +274 -0
  271. connectonion/docs/design-decisions/019-agent-lifecycle-design.md +655 -0
  272. connectonion/docs/design-decisions/020-trust-system-and-network-architecture.md +503 -0
  273. connectonion/docs/design-decisions/021-task-storage-jsonl-design.md +496 -0
  274. connectonion/docs/design-decisions/022-raw-asgi-implementation.md +273 -0
  275. connectonion/docs/examples.md +0 -0
  276. connectonion/docs/hook-system-options.md +364 -0
  277. connectonion/docs/integrations/README.md +12 -0
  278. connectonion/docs/integrations/auth.md +450 -0
  279. connectonion/docs/integrations/google.md +431 -0
  280. connectonion/docs/integrations/microsoft.md +370 -0
  281. connectonion/docs/network/README.md +14 -0
  282. connectonion/docs/network/connect.md +629 -0
  283. connectonion/docs/network/deploy.md +124 -0
  284. connectonion/docs/network/host.md +1087 -0
  285. connectonion/docs/network/io.md +538 -0
  286. connectonion/docs/network/protocol/agent-relay-protocol.md +495 -0
  287. connectonion/docs/network/protocol/announce-message.md +115 -0
  288. connectonion/docs/principles.md +124 -0
  289. connectonion/docs/quickstart.md +261 -0
  290. connectonion/docs/roadmap.md +81 -0
  291. connectonion/docs/templates/README.md +77 -0
  292. connectonion/docs/templates/meta-agent.md +152 -0
  293. connectonion/docs/templates/minimal.md +105 -0
  294. connectonion/docs/templates/playwright.md +130 -0
  295. connectonion/docs/templates/web-research.md +144 -0
  296. connectonion/docs/tui/README.md +95 -0
  297. connectonion/docs/tui/chat.md +181 -0
  298. connectonion/docs/tui/divider.md +63 -0
  299. connectonion/docs/tui/dropdown.md +83 -0
  300. connectonion/docs/tui/footer.md +44 -0
  301. connectonion/docs/tui/fuzzy.md +68 -0
  302. connectonion/docs/tui/input.md +84 -0
  303. connectonion/docs/tui/keys.md +77 -0
  304. connectonion/docs/tui/pick.md +71 -0
  305. connectonion/docs/tui/providers.md +89 -0
  306. connectonion/docs/tui/status_bar.md +67 -0
  307. connectonion/docs/useful_plugins/README.md +160 -0
  308. connectonion/docs/useful_plugins/calendar_plugin.md +68 -0
  309. connectonion/docs/useful_plugins/eval.md +89 -0
  310. connectonion/docs/useful_plugins/gmail_plugin.md +68 -0
  311. connectonion/docs/useful_plugins/image_result_formatter.md +74 -0
  312. connectonion/docs/useful_plugins/re_act.md +86 -0
  313. connectonion/docs/useful_plugins/shell_approval.md +69 -0
  314. connectonion/docs/useful_plugins/system_reminder.md +210 -0
  315. connectonion/docs/useful_prompts/README.md +127 -0
  316. connectonion/docs/useful_prompts/coding_agent.md +214 -0
  317. connectonion/docs/useful_tools/README.md +81 -0
  318. connectonion/docs/useful_tools/ask_user.md +103 -0
  319. connectonion/docs/useful_tools/diff_writer.md +158 -0
  320. connectonion/docs/useful_tools/get_emails.md +519 -0
  321. connectonion/docs/useful_tools/gmail.md +155 -0
  322. connectonion/docs/useful_tools/google_calendar.md +126 -0
  323. connectonion/docs/useful_tools/memory.md +506 -0
  324. connectonion/docs/useful_tools/microsoft_calendar.md +126 -0
  325. connectonion/docs/useful_tools/outlook.md +140 -0
  326. connectonion/docs/useful_tools/send_email.md +423 -0
  327. connectonion/docs/useful_tools/shell.md +115 -0
  328. connectonion/docs/useful_tools/slash_command.md +116 -0
  329. connectonion/docs/useful_tools/terminal.md +115 -0
  330. connectonion/docs/useful_tools/todo_list.md +272 -0
  331. connectonion/docs/useful_tools/web_fetch.md +150 -0
  332. connectonion/docs/vibe-coding-guide.md +97 -0
  333. connectonion/docs/windows-support.md +258 -0
  334. connectonion/logger.py +3 -3
  335. connectonion/network/__init__.py +19 -6
  336. connectonion/network/asgi/__init__.py +81 -0
  337. connectonion/network/asgi/http.py +205 -0
  338. connectonion/network/asgi/websocket.py +217 -0
  339. connectonion/network/connect.py +232 -185
  340. connectonion/network/host/__init__.py +59 -0
  341. connectonion/network/host/auth.py +191 -0
  342. connectonion/network/host/routes.py +135 -0
  343. connectonion/network/host/server.py +289 -0
  344. connectonion/network/host/session.py +78 -0
  345. connectonion/network/io/__init__.py +21 -0
  346. connectonion/network/{connection.py → io/base.py} +17 -42
  347. connectonion/network/io/websocket.py +55 -0
  348. connectonion/network/relay.py +37 -16
  349. connectonion/network/trust/__init__.py +30 -0
  350. connectonion/network/trust/factory.py +138 -0
  351. connectonion/network/{trust_agents.py → trust/prompts.py} +3 -3
  352. connectonion/network/{trust_functions.py → trust/tools.py} +2 -2
  353. connectonion/prompt_files/__init__.py +11 -1
  354. connectonion/prompt_files/react_acknowledge.md +26 -0
  355. connectonion/prompts.py +10 -1
  356. connectonion/tui/chat.py +10 -1
  357. connectonion/tui/divider.py +10 -1
  358. connectonion/tui/dropdown.py +10 -1
  359. connectonion/tui/footer.py +8 -0
  360. connectonion/tui/fuzzy.py +11 -1
  361. connectonion/tui/input.py +118 -70
  362. connectonion/tui/keys.py +133 -6
  363. connectonion/tui/providers.py +11 -1
  364. connectonion/tui/status_bar.py +10 -1
  365. connectonion/useful_events_handlers/__init__.py +8 -0
  366. connectonion/useful_events_handlers/reflect.py +19 -4
  367. connectonion/useful_plugins/__init__.py +2 -1
  368. connectonion/useful_plugins/eval.py +2 -2
  369. connectonion/useful_plugins/gmail_plugin.py +3 -3
  370. connectonion/useful_plugins/image_result_formatter.py +3 -3
  371. connectonion/useful_plugins/re_act.py +114 -28
  372. connectonion/useful_plugins/shell_approval.py +2 -2
  373. connectonion/useful_plugins/system_reminder.py +103 -0
  374. connectonion/useful_plugins/ui_stream.py +18 -133
  375. connectonion/useful_prompts/README.md +61 -0
  376. connectonion/useful_prompts/__init__.py +45 -0
  377. connectonion/useful_prompts/coding_agent/README.md +106 -0
  378. connectonion/useful_prompts/coding_agent/assembler.py +123 -0
  379. connectonion/useful_prompts/coding_agent/prompts/main.md +227 -0
  380. connectonion/useful_prompts/coding_agent/prompts/tools/ask_user.md +61 -0
  381. connectonion/useful_prompts/coding_agent/prompts/tools/background.md +57 -0
  382. connectonion/useful_prompts/coding_agent/prompts/tools/edit.md +90 -0
  383. connectonion/useful_prompts/coding_agent/prompts/tools/glob.md +52 -0
  384. connectonion/useful_prompts/coding_agent/prompts/tools/grep.md +55 -0
  385. connectonion/useful_prompts/coding_agent/prompts/tools/plan_mode.md +80 -0
  386. connectonion/useful_prompts/coding_agent/prompts/tools/read.md +40 -0
  387. connectonion/useful_prompts/coding_agent/prompts/tools/shell.md +67 -0
  388. connectonion/useful_prompts/coding_agent/prompts/tools/task.md +51 -0
  389. connectonion/useful_prompts/coding_agent/prompts/tools/todo.md +139 -0
  390. connectonion/useful_prompts/coding_agent/prompts/tools/write.md +48 -0
  391. connectonion/useful_prompts/system-reminders/security-warning.md +14 -0
  392. connectonion/useful_prompts/system-reminders/test-reminder.md +11 -0
  393. connectonion/useful_tools/__init__.py +31 -4
  394. connectonion/useful_tools/ask_user.py +35 -0
  395. connectonion/useful_tools/bash.py +69 -0
  396. connectonion/useful_tools/diff_writer.py +186 -94
  397. connectonion/useful_tools/edit.py +102 -0
  398. connectonion/useful_tools/glob_files.py +97 -0
  399. connectonion/useful_tools/grep_files.py +171 -0
  400. connectonion/useful_tools/multi_edit.py +116 -0
  401. connectonion/useful_tools/read_file.py +73 -0
  402. connectonion/useful_tools/shell.py +50 -45
  403. connectonion/useful_tools/write_file.py +129 -0
  404. {connectonion-0.6.1.dist-info → connectonion-0.6.3.dist-info}/METADATA +10 -3
  405. connectonion-0.6.3.dist-info/RECORD +469 -0
  406. connectonion/cli/browser_agent/scroll_strategies.py +0 -276
  407. connectonion/network/asgi.py +0 -407
  408. connectonion/network/host.py +0 -616
  409. connectonion/network/trust.py +0 -166
  410. connectonion-0.6.1.dist-info/RECORD +0 -123
  411. /connectonion/cli/{docs → co_ai/prompts/connectonion}/connectonion.md +0 -0
  412. {connectonion-0.6.1.dist-info → connectonion-0.6.3.dist-info}/WHEEL +0 -0
  413. {connectonion-0.6.1.dist-info → connectonion-0.6.3.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,228 @@
1
+ # Naming is Hard: Why We Chose "Address" Over "Identity"
2
+
3
+ *September 3, 2025*
4
+
5
+ There's a famous quote in computer science: "There are only two hard things in Computer Science: cache invalidation and naming things." Today, we're talking about the second one.
6
+
7
+ ## The Naming Dilemma
8
+
9
+ When implementing key generation for ConnectOnion agents, we had a seemingly simple decision: what do we call this thing that uniquely identifies an agent?
10
+
11
+ Our first draft:
12
+ ```python
13
+ # connectonion/crypto.py
14
+ def generate_agent_identity():
15
+ """Generate cryptographic identity for agent."""
16
+ ...
17
+ ```
18
+
19
+ It felt sophisticated. Technical. Important. It also felt... wrong.
20
+
21
+ ## The Options We Considered
22
+
23
+ ### Option 1: Identity
24
+ ```python
25
+ identity = generate_agent_identity()
26
+ print(f"Agent identity: {identity}")
27
+ ```
28
+
29
+ **Pros:**
30
+ - Sounds comprehensive
31
+ - Technically accurate (it IS an identity)
32
+ - Used by many identity systems
33
+
34
+ **Cons:**
35
+ - Abstract and vague
36
+ - Makes users think "identity management" (scary!)
37
+ - Overloaded term in software
38
+
39
+ ### Option 2: ID
40
+ ```python
41
+ agent_id = generate_agent_id()
42
+ print(f"Agent ID: {agent_id}")
43
+ ```
44
+
45
+ **Pros:**
46
+ - Short and simple
47
+ - Familiar from databases
48
+
49
+ **Cons:**
50
+ - Too generic
51
+ - Doesn't convey that it's cryptographic
52
+ - Confusion with database IDs
53
+
54
+ ### Option 3: Key
55
+ ```python
56
+ agent_key = generate_agent_key()
57
+ print(f"Agent key: {agent_key}")
58
+ ```
59
+
60
+ **Pros:**
61
+ - Technically accurate
62
+ - Developers understand keys
63
+
64
+ **Cons:**
65
+ - Which key? Public? Private?
66
+ - Sounds like API keys
67
+ - Implementation detail, not user concept
68
+
69
+ ### Option 4: Address
70
+ ```python
71
+ address = generate_address()
72
+ print(f"Agent address: {address}")
73
+ ```
74
+
75
+ **Pros:**
76
+ - Immediately understood
77
+ - Familiar from email, web, crypto
78
+ - Concrete and specific
79
+ - Matches user mental model
80
+
81
+ **Cons:**
82
+ - ...actually, none?
83
+
84
+ ## The Winner: Address
85
+
86
+ We chose "address" because it just makes sense. Everyone understands addresses:
87
+ - Email has addresses
88
+ - Websites have addresses
89
+ - Ethereum has addresses
90
+ - Even physical mail has addresses
91
+
92
+ When you tell someone "this is your agent's address," they immediately understand it's how others can reach that agent.
93
+
94
+ ## The Ripple Effect
95
+
96
+ Once we chose "address," everything else fell into place:
97
+
98
+ ```python
99
+ # Before (confusing)
100
+ from connectonion.crypto import generate_agent_identity
101
+ identity = generate_agent_identity()
102
+ save_identity(identity)
103
+
104
+ # After (clear)
105
+ from connectonion.address import generate
106
+ address = generate()
107
+ save(address)
108
+ ```
109
+
110
+ The file name became obvious too:
111
+ - ❌ `crypto.py` - Scary, too broad
112
+ - ❌ `identity.py` - Abstract
113
+ - ❌ `keys.py` - Implementation detail
114
+ - ✅ `address.py` - Perfect!
115
+
116
+ ## Function Names Got Simpler Too
117
+
118
+ When the module name provides context, function names can be simpler:
119
+
120
+ ```python
121
+ # connectonion/address.py
122
+
123
+ def generate() -> dict:
124
+ """Generate new agent address."""
125
+
126
+ def recover(seed_phrase: str) -> dict:
127
+ """Recover address from seed phrase."""
128
+
129
+ def save(address_data: dict, path: Path):
130
+ """Save address keys."""
131
+
132
+ def load(path: Path) -> dict:
133
+ """Load address keys."""
134
+
135
+ def verify(address: str, message: bytes, signature: bytes) -> bool:
136
+ """Verify signature from address."""
137
+ ```
138
+
139
+ No need to repeat "address" in every function - the module name makes it clear.
140
+
141
+ ## The Lesson: Use Familiar Words
142
+
143
+ We developers love to invent new terminology. It makes us feel smart. But users don't care about our clever naming - they just want things to make sense.
144
+
145
+ Consider these transformations:
146
+ - "Cryptographic identity" → "Address"
147
+ - "Mnemonic seed phrase" → "Recovery phrase"
148
+ - "Ed25519 public key" → "Agent address"
149
+ - "Signing key" → "Private key"
150
+
151
+ The right side is always clearer.
152
+
153
+ ## A Real Conversation
154
+
155
+ This actual conversation happened during code review:
156
+
157
+ "What should we call the thing that identifies an agent?"
158
+ "What does it do?"
159
+ "Other agents use it to send messages to this agent."
160
+ "So... an address?"
161
+ "Oh. Yeah. An address."
162
+
163
+ Sometimes the obvious answer is the right answer.
164
+
165
+ ## The Bigger Pattern
166
+
167
+ This decision reflects a broader pattern in ConnectOnion:
168
+
169
+ 1. **Use existing mental models** - Don't make users learn new concepts
170
+ 2. **Prefer concrete over abstract** - "Address" not "Identity"
171
+ 3. **Choose familiar over precise** - "Recovery phrase" not "BIP39 mnemonic"
172
+ 4. **Name from the user's perspective** - Not from the implementation
173
+
174
+ ## The Implementation
175
+
176
+ Here's what we ended up with:
177
+
178
+ ```python
179
+ from connectonion import address
180
+
181
+ # Generate new agent (simple!)
182
+ my_address = address.generate()
183
+ print(f"Agent address: {my_address['address']}")
184
+
185
+ # Save it (obvious!)
186
+ address.save(my_address, Path(".co"))
187
+
188
+ # Load it later (clear!)
189
+ my_address = address.load(Path(".co"))
190
+ ```
191
+
192
+ No confusion. No abstraction. Just addresses.
193
+
194
+ ## Counter-Examples: When We Got It Wrong
195
+
196
+ We're not perfect. Here are times we chose poorly:
197
+
198
+ **Bad:** `llm_do()` - What does "do" mean?
199
+ **Better:** `llm_function()` or `llm_tool()`
200
+
201
+ **Bad:** `co init` - Init what?
202
+ **Better:** Could have been `co create` or `co new`
203
+
204
+ We keep these as reminders that naming is hard, and we don't always get it right the first time.
205
+
206
+ ## The Test: Explain It To Someone
207
+
208
+ The ultimate test for naming: explain it to someone unfamiliar with your project.
209
+
210
+ "Your agent has an address. Other agents use it to send messages."
211
+
212
+ vs
213
+
214
+ "Your agent has a cryptographic identity derived from an Ed25519 keypair that serves as a unique identifier in the network protocol."
215
+
216
+ Which would you rather hear?
217
+
218
+ ## Conclusion
219
+
220
+ Good naming isn't about being clever or technically precise. It's about being clear. When in doubt, choose the boring, familiar word that everyone already understands.
221
+
222
+ That's why every ConnectOnion agent has an address, not an identity. It's why you have a recovery phrase, not a mnemonic seed. It's why you run `co init`, not `co scaffold-project-structure`.
223
+
224
+ Keep it simple. Use words people know. Save the cleverness for the implementation, not the interface.
225
+
226
+ ---
227
+
228
+ *P.S. We spent 30 minutes debating "address" vs "identity". Those 30 minutes were worth it. Good naming pays dividends forever.*
@@ -0,0 +1,167 @@
1
+ # Why We Chose `connect()` for Remote Agents
2
+
3
+ *The journey to finding the right interface for connecting to remote agents*
4
+
5
+ ## The Problem
6
+
7
+ When developers want to use a remote AI agent, they need a simple, intuitive way to establish that connection. The challenge was finding the right verb that:
8
+ - Clearly indicates remote interaction
9
+ - Returns an object to interact with
10
+ - Feels familiar to developers
11
+ - Distinguishes from local agent creation
12
+
13
+ ## What We Considered
14
+
15
+ ### Option 1: `RemoteAgent()` Class
16
+ ```python
17
+ translator = RemoteAgent("0x3d40...")
18
+ ```
19
+ ✅ Crystal clear it's remote
20
+ ❌ Verbose (11 extra characters)
21
+ ❌ Exposes implementation details
22
+
23
+ ### Option 2: `client()` Function
24
+ ```python
25
+ translator = client("0x3d40...")
26
+ ```
27
+ ✅ Follows database patterns (MongoClient, RedisClient)
28
+ ❌ It's a noun, not a verb - feels awkward
29
+ ❌ Implies client/server architecture
30
+
31
+ ### Option 3: `get()` Function
32
+ ```python
33
+ translator = get("0x3d40...")
34
+ ```
35
+ ✅ Shortest (3 characters)
36
+ ✅ Familiar from REST APIs
37
+ ❌ Too generic - get what exactly?
38
+
39
+ ### Option 4: `use()` Function
40
+ ```python
41
+ translator = use("0x3d40...")
42
+ ```
43
+ ✅ Natural language
44
+ ✅ Very short
45
+ ❌ Too vague about what's happening
46
+
47
+ ### Option 5: `reach()` Function
48
+ ```python
49
+ translator = reach("0x3d40...")
50
+ ```
51
+ ✅ Implies remote interaction
52
+ ✅ Natural English
53
+ ❌ Unfamiliar pattern in programming
54
+
55
+ ## Why `connect()` Won
56
+
57
+ ```python
58
+ from connectonion import connect
59
+
60
+ translator = connect("0x3d40...")
61
+ result = translator.input("Translate hello")
62
+ ```
63
+
64
+ ### 1. Familiar Pattern
65
+ Developers already use `connect()` everywhere:
66
+ ```python
67
+ # Databases
68
+ db = psycopg2.connect("postgresql://...")
69
+ redis = redis.connect("redis://...")
70
+
71
+ # Our pattern
72
+ agent = connect("0x3d40...")
73
+ ```
74
+
75
+ ### 2. Clear Semantics
76
+ The word "connect" immediately tells developers:
77
+ - This is a network operation
78
+ - You're establishing a connection to something remote
79
+ - It returns something you can interact with
80
+
81
+ ### 3. No Confusion with Local Agents
82
+ ```python
83
+ # Creating local agent - uses class
84
+ my_agent = Agent("translator", tools=[...])
85
+
86
+ # Connecting to remote - uses function
87
+ their_agent = connect("0x3d40...")
88
+ ```
89
+
90
+ Clear distinction: `Agent` class for creation, `connect` function for remote access.
91
+
92
+ ### 4. Verb Returns Noun
93
+ `connect()` is a verb that returns a connection object - this is a natural pattern:
94
+ - The action (connect) returns the result (connected agent interface)
95
+ - You connect and get back something to use
96
+ - No ambiguity about what you're getting
97
+
98
+ ### 5. Handles Everything Automatically
99
+ When you call `connect()`, the framework:
100
+ 1. Connects to relay at `wss://oo.openonion.ai`
101
+ 2. Queries agent information
102
+ 3. Attempts direct TCP connection
103
+ 4. Falls back to relay if needed
104
+ 5. Returns ready-to-use interface
105
+
106
+ The developer doesn't see this complexity - they just get a working agent.
107
+
108
+ ## The Developer Experience
109
+
110
+ ### Simple and Natural
111
+ ```python
112
+ # The thought process
113
+ "I need to use that translator agent"
114
+ "I'll connect to it"
115
+ "Now I can use it"
116
+
117
+ # The code matches the thought
118
+ translator = connect("0x3d40...")
119
+ result = translator.input("Translate this")
120
+ ```
121
+
122
+ ### Extensible
123
+ ```python
124
+ # Basic usage
125
+ agent = connect("0x3d40...")
126
+
127
+ # Future extensions feel natural
128
+ agent = connect(find="translator")
129
+ agent = connect(need="something that translates")
130
+ ```
131
+
132
+ ### Clear Error Messages
133
+ ```python
134
+ # If connection fails
135
+ "Failed to connect to agent at 0x3d40..."
136
+ # Immediately understandable
137
+ ```
138
+
139
+ ## What `connect()` Returns
140
+
141
+ The `connect()` function returns a limited interface - not the full agent:
142
+
143
+ ```python
144
+ class ConnectedAgent:
145
+ def input(self, prompt: str) -> str:
146
+ """Send input to remote agent"""
147
+
148
+ @property
149
+ def address(self) -> str:
150
+ """The agent's address"""
151
+
152
+ def is_online(self) -> bool:
153
+ """Check if agent is reachable"""
154
+ ```
155
+
156
+ This makes it clear you're working with a remote interface, not the agent itself.
157
+
158
+ ## Conclusion
159
+
160
+ `connect()` strikes the perfect balance:
161
+ - **Familiar**: Developers know this pattern from databases
162
+ - **Clear**: Obviously a network operation
163
+ - **Simple**: Just 7 characters
164
+ - **Accurate**: You're connecting to get an interface
165
+ - **Extensible**: Can grow with the framework
166
+
167
+ The choice of `connect()` makes ConnectOnion feel instantly familiar while accurately representing what's happening under the hood.
@@ -0,0 +1,176 @@
1
+ # Why We Choose Progressive Disclosure Over Configuration Questionnaires
2
+
3
+ *Date: 2025-09-04*
4
+
5
+ ## The Problem with Traditional CLI Tools
6
+
7
+ Most framework CLIs suffer from what we call "initialization fatigue" - they bombard users with questions that don't matter yet:
8
+ - What's your project description? (I don't know, I just started)
9
+ - Choose your testing framework? (Let me build something first)
10
+ - Configure your linter settings? (Please, just let me code)
11
+ - Set up CI/CD pipeline? (It's my first 5 seconds with this tool)
12
+
13
+ This approach assumes users know everything upfront. Reality: they don't, and they shouldn't have to.
14
+
15
+ ## Our Philosophy: Progressive Disclosure
16
+
17
+ ### Core Principle: Start Fast, Decide Later
18
+
19
+ We designed ConnectOnion's CLI around three principles:
20
+ 1. **Get to working code in < 30 seconds**
21
+ 2. **Make smart defaults, not lengthy questionnaires**
22
+ 3. **Respect the user's time and intelligence**
23
+
24
+ ### The Two-Command Strategy: Why Both `create` and `init`
25
+
26
+ We deliberately offer two commands instead of forcing one workflow:
27
+
28
+ ```bash
29
+ co create my-agent # Creates new directory
30
+ co init # Uses current directory
31
+ ```
32
+
33
+ **Why?** Because context matters:
34
+ - **Outside a project**: Users want `co create my-agent` - it's natural to create a new space
35
+ - **Inside a project**: Users want `co init` - they've already decided where to work
36
+
37
+ This isn't redundancy; it's respecting user intent. Django does this (`django-admin startproject` vs `manage.py startapp`), Rails does this (`rails new` vs `rails generate`), and for good reason.
38
+
39
+ ### Minimal Questions, Maximum Intelligence
40
+
41
+ Our setup flow asks only what matters RIGHT NOW:
42
+ 1. **Enable AI?** - Determines available templates
43
+ 2. **API key** - Only if AI enabled, with auto-detection
44
+ 3. **Template** - With previews so users know what they get
45
+
46
+ That's it. Three decisions max.
47
+
48
+ Compare to typical CLIs:
49
+ - Create-react-app: 5+ questions
50
+ - Vue CLI: 10+ questions
51
+ - Yeoman generators: Often 15+ questions
52
+
53
+ ### Smart API Key Detection
54
+
55
+ Instead of asking "Which provider are you using?", we detect it:
56
+
57
+ ```python
58
+ if api_key.startswith('sk-proj-'):
59
+ # OpenAI project key
60
+ elif api_key.startswith('sk-ant-'):
61
+ # Anthropic
62
+ elif api_key.startswith('gsk_'):
63
+ # Groq
64
+ ```
65
+
66
+ **Why?** The key format already tells us. Why make users answer what we can infer?
67
+
68
+ This extends to environment variables too. If `OPENAI_API_KEY` is set, we use it. No questions asked.
69
+
70
+ ### Template Preview, Not Template Guessing
71
+
72
+ Instead of cryptic template names, we show exactly what users get:
73
+
74
+ ```
75
+ 📦 Minimal - Simple starting point
76
+ ├── agent.py (50 lines) - Basic agent with example tool
77
+ ├── .env - API key configuration
78
+ └── .co/ - Agent identity & metadata
79
+ ```
80
+
81
+ **Why?** Users shouldn't have to guess. Show them, let them choose, move on.
82
+
83
+ ### Silent Excellence: Auto-Generated Agent Keys
84
+
85
+ We generate cryptographic keys for agents automatically. No prompt, no explanation, just done.
86
+
87
+ ```python
88
+ # This happens silently during init
89
+ addr_data = address.generate()
90
+ address.save(addr_data, co_dir)
91
+ ```
92
+
93
+ **Why?** 99% of users don't care about Ed25519 vs secp256k1. The 1% who do can read the docs.
94
+
95
+ ## The "No BS" Commitment
96
+
97
+ ### What We Don't Ask
98
+ - Project description (write code first, document later)
99
+ - Author name (use git config if needed)
100
+ - License type (add it when you're ready to share)
101
+ - Version number (it's 0.0.1, always)
102
+ - Test framework (we include examples, you choose)
103
+ - Package manager (pip is fine)
104
+
105
+ ### What We Do Instead
106
+ - Create working code immediately
107
+ - Use sensible defaults everywhere
108
+ - Show clear next steps
109
+ - Get out of the way
110
+
111
+ ### Beautiful by Default
112
+
113
+ We use colors, emojis, and formatting not for decoration, but for clarity:
114
+ - ✅ Green = Success
115
+ - ⚠️ Yellow = Warning
116
+ - ❌ Red = Error
117
+ - 📁 Icons = Visual scanning
118
+
119
+ But we also respect terminal preferences:
120
+ - Works in non-color terminals
121
+ - Copy-paste friendly output
122
+ - No ASCII art or unnecessary flair
123
+
124
+ ## Results: User Delight, Not User Fatigue
125
+
126
+ Our approach means:
127
+ - **30 seconds** from install to running agent
128
+ - **3 questions** maximum during setup
129
+ - **0 required** configuration files to edit
130
+ - **1 command** to start coding
131
+
132
+ Users consistently report that our CLI "just works" and "doesn't get in the way."
133
+
134
+ ## Technical Implementation Notes
135
+
136
+ ### Progressive Enhancement Pattern
137
+ ```python
138
+ # Start with minimum viable
139
+ if not yes:
140
+ ai = click.confirm("Enable AI features?", default=True)
141
+
142
+ # Enhance if enabled
143
+ if ai:
144
+ templates.append('custom')
145
+
146
+ # But don't block progress
147
+ if not api_key:
148
+ # Still create project, just remind them later
149
+ ```
150
+
151
+ ### Fail Gracefully, Suggest Clearly
152
+ ```python
153
+ if project_dir.exists():
154
+ click.echo(f"❌ Directory '{name}' already exists!")
155
+ click.echo(f"💡 Suggestions:")
156
+ click.echo(f" • Use different name: co create {name}-v2")
157
+ click.echo(f" • Remove existing: rm -rf {name}")
158
+ click.echo(f" • Initialize existing: cd {name} && co init")
159
+ ```
160
+
161
+ ### Environment Intelligence
162
+ ```python
163
+ # Check environment first, ask second
164
+ env_result = check_environment_for_api_keys()
165
+ if env_result:
166
+ click.echo(f"✓ Found {provider} API key in environment")
167
+ # Use it unless user objects
168
+ ```
169
+
170
+ ## Conclusion
171
+
172
+ Good CLI UX isn't about asking fewer questions - it's about asking the RIGHT questions at the RIGHT time. Everything else should be invisible, automatic, or optional.
173
+
174
+ Our CLI embodies this philosophy: Start fast, enhance progressively, respect user intelligence.
175
+
176
+ The best tool is one you forget you're using. That's what we built.