kon-coding-agent 0.4.0__tar.gz → 0.4.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/.agents/skills/kon-tmux-test/SKILL.md +5 -5
  2. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/.agents/skills/kon-tmux-test/run-e2e-tests.sh +8 -8
  3. kon_coding_agent-0.4.1/.claude/settings.local.json +36 -0
  4. kon_coding_agent-0.4.1/.github/workflows/publish.yml +39 -0
  5. kon_coding_agent-0.4.1/.github/workflows/test.yml +40 -0
  6. kon_coding_agent-0.4.1/.pre-commit-config.yaml +7 -0
  7. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/AGENTS.md +1 -1
  8. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/CHANGELOG.md +35 -0
  9. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/PKG-INFO +29 -12
  10. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/README.md +27 -11
  11. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/docs/e2e-test-coverage-review.md +6 -6
  12. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/docs/local-models.md +6 -0
  13. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/pyproject.toml +2 -1
  14. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/cli.py +1 -1
  15. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/context/skills.py +52 -10
  16. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/core/__init__.py +2 -0
  17. kon_coding_agent-0.4.1/src/kon/core/errors.py +17 -0
  18. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/events.py +1 -0
  19. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/anthropic.py +6 -2
  20. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/mock.py +19 -0
  21. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/openai_completions.py +6 -2
  22. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/openai_responses.py +6 -2
  23. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/loop.py +6 -3
  24. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/notify.py +13 -0
  25. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/bash.py +35 -10
  26. kon_coding_agent-0.4.1/src/kon/turn.py +768 -0
  27. kon_coding_agent-0.4.1/src/kon/ui/agent_runner.py +417 -0
  28. kon_coding_agent-0.4.1/src/kon/ui/app.py +658 -0
  29. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/blocks.py +49 -16
  30. kon_coding_agent-0.4.1/src/kon/ui/commands/__init__.py +100 -0
  31. kon_coding_agent-0.4.1/src/kon/ui/commands/auth.py +149 -0
  32. kon_coding_agent-0.4.1/src/kon/ui/commands/base.py +121 -0
  33. kon_coding_agent-0.4.1/src/kon/ui/commands/models.py +50 -0
  34. kon_coding_agent-0.4.1/src/kon/ui/commands/sessions.py +390 -0
  35. kon_coding_agent-0.4.1/src/kon/ui/commands/settings.py +286 -0
  36. kon_coding_agent-0.4.1/src/kon/ui/completion_ui.py +310 -0
  37. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/export.py +10 -0
  38. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/formatting.py +40 -2
  39. kon_coding_agent-0.4.1/src/kon/ui/launch.py +102 -0
  40. kon_coding_agent-0.4.1/src/kon/ui/queue_ui.py +141 -0
  41. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/session_ui.py +10 -0
  42. kon_coding_agent-0.4.1/src/kon/ui/startup.py +116 -0
  43. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/widgets.py +5 -2
  44. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/version.py +1 -1
  45. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/context/test_skills.py +157 -3
  46. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_agentic_loop.py +25 -1
  47. kon_coding_agent-0.4.1/tests/test_errors.py +17 -0
  48. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_notify.py +15 -1
  49. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_tools_manager.py +1 -0
  50. kon_coding_agent-0.4.1/tests/tools/test_bash_shell.py +92 -0
  51. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_bash_truncation.py +1 -0
  52. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_read.py +3 -0
  53. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_subprocess_cancellation.py +1 -0
  54. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_completion_chrome.py +5 -0
  55. kon_coding_agent-0.4.1/tests/ui/test_export.py +101 -0
  56. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_login_command.py +1 -1
  57. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_shell_command_detection.py +35 -0
  58. kon_coding_agent-0.4.1/tests/ui/test_streaming_blocks.py +198 -0
  59. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/uv.lock +3 -1
  60. kon_coding_agent-0.4.0/.github/workflows/test.yml +0 -33
  61. kon_coding_agent-0.4.0/src/kon/turn.py +0 -630
  62. kon_coding_agent-0.4.0/src/kon/ui/app.py +0 -1511
  63. kon_coding_agent-0.4.0/src/kon/ui/commands.py +0 -1014
  64. kon_coding_agent-0.4.0/tests/ui/test_streaming_blocks.py +0 -69
  65. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/.agents/skills/kon-release-publish/SKILL.md +0 -0
  66. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/.agents/skills/kon-tmux-test/setup-test-project.sh +0 -0
  67. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/.gitignore +0 -0
  68. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/.python-version +0 -0
  69. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/LICENSE +0 -0
  70. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/docs/images/kon-screenshot.png +0 -0
  71. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/scripts/show_themes.py +0 -0
  72. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/__init__.py +0 -0
  73. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/async_utils.py +0 -0
  74. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/builtin_skills/init/SKILL.md +0 -0
  75. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/builtin_skills/review/SKILL.md +0 -0
  76. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/config.py +0 -0
  77. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/context/__init__.py +0 -0
  78. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/context/_xml.py +0 -0
  79. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/context/agent_mds.py +0 -0
  80. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/context/git.py +0 -0
  81. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/context/loader.py +0 -0
  82. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/core/compaction.py +0 -0
  83. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/core/handoff.py +0 -0
  84. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/core/types.py +0 -0
  85. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/defaults/__init__.py +0 -0
  86. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/defaults/config.toml +0 -0
  87. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/diff_display.py +0 -0
  88. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/gh_cli.py +0 -0
  89. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/git_branch.py +0 -0
  90. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/headless.py +0 -0
  91. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/__init__.py +0 -0
  92. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/base.py +0 -0
  93. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/models.py +0 -0
  94. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/oauth/__init__.py +0 -0
  95. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/oauth/copilot.py +0 -0
  96. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/oauth/openai.py +0 -0
  97. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/__init__.py +0 -0
  98. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/anthropic_capabilities.py +0 -0
  99. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/azure_ai_foundry.py +0 -0
  100. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/copilot.py +0 -0
  101. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/copilot_anthropic.py +0 -0
  102. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/github_copilot_headers.py +0 -0
  103. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/openai_codex_responses.py +0 -0
  104. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/openai_compat.py +0 -0
  105. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/sanitize.py +0 -0
  106. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/permissions.py +0 -0
  107. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/py.typed +0 -0
  108. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/runtime.py +0 -0
  109. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/session.py +0 -0
  110. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/sounds/completion.wav +0 -0
  111. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/sounds/error.wav +0 -0
  112. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/sounds/permission.wav +0 -0
  113. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/themes.py +0 -0
  114. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/__init__.py +0 -0
  115. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/_read_image.py +0 -0
  116. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/_tool_utils.py +0 -0
  117. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/base.py +0 -0
  118. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/edit.py +0 -0
  119. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/find.py +0 -0
  120. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/grep.py +0 -0
  121. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/read.py +0 -0
  122. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/web_fetch.py +0 -0
  123. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/web_search.py +0 -0
  124. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/write.py +0 -0
  125. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools_manager.py +0 -0
  126. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/__init__.py +0 -0
  127. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/app_protocol.py +0 -0
  128. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/autocomplete.py +0 -0
  129. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/chat.py +0 -0
  130. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/clipboard.py +0 -0
  131. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/floating_list.py +0 -0
  132. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/input.py +0 -0
  133. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/latex.py +0 -0
  134. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/path_complete.py +0 -0
  135. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/prompt_history.py +0 -0
  136. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/selection_mode.py +0 -0
  137. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/styles.py +0 -0
  138. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/tool_output.py +0 -0
  139. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/tree.py +0 -0
  140. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/welcome.py +0 -0
  141. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/update_check.py +0 -0
  142. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/conftest.py +0 -0
  143. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/context/test_agents.py +0 -0
  144. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/__init__.py +0 -0
  145. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/test_anthropic_provider.py +0 -0
  146. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/test_azure_ai_foundry_provider.py +0 -0
  147. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/test_mock_provider.py +0 -0
  148. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/test_openai_codex_provider_errors.py +0 -0
  149. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/test_openai_oauth.py +0 -0
  150. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/test_tls_verify.py +0 -0
  151. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_cli.py +0 -0
  152. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_cli_auth_flags.py +0 -0
  153. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_cli_provider_resolution.py +0 -0
  154. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_compaction.py +0 -0
  155. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_config_binaries.py +0 -0
  156. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_config_error_fallback.py +0 -0
  157. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_config_injection.py +0 -0
  158. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_config_migration.py +0 -0
  159. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_git_branch.py +0 -0
  160. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_handoff.py +0 -0
  161. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_handoff_link_interrupt.py +0 -0
  162. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_headless.py +0 -0
  163. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_launch_warnings.py +0 -0
  164. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_llm_lazy_imports.py +0 -0
  165. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_local_auth_config.py +0 -0
  166. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_model_provider_resolution.py +0 -0
  167. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_notifications_config.py +0 -0
  168. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_openai_compat.py +0 -0
  169. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_permissions.py +0 -0
  170. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_runtime_switch_model.py +0 -0
  171. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_session_persistence.py +0 -0
  172. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_session_queries.py +0 -0
  173. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_session_resume.py +0 -0
  174. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_session_tree.py +0 -0
  175. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_system_prompt.py +0 -0
  176. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_system_prompt_git_context.py +0 -0
  177. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_themes.py +0 -0
  178. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_ui_notifications.py +0 -0
  179. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_update_check.py +0 -0
  180. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_update_notice_behavior.py +0 -0
  181. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_diff.py +0 -0
  182. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_edit.py +0 -0
  183. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_edit_display.py +0 -0
  184. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_read_image.py +0 -0
  185. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_read_image_integration.py +0 -0
  186. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_read_image_resize.py +0 -0
  187. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_web_fetch.py +0 -0
  188. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_write.py +0 -0
  189. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_app_approval_keys.py +0 -0
  190. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_autocomplete.py +0 -0
  191. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_floating_list.py +0 -0
  192. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_info_bar_clicks.py +0 -0
  193. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_info_bar_permissions.py +0 -0
  194. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_input_approval_submit.py +0 -0
  195. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_input_cursor_theme.py +0 -0
  196. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_input_handoff.py +0 -0
  197. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_input_paste.py +0 -0
  198. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_input_shell_style.py +0 -0
  199. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_keybindings.py +0 -0
  200. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_latex.py +0 -0
  201. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_permission_selection_status.py +0 -0
  202. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_permissions_command.py +0 -0
  203. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_prompt_history.py +0 -0
  204. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_queue_editing.py +0 -0
  205. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_status_line.py +0 -0
  206. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_styles.py +0 -0
  207. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_thinking_notifications_commands.py +0 -0
  208. {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_tool_output_expansion.py +0 -0
@@ -29,14 +29,14 @@ Kon is a TUI (Textual-based) app. Running tests programmatically is hard. Tmux p
29
29
 
30
30
  ```bash
31
31
  # Run all e2e tests from the repo root
32
- bash .kon/skills/kon-tmux-test/run-e2e-tests.sh
32
+ bash .agents/skills/kon-tmux-test/run-e2e-tests.sh
33
33
 
34
34
  # Optional: keep the temporary HOME for debugging
35
- KEEP_E2E_HOME=1 bash .kon/skills/kon-tmux-test/run-e2e-tests.sh
35
+ KEEP_E2E_HOME=1 bash .agents/skills/kon-tmux-test/run-e2e-tests.sh
36
36
 
37
37
  # Optional: override launch command/provider/model
38
38
  KON_CMD='uv run kon --model gpt-5.5' \
39
- bash .kon/skills/kon-tmux-test/run-e2e-tests.sh
39
+ bash .agents/skills/kon-tmux-test/run-e2e-tests.sh
40
40
  ```
41
41
 
42
42
  After running, read `/tmp/kon-test-*.txt` and evaluate the captured pane/config/filesystem outputs.
@@ -48,7 +48,7 @@ After running, read `/tmp/kon-test-*.txt` and evaluate the captured pane/config/
48
48
  Creates a deterministic test project structure at `/tmp/kon-test-project/`.
49
49
 
50
50
  ```bash
51
- bash .kon/skills/kon-tmux-test/setup-test-project.sh
51
+ bash .agents/skills/kon-tmux-test/setup-test-project.sh
52
52
  ```
53
53
 
54
54
  ### Main Test Script: `run-e2e-tests.sh`
@@ -56,7 +56,7 @@ bash .kon/skills/kon-tmux-test/setup-test-project.sh
56
56
  Runs comprehensive e2e tests including UI triggers, runtime controls, tab completion, and tool execution.
57
57
 
58
58
  ```bash
59
- bash .kon/skills/kon-tmux-test/run-e2e-tests.sh
59
+ bash .agents/skills/kon-tmux-test/run-e2e-tests.sh
60
60
  ```
61
61
 
62
62
  ## Test Categories
@@ -29,8 +29,8 @@ capture() {
29
29
  }
30
30
 
31
31
  capture_config() {
32
- if [ -f "$TEST_HOME/.kon/config.toml" ]; then
33
- cp "$TEST_HOME/.kon/config.toml" "$1"
32
+ if [ -f "$TEST_HOME/.config/kon/config.toml" ]; then
33
+ cp "$TEST_HOME/.config/kon/config.toml" "$1"
34
34
  else
35
35
  echo "CONFIG_NOT_FOUND" > "$1"
36
36
  fi
@@ -74,12 +74,12 @@ trap cleanup EXIT
74
74
  echo "Setting up isolated e2e environment..."
75
75
  cleanup
76
76
  rm -rf "$TEST_DIR" "$TEST_HOME"
77
- mkdir -p "$TEST_DIR" "$TEST_HOME/.kon"
78
- if [ -f "$HOME/.kon/openai_auth.json" ]; then
79
- cp "$HOME/.kon/openai_auth.json" "$TEST_HOME/.kon/openai_auth.json"
77
+ mkdir -p "$TEST_DIR" "$TEST_HOME/.config/kon"
78
+ if [ -f "$HOME/.config/kon/openai_auth.json" ]; then
79
+ cp "$HOME/.config/kon/openai_auth.json" "$TEST_HOME/.config/kon/openai_auth.json"
80
80
  fi
81
- if [ -f "$HOME/.kon/copilot_auth.json" ]; then
82
- cp "$HOME/.kon/copilot_auth.json" "$TEST_HOME/.kon/copilot_auth.json"
81
+ if [ -f "$HOME/.config/kon/copilot_auth.json" ]; then
82
+ cp "$HOME/.config/kon/copilot_auth.json" "$TEST_HOME/.config/kon/copilot_auth.json"
83
83
  fi
84
84
  cd "$TEST_DIR" || exit 1
85
85
  printf '# Test Project\n' > README.md
@@ -288,7 +288,7 @@ clear_input
288
288
  # =============================================================================
289
289
  echo "Capturing file system and persisted state..."
290
290
  ls -la "$TEST_DIR" > /tmp/kon-test-files.txt 2>/dev/null
291
- find "$TEST_HOME/.kon/sessions" -type f -name '*.jsonl' -print > /tmp/kon-test-session-files.txt 2>/dev/null || true
291
+ find "$TEST_HOME/.config/kon/sessions" -type f -name '*.jsonl' -print > /tmp/kon-test-session-files.txt 2>/dev/null || true
292
292
  capture_config /tmp/kon-test-final-config.txt
293
293
 
294
294
  # Retry a few times in case the LLM is still finishing file writes
@@ -0,0 +1,36 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(uv run *)",
5
+ "Bash(gh api *)",
6
+ "Bash(echo \"exit=$?\")",
7
+ "Bash(git -C /Users/utsav/Workspaces/kon status --short)",
8
+ "Bash(git -C /Users/utsav/Workspaces/kon diff --stat)",
9
+ "Bash(git add *)",
10
+ "Bash(git commit -m ' *)",
11
+ "Bash(git push *)",
12
+ "Bash(gh run *)",
13
+ "Bash(python3 -c ' *)",
14
+ "Bash(awk -F: '{print $1\": \"$3}')",
15
+ "Bash(awk -F: '{print $3}')",
16
+ "Bash(awk -F: '{print $1, $2}')",
17
+ "Bash(git -C /Users/utsav/Workspaces/kon log --oneline origin/main..HEAD)",
18
+ "Bash(git -C /Users/utsav/Workspaces/kon log --oneline -10)",
19
+ "Bash(git -C /Users/utsav/Workspaces/kon show f987ebf --stat=220)",
20
+ "Bash(git -C /Users/utsav/Workspaces/kon show f987ebf -- src/kon/turn.py)",
21
+ "Bash(git -C /Users/utsav/Workspaces/kon show fa6b029 --stat)",
22
+ "Bash(git -C /Users/utsav/Workspaces/kon show fa6b029)",
23
+ "Bash(git -C /Users/utsav/Workspaces/kon show f987ebf~1:src/kon/turn.py)",
24
+ "Bash(awk '/^async def run_single_turn/,0')",
25
+ "Bash(awk '{print length\\($0\\)/4}')",
26
+ "Bash(git -C /Users/utsav/Workspaces/kon show f987ebf -- tests/)",
27
+ "Bash(git -C /Users/utsav/Workspaces/kon show 31815a4 --stat)",
28
+ "Bash(git -C /Users/utsav/Workspaces/kon show 705fb8f --stat)",
29
+ "Bash(git -C /Users/utsav/Workspaces/kon diff --stat src/kon/ui/app.py)",
30
+ "Bash(gh issue *)",
31
+ "Bash(git *)",
32
+ "Bash(sed -n 250-270p /Users/utsav/Workspaces/kon/src/kon/llm/providers/openai_completions.py)",
33
+ "Bash(sed -n 200-220p /Users/utsav/Workspaces/kon/src/kon/llm/providers/anthropic.py)"
34
+ ]
35
+ }
36
+ }
@@ -0,0 +1,39 @@
1
+ name: Publish
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ build:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v6
15
+ - name: Install uv
16
+ uses: astral-sh/setup-uv@v8.2.0
17
+ with:
18
+ python-version: "3.13"
19
+ - name: Build sdist and wheel
20
+ run: uv build
21
+ - uses: actions/upload-artifact@v7
22
+ with:
23
+ name: dist
24
+ path: dist/
25
+
26
+ publish:
27
+ needs: build
28
+ runs-on: ubuntu-latest
29
+ environment: pypi
30
+ permissions:
31
+ # Required for PyPI trusted publishing (OIDC).
32
+ id-token: write
33
+ steps:
34
+ - uses: actions/download-artifact@v8
35
+ with:
36
+ name: dist
37
+ path: dist/
38
+ - name: Publish to PyPI
39
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,40 @@
1
+ name: Test
2
+
3
+ on: [push, pull_request]
4
+
5
+ permissions:
6
+ contents: read
7
+
8
+ jobs:
9
+ lint:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v6
13
+ - name: Install uv
14
+ uses: astral-sh/setup-uv@v8.2.0
15
+ with:
16
+ python-version: "3.13"
17
+ - name: Install dependencies
18
+ run: uv sync --group dev
19
+ - name: Ruff format
20
+ run: uv run ruff format --check .
21
+ - name: Ruff check
22
+ run: uv run ruff check .
23
+ - name: Pyright
24
+ run: uv run python -m pyright .
25
+
26
+ test:
27
+ runs-on: ubuntu-latest
28
+ strategy:
29
+ matrix:
30
+ python-version: ["3.12", "3.13", "3.14"]
31
+ steps:
32
+ - uses: actions/checkout@v6
33
+ - name: Install uv
34
+ uses: astral-sh/setup-uv@v8.2.0
35
+ with:
36
+ python-version: ${{ matrix.python-version }}
37
+ - name: Install dependencies
38
+ run: uv sync --group dev
39
+ - name: Run tests
40
+ run: uv run python -m pytest -s
@@ -0,0 +1,7 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.15.16
4
+ hooks:
5
+ - id: ruff-check
6
+ args: [--fix]
7
+ - id: ruff-format
@@ -17,7 +17,7 @@
17
17
 
18
18
  ## Committing code
19
19
 
20
- - If the user tells you to commit code, look at all the changes and create multile commits if needed bsaed on logical groupings
20
+ - If the user tells you to commit code, look at all the changes and create multiple commits if needed based on logical groupings
21
21
  - Follow commit message conventions: `docs:`, `feat:`, `fix:`, `build:`, etc. for the commit prefix
22
22
 
23
23
  ## Pushing
@@ -6,6 +6,41 @@ All notable changes to this project will be documented in this file.
6
6
 
7
7
  - No changes yet.
8
8
 
9
+ ## 0.4.1 - 2026-06-13
10
+
11
+ ### Added
12
+
13
+ - Added Windows audio notification support without volume control - @clach04.
14
+ - Added slash-only skills support.
15
+ - Added skill-relative path resolution against each skill directory.
16
+
17
+ ### Changed
18
+
19
+ - Split UI monoliths and restructured the turn streaming loop.
20
+ - Improved markdown streaming performance with cached rendered blocks.
21
+ - Kept blocking I/O off the UI event loop.
22
+ - Updated CI, PyPI publishing, and pre-commit workflows.
23
+
24
+ ### Fixed
25
+
26
+ - Skipped mkfifo-dependent tests on Windows - @clach04.
27
+ - Fixed slash-command args for skills without `$ARGUMENTS` placeholders.
28
+ - Updated e2e auth/config/session paths to `~/.config/kon`.
29
+ - Persisted manual shell commands for export and resume.
30
+ - Improved Windows Git Bash path handling.
31
+ - Fixed manually triggered custom skill body expansion.
32
+ - Skipped tool calls with stream-stalled truncated arguments.
33
+ - Preserved error context and retried transient network failures.
34
+ - Fixed skill frontmatter inline comment parsing.
35
+ - Buffered partial streaming markdown lines.
36
+
37
+ ### Docs / Tests
38
+
39
+ - Aligned web tools docs with default config.
40
+ - Updated stale `.kon/skills` references to `.agents/skills`.
41
+ - Added testing guide, local model guidance, and permission clarifications.
42
+ - Improved Windows path and notification test coverage.
43
+
9
44
  ## 0.4.0 - 2026-05-31
10
45
 
11
46
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kon-coding-agent
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: Minimal coding agent
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -10,6 +10,7 @@ Requires-Dist: anthropic>=0.79.0
10
10
  Requires-Dist: curl-cffi>=0.15.0
11
11
  Requires-Dist: ddgs>=9.0.0
12
12
  Requires-Dist: html-to-markdown<3.4.0,>=3.3.0
13
+ Requires-Dist: lxml-html-clean>=0.4.3
13
14
  Requires-Dist: openai>=2.21.0
14
15
  Requires-Dist: pillow>=12.1.1
15
16
  Requires-Dist: pydantic>=2.12.5
@@ -34,7 +35,7 @@ Description-Content-Type: text/markdown
34
35
  <img src="docs/images/kon-screenshot.png" alt="Kon terminal UI screenshot" width="700" />
35
36
  </p>
36
37
 
37
- Kon is a minimal coding agent focused on a tiny core prompt, a small built-in toolset, and project-specific context layered on top only when you want it. The default system prompt stays **under 270 tokens**, and even including the built-in tool descriptions and parameter schemas, the fixed harness stays at about **~1,000 tokens**. The core experience is built around just **6 default tools** plus **2 optional web tools**.
38
+ Kon is a minimal coding agent focused on a tiny core prompt, a small built-in toolset, and project-specific context layered on top only when you want it. The default system prompt stays **under 270 tokens**, and even including the built-in tool descriptions and parameter schemas, the fixed harness stays at about **~1,000 tokens**. The core experience is built around **6 default tools** plus **2 extra web tools** included by the shipped config.
38
39
 
39
40
  [Kon](https://bleach.fandom.com/wiki/Kon) is named after the artificial soul from *Bleach*.
40
41
 
@@ -138,7 +139,7 @@ kon -c
138
139
  # resume a specific session by id or unique prefix
139
140
  kon -r 3f2a8c1b-...
140
141
 
141
- # enable the optional web tools
142
+ # enable extra web tools for this run
142
143
  kon --extra-tools web_search,web_fetch
143
144
  ```
144
145
 
@@ -182,6 +183,19 @@ uv tool install .
182
183
  > [!WARNING]
183
184
  > Kon currently targets macOS and Linux. Windows is not tested yet.
184
185
 
186
+ ### Development and testing
187
+
188
+ Run the test suite through `uv` so the dev dependencies are active — `pytest-asyncio` comes from the dev group, and a bare `pytest` without it fails every async test:
189
+
190
+ ```bash
191
+ git clone https://github.com/kuutsav/kon
192
+ cd kon
193
+ uv sync --dev
194
+ uv run python -m pytest
195
+ ```
196
+
197
+ **Windows note:** if you see many failures like `async def functions are not natively supported`, you are running a pytest without `pytest-asyncio` — re-run with `uv run python -m pytest` as above. Remaining Windows-specific failures are worth reporting as issues.
198
+
185
199
  ---
186
200
 
187
201
  ## Why Kon
@@ -192,7 +206,7 @@ Kon tries to stay small in the places that matter most:
192
206
 
193
207
  - **System prompt under 270 tokens** by default
194
208
  - **6 core tools** for everyday coding work
195
- - **2 optional extra tools** for web lookup and content extraction
209
+ - **2 extra web tools** for web lookup and content extraction in the shipped config
196
210
  - **Project instructions are externalized** through `AGENTS.md`
197
211
  - **Heavily configurable** defaults that you can tune around model, prompt, permissions, compaction, tools, and UI
198
212
  - **Useful features are borrowed selectively** from other agents, like `/handoff` inspired by Amp
@@ -274,24 +288,24 @@ This is the core experience: small, predictable, and enough for most coding task
274
288
 
275
289
  ### Extra tools
276
290
 
277
- Kon also ships optional built-in tools you can turn on when needed:
291
+ Kon also ships extra built-in tools beyond the 6 core tools. The shipped config enables these web tools by default:
278
292
 
279
- | Tool | Purpose | How to enable |
293
+ | Tool | Purpose | Config |
280
294
  | --- | --- | --- |
281
- | `web_search` | Search the web with DuckDuckGo | `--extra-tools web_search,web_fetch` or config |
295
+ | `web_search` | Search the web with DuckDuckGo | `extra = ["web_search", "web_fetch"]` |
282
296
  | `web_fetch` | Fetch and extract clean page content | Usually paired with `web_search` |
283
297
 
284
- Enable them from the CLI:
298
+ You can also add extra tools for a single run from the CLI:
285
299
 
286
300
  ```bash
287
301
  kon --extra-tools web_search,web_fetch
288
302
  ```
289
303
 
290
- Or in `~/.config/kon/config.toml`:
304
+ To disable web tools, remove them from `~/.config/kon/config.toml`:
291
305
 
292
306
  ```toml
293
307
  [tools]
294
- extra = ["web_search", "web_fetch"]
308
+ extra = []
295
309
  ```
296
310
 
297
311
  ---
@@ -493,9 +507,12 @@ Important fields:
493
507
 
494
508
  - `name` - skill identifier
495
509
  - `description` - used for discovery and prompt context
496
- - `register_cmd` - if `true`, exposes the skill as a slash command and includes it in the `/cmd` popup for manual triggering
510
+ - `register_cmd` - if `true`, exposes the skill as a slash command and includes it in the `/cmd` popup for manual triggering; use `only` to register it as a slash command without including it in the system prompt
497
511
  - `cmd_info` - short help text for the slash menu
498
512
 
513
+ > [!NOTE]
514
+ > Installed skills do **not** appear as slash commands by default — without `register_cmd` they are only described to the model, which invokes them on its own when relevant. Add `register_cmd: true` to a skill's frontmatter to trigger it manually as `/<skill-name>`.
515
+
499
516
  Validation highlights:
500
517
 
501
518
  - lowercase letters, numbers, and `-` only
@@ -558,7 +575,7 @@ Kon supports two permission modes:
558
575
  | `prompt` | Ask before mutating tool calls |
559
576
  | `auto` | Skip approval prompts |
560
577
 
561
- In `prompt` mode, non-mutating tools are allowed automatically, and some clearly read-only shell commands are also allowed.
578
+ In `prompt` mode, non-mutating tools are allowed automatically, and some clearly read-only shell commands are also allowed. This includes web tools: `web_search` and `web_fetch` are read-only, so they run **without an approval prompt** even in `prompt` mode. If you don't want the agent reaching the network at all, remove them from the `[tools] extra` config.
562
579
 
563
580
  Use `/permissions` to switch modes for the current session and persist the change to config.
564
581
 
@@ -14,7 +14,7 @@
14
14
  <img src="docs/images/kon-screenshot.png" alt="Kon terminal UI screenshot" width="700" />
15
15
  </p>
16
16
 
17
- Kon is a minimal coding agent focused on a tiny core prompt, a small built-in toolset, and project-specific context layered on top only when you want it. The default system prompt stays **under 270 tokens**, and even including the built-in tool descriptions and parameter schemas, the fixed harness stays at about **~1,000 tokens**. The core experience is built around just **6 default tools** plus **2 optional web tools**.
17
+ Kon is a minimal coding agent focused on a tiny core prompt, a small built-in toolset, and project-specific context layered on top only when you want it. The default system prompt stays **under 270 tokens**, and even including the built-in tool descriptions and parameter schemas, the fixed harness stays at about **~1,000 tokens**. The core experience is built around **6 default tools** plus **2 extra web tools** included by the shipped config.
18
18
 
19
19
  [Kon](https://bleach.fandom.com/wiki/Kon) is named after the artificial soul from *Bleach*.
20
20
 
@@ -118,7 +118,7 @@ kon -c
118
118
  # resume a specific session by id or unique prefix
119
119
  kon -r 3f2a8c1b-...
120
120
 
121
- # enable the optional web tools
121
+ # enable extra web tools for this run
122
122
  kon --extra-tools web_search,web_fetch
123
123
  ```
124
124
 
@@ -162,6 +162,19 @@ uv tool install .
162
162
  > [!WARNING]
163
163
  > Kon currently targets macOS and Linux. Windows is not tested yet.
164
164
 
165
+ ### Development and testing
166
+
167
+ Run the test suite through `uv` so the dev dependencies are active — `pytest-asyncio` comes from the dev group, and a bare `pytest` without it fails every async test:
168
+
169
+ ```bash
170
+ git clone https://github.com/kuutsav/kon
171
+ cd kon
172
+ uv sync --dev
173
+ uv run python -m pytest
174
+ ```
175
+
176
+ **Windows note:** if you see many failures like `async def functions are not natively supported`, you are running a pytest without `pytest-asyncio` — re-run with `uv run python -m pytest` as above. Remaining Windows-specific failures are worth reporting as issues.
177
+
165
178
  ---
166
179
 
167
180
  ## Why Kon
@@ -172,7 +185,7 @@ Kon tries to stay small in the places that matter most:
172
185
 
173
186
  - **System prompt under 270 tokens** by default
174
187
  - **6 core tools** for everyday coding work
175
- - **2 optional extra tools** for web lookup and content extraction
188
+ - **2 extra web tools** for web lookup and content extraction in the shipped config
176
189
  - **Project instructions are externalized** through `AGENTS.md`
177
190
  - **Heavily configurable** defaults that you can tune around model, prompt, permissions, compaction, tools, and UI
178
191
  - **Useful features are borrowed selectively** from other agents, like `/handoff` inspired by Amp
@@ -254,24 +267,24 @@ This is the core experience: small, predictable, and enough for most coding task
254
267
 
255
268
  ### Extra tools
256
269
 
257
- Kon also ships optional built-in tools you can turn on when needed:
270
+ Kon also ships extra built-in tools beyond the 6 core tools. The shipped config enables these web tools by default:
258
271
 
259
- | Tool | Purpose | How to enable |
272
+ | Tool | Purpose | Config |
260
273
  | --- | --- | --- |
261
- | `web_search` | Search the web with DuckDuckGo | `--extra-tools web_search,web_fetch` or config |
274
+ | `web_search` | Search the web with DuckDuckGo | `extra = ["web_search", "web_fetch"]` |
262
275
  | `web_fetch` | Fetch and extract clean page content | Usually paired with `web_search` |
263
276
 
264
- Enable them from the CLI:
277
+ You can also add extra tools for a single run from the CLI:
265
278
 
266
279
  ```bash
267
280
  kon --extra-tools web_search,web_fetch
268
281
  ```
269
282
 
270
- Or in `~/.config/kon/config.toml`:
283
+ To disable web tools, remove them from `~/.config/kon/config.toml`:
271
284
 
272
285
  ```toml
273
286
  [tools]
274
- extra = ["web_search", "web_fetch"]
287
+ extra = []
275
288
  ```
276
289
 
277
290
  ---
@@ -473,9 +486,12 @@ Important fields:
473
486
 
474
487
  - `name` - skill identifier
475
488
  - `description` - used for discovery and prompt context
476
- - `register_cmd` - if `true`, exposes the skill as a slash command and includes it in the `/cmd` popup for manual triggering
489
+ - `register_cmd` - if `true`, exposes the skill as a slash command and includes it in the `/cmd` popup for manual triggering; use `only` to register it as a slash command without including it in the system prompt
477
490
  - `cmd_info` - short help text for the slash menu
478
491
 
492
+ > [!NOTE]
493
+ > Installed skills do **not** appear as slash commands by default — without `register_cmd` they are only described to the model, which invokes them on its own when relevant. Add `register_cmd: true` to a skill's frontmatter to trigger it manually as `/<skill-name>`.
494
+
479
495
  Validation highlights:
480
496
 
481
497
  - lowercase letters, numbers, and `-` only
@@ -538,7 +554,7 @@ Kon supports two permission modes:
538
554
  | `prompt` | Ask before mutating tool calls |
539
555
  | `auto` | Skip approval prompts |
540
556
 
541
- In `prompt` mode, non-mutating tools are allowed automatically, and some clearly read-only shell commands are also allowed.
557
+ In `prompt` mode, non-mutating tools are allowed automatically, and some clearly read-only shell commands are also allowed. This includes web tools: `web_search` and `web_fetch` are read-only, so they run **without an approval prompt** even in `prompt` mode. If you don't want the agent reaching the network at all, remove them from the `[tools] extra` config.
542
558
 
543
559
  Use `/permissions` to switch modes for the current session and persist the change to config.
544
560
 
@@ -6,14 +6,14 @@ This note captures the current tmux E2E coverage, when it was last materially up
6
6
 
7
7
  The current tmux E2E harness lives in the repo-local Kon skill:
8
8
 
9
- - `.kon/skills/kon-tmux-test/SKILL.md`
10
- - `.kon/skills/kon-tmux-test/run-e2e-tests.sh`
9
+ - `.agents/skills/kon-tmux-test/SKILL.md`
10
+ - `.agents/skills/kon-tmux-test/run-e2e-tests.sh`
11
11
 
12
12
  The main script launches Kon in a detached tmux session, drives keyboard input with `tmux send-keys`, captures pane output to `/tmp/kon-test-*.txt`, and relies on the reviewing agent/user to evaluate those captured outputs.
13
13
 
14
14
  ## Last material update
15
15
 
16
- Git history for `.kon/skills/kon-tmux-test` shows the last material test update was:
16
+ Git history for `.agents/skills/kon-tmux-test` shows the last material test update was:
17
17
 
18
18
  ```text
19
19
  ae88aae 2026-03-18 21:18:04 +0530 test: make tmux e2e tab completion cases repo-deterministic
@@ -44,7 +44,7 @@ The coverage is strongest for basic UI triggers and tab completion. It is weaker
44
44
 
45
45
  ## Current documentation drift
46
46
 
47
- `.kon/skills/kon-tmux-test/SKILL.md` is partially stale compared with `run-e2e-tests.sh`.
47
+ `.agents/skills/kon-tmux-test/SKILL.md` is partially stale compared with `run-e2e-tests.sh`.
48
48
 
49
49
  Examples:
50
50
 
@@ -165,7 +165,7 @@ Several of these can be covered with deterministic negative-state tests, even be
165
165
  | --- | --- |
166
166
  | Built-in `/init` appears | Slash menu includes `/init` with its guided setup description |
167
167
  | `/init` selection behavior | Selecting `/init` inserts/submits the skill trigger path correctly without breaking normal slash-command handling |
168
- | Custom registered skill | Seed a temp project `.kon/skills/<name>/SKILL.md` with `register_cmd: true`, launch Kon, verify command appears in slash menu |
168
+ | Custom registered skill | Seed a temp project `.agents/skills/<name>/SKILL.md` with `register_cmd: true`, launch Kon, verify command appears in slash menu |
169
169
  | Skill preview in resume list | If a skill-triggered session is persisted, `/resume` preview shows `/skill-name ...` instead of raw internal prompt scaffolding |
170
170
 
171
171
  ### P1: Queue and steer behavior
@@ -196,7 +196,7 @@ Several of these can be covered with deterministic negative-state tests, even be
196
196
  ## Suggested implementation order
197
197
 
198
198
  1. Isolate `HOME` and test config/session directories in the tmux harness.
199
- 2. Update `.kon/skills/kon-tmux-test/SKILL.md` to match the current script.
199
+ 2. Update `.agents/skills/kon-tmux-test/SKILL.md` to match the current script.
200
200
  3. Add P0 runtime-mode and info-bar tests.
201
201
  4. Add deterministic command negative-state tests for `/compact`, `/handoff`, `/copy`, and `/export`.
202
202
  5. Add session resume/continue/delete tests using seeded fixtures.
@@ -2,6 +2,12 @@
2
2
 
3
3
  This document provides detailed information about running and configuring local models with Kon.
4
4
 
5
+ ## Choosing a model
6
+
7
+ Kon leans heavily on tool calling: every file read, edit, search, and skill invocation is a structured tool call. Very small models (roughly 8B and below, or aggressive quantizations) often produce malformed tool calls, ignore tools entirely, or fail to follow skill instructions — which looks like Kon "not working" when it's the model that can't drive the harness. If a tiny model keeps narrating instead of acting, or tool calls fail to parse, try a larger model before filing a bug.
8
+
9
+ The combinations in the table below are known to work and are a good baseline; among them, prefer the largest one your hardware can serve at a usable speed.
10
+
5
11
  ## Tested Models
6
12
 
7
13
  > Tested on llama server build b8740
@@ -14,7 +14,7 @@ default = true
14
14
 
15
15
  [project]
16
16
  name = "kon-coding-agent"
17
- version = "0.4.0"
17
+ version = "0.4.1"
18
18
  description = "Minimal coding agent"
19
19
  readme = "README.md"
20
20
  requires-python = ">=3.12"
@@ -25,6 +25,7 @@ dependencies = [
25
25
  "curl-cffi>=0.15.0",
26
26
  "ddgs>=9.0.0",
27
27
  "html-to-markdown>=3.3.0,<3.4.0",
28
+ "lxml-html-clean>=0.4.3",
28
29
  "openai>=2.21.0",
29
30
  "pillow>=12.1.1",
30
31
  "pydantic>=2.12.5",
@@ -89,7 +89,7 @@ def main() -> None:
89
89
  )
90
90
  )
91
91
 
92
- from .ui.app import run_tui
92
+ from .ui.launch import run_tui
93
93
 
94
94
  run_tui(args, extra_tools=extra_tools)
95
95