kon-coding-agent 0.3.0__tar.gz → 0.3.2__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.
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/.kon/skills/kon-release-publish/SKILL.md +6 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/.kon/skills/kon-tmux-test/run-e2e-tests.sh +12 -11
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/CHANGELOG.md +41 -4
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/LICENSE +1 -1
- kon_coding_agent-0.3.2/PKG-INFO +550 -0
- kon_coding_agent-0.3.2/README.md +532 -0
- kon_coding_agent-0.3.2/docs/architecture-review.md +306 -0
- kon_coding_agent-0.3.2/docs/images/kon-screenshot.png +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/pyproject.toml +3 -1
- kon_coding_agent-0.3.2/scripts/show_themes.py +216 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/__init__.py +3 -1
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/config.py +119 -46
- kon_coding_agent-0.3.2/src/kon/context/__init__.py +15 -0
- kon_coding_agent-0.3.0/src/kon/shared.py → kon_coding_agent-0.3.2/src/kon/context/_xml.py +0 -10
- kon_coding_agent-0.3.0/src/kon/context/agents.py → kon_coding_agent-0.3.2/src/kon/context/agent_mds.py +4 -3
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/context/git.py +3 -4
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/context/loader.py +3 -3
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/context/skills.py +18 -5
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/core/types.py +30 -2
- kon_coding_agent-0.3.2/src/kon/defaults/config.toml +64 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/events.py +16 -2
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/providers/anthropic.py +16 -3
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/providers/mock.py +20 -8
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/loop.py +21 -23
- kon_coding_agent-0.3.2/src/kon/metrics.py +37 -0
- kon_coding_agent-0.3.2/src/kon/permissions.py +114 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/session.py +48 -6
- kon_coding_agent-0.3.2/src/kon/themes.py +503 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/tools/__init__.py +19 -6
- kon_coding_agent-0.3.2/src/kon/tools/_tool_utils.py +105 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/tools/base.py +11 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/tools/bash.py +22 -12
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/tools/edit.py +16 -11
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/tools/find.py +27 -32
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/tools/grep.py +28 -34
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/tools/read.py +13 -13
- kon_coding_agent-0.3.2/src/kon/tools/web_fetch.py +79 -0
- kon_coding_agent-0.3.2/src/kon/tools/web_search.py +61 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/tools/write.py +18 -8
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/tools_manager.py +8 -2
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/turn.py +130 -33
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/app.py +169 -23
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/autocomplete.py +1 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/blocks.py +145 -41
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/chat.py +53 -8
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/commands.py +63 -27
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/export.py +2 -2
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/floating_list.py +90 -9
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/formatting.py +9 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/input.py +24 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/selection_mode.py +1 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/session_ui.py +37 -10
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/styles.py +83 -31
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/widgets.py +24 -15
- kon_coding_agent-0.3.2/src/kon/update_check.py +49 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/conftest.py +15 -1
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/context/test_agents.py +18 -18
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/context/test_skills.py +31 -6
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/llm/test_anthropic_provider.py +83 -4
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_agentic_loop.py +53 -17
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_compaction.py +10 -13
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_config_injection.py +4 -4
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_config_migration.py +7 -7
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_handoff.py +39 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_launch_warnings.py +6 -6
- kon_coding_agent-0.3.2/tests/test_metrics.py +50 -0
- kon_coding_agent-0.3.2/tests/test_permissions.py +90 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_session_persistence.py +64 -1
- kon_coding_agent-0.3.2/tests/test_session_resume.py +144 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_update_check.py +3 -3
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/tools/test_edit.py +2 -2
- kon_coding_agent-0.3.2/tests/tools/test_edit_display.py +26 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/tools/test_read.py +3 -3
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/tools/test_read_image_integration.py +1 -1
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/ui/test_input_paste.py +8 -0
- kon_coding_agent-0.3.2/tests/ui/test_status_line.py +24 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/uv.lock +398 -1
- kon_coding_agent-0.3.0/PKG-INFO +0 -343
- kon_coding_agent-0.3.0/README.md +0 -327
- kon_coding_agent-0.3.0/TODO.md +0 -2
- kon_coding_agent-0.3.0/scripts/verify_azure_foundry.py +0 -96
- kon_coding_agent-0.3.0/src/kon/context/__init__.py +0 -15
- kon_coding_agent-0.3.0/src/kon/defaults/config.toml +0 -59
- kon_coding_agent-0.3.0/src/kon/update_check.py +0 -68
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/.gitignore +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/.kon/skills/kon-tmux-test/SKILL.md +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/.kon/skills/kon-tmux-test/setup-test-project.sh +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/.python-version +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/AGENTS.md +0 -0
- /kon_coding_agent-0.3.0/LOCAL.md → /kon_coding_agent-0.3.2/docs/local-models.md +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/core/__init__.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/core/compaction.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/core/handoff.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/defaults/__init__.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/__init__.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/base.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/models.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/oauth/__init__.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/oauth/copilot.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/oauth/openai.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/providers/__init__.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/providers/azure_ai_foundry.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/providers/copilot.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/providers/copilot_anthropic.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/providers/github_copilot_headers.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/providers/openai_codex_responses.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/providers/openai_compat.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/providers/openai_completions.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/providers/openai_responses.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/llm/providers/sanitize.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/py.typed +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/tools/_read_image.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/__init__.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/app_protocol.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/clipboard.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/path_complete.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/src/kon/ui/prompt_history.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/llm/__init__.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/llm/test_azure_ai_foundry_provider.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/llm/test_mock_provider.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/llm/test_openai_codex_provider_errors.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_cli_provider_resolution.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_config_binaries.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_config_error_fallback.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_model_provider_resolution.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_openai_compat.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_system_prompt.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_system_prompt_git_context.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/test_update_notice_behavior.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/tools/test_diff.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/tools/test_read_image.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/tools/test_write.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/ui/test_autocomplete.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/ui/test_floating_list.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/ui/test_input_handoff.py +0 -0
- {kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/tests/ui/test_prompt_history.py +0 -0
|
@@ -15,6 +15,12 @@ Use this skill when the user asks to cut a new Kon version, tag it, publish to P
|
|
|
15
15
|
- Whether to publish to PyPI now
|
|
16
16
|
- Whether to create GitHub release now
|
|
17
17
|
|
|
18
|
+
## Versioning requirement
|
|
19
|
+
|
|
20
|
+
- Kon's update check only supports strict numeric `MAJOR.MINOR.PATCH` versions such as `0.2.7` and `0.3.0`.
|
|
21
|
+
- Do **not** cut releases with PyPI/PEP 440 prerelease or suffix forms like `0.3.0rc1`, `0.3.0b1`, `0.3.0.post1`, or `0.3.0.dev1` unless the update-check logic is updated first.
|
|
22
|
+
- Even though PyPI commonly allows those formats, Kon releases should continue following plain `X.Y.Z` so update detection stays correct.
|
|
23
|
+
|
|
18
24
|
## Files to bump
|
|
19
25
|
|
|
20
26
|
- `pyproject.toml` → `[project].version`
|
{kon_coding_agent-0.3.0 → kon_coding_agent-0.3.2}/.kon/skills/kon-tmux-test/run-e2e-tests.sh
RENAMED
|
@@ -104,10 +104,10 @@ capture /tmp/kon-test-4-new.txt
|
|
|
104
104
|
|
|
105
105
|
# =============================================================================
|
|
106
106
|
# Test 5: Tab completion - unique match
|
|
107
|
-
# Verify: typing "
|
|
107
|
+
# Verify: typing "pypr" then Tab completes to "pyproject.toml"
|
|
108
108
|
# =============================================================================
|
|
109
109
|
echo "Test 5: Tab completion - unique match..."
|
|
110
|
-
tmux send-keys -t "$SESSION_NAME" '
|
|
110
|
+
tmux send-keys -t "$SESSION_NAME" 'pypr'
|
|
111
111
|
sleep 1
|
|
112
112
|
tmux send-keys -t "$SESSION_NAME" Tab
|
|
113
113
|
sleep 2
|
|
@@ -116,10 +116,11 @@ clear_input
|
|
|
116
116
|
|
|
117
117
|
# =============================================================================
|
|
118
118
|
# Test 6: Tab completion - multiple alternatives (floating list)
|
|
119
|
-
# Verify: typing "s" then Tab shows
|
|
119
|
+
# Verify: typing "src/kon/ui/s" then Tab shows a list including:
|
|
120
|
+
# selection_mode.py, session_ui.py, styles.py
|
|
120
121
|
# =============================================================================
|
|
121
122
|
echo "Test 6: Tab completion - multiple alternatives..."
|
|
122
|
-
tmux send-keys -t "$SESSION_NAME" 's'
|
|
123
|
+
tmux send-keys -t "$SESSION_NAME" 'src/kon/ui/s'
|
|
123
124
|
sleep 1
|
|
124
125
|
tmux send-keys -t "$SESSION_NAME" Tab
|
|
125
126
|
sleep 2
|
|
@@ -127,11 +128,11 @@ capture /tmp/kon-test-6-tab-multiple.txt
|
|
|
127
128
|
clear_input
|
|
128
129
|
|
|
129
130
|
# =============================================================================
|
|
130
|
-
# Test 7: Tab completion -
|
|
131
|
-
# Verify: typing "
|
|
131
|
+
# Test 7: Tab completion - nested unique file
|
|
132
|
+
# Verify: typing "src/kon/ui/widg" then Tab completes to "src/kon/ui/widgets.py"
|
|
132
133
|
# =============================================================================
|
|
133
|
-
echo "Test 7: Tab completion -
|
|
134
|
-
tmux send-keys -t "$SESSION_NAME" '
|
|
134
|
+
echo "Test 7: Tab completion - nested unique file..."
|
|
135
|
+
tmux send-keys -t "$SESSION_NAME" 'src/kon/ui/widg'
|
|
135
136
|
sleep 1
|
|
136
137
|
tmux send-keys -t "$SESSION_NAME" Tab
|
|
137
138
|
sleep 2
|
|
@@ -140,14 +141,14 @@ clear_input
|
|
|
140
141
|
|
|
141
142
|
# =============================================================================
|
|
142
143
|
# Test 8: Tab completion - select from list
|
|
143
|
-
# Verify: typing "s" Tab shows list, then
|
|
144
|
+
# Verify: typing "src/kon/ui/s" Tab shows list, then Enter applies first completion
|
|
144
145
|
# =============================================================================
|
|
145
146
|
echo "Test 8: Tab completion - select from list..."
|
|
146
|
-
tmux send-keys -t "$SESSION_NAME" 's'
|
|
147
|
+
tmux send-keys -t "$SESSION_NAME" 'src/kon/ui/s'
|
|
147
148
|
sleep 1
|
|
148
149
|
tmux send-keys -t "$SESSION_NAME" Tab
|
|
149
150
|
sleep 2
|
|
150
|
-
# Select first item
|
|
151
|
+
# Select first item from floating list with Enter
|
|
151
152
|
tmux send-keys -t "$SESSION_NAME" Enter
|
|
152
153
|
sleep 1
|
|
153
154
|
capture /tmp/kon-test-8-tab-select.txt
|
|
@@ -6,10 +6,51 @@ All notable changes to this project will be documented in this file.
|
|
|
6
6
|
|
|
7
7
|
- No changes yet.
|
|
8
8
|
|
|
9
|
+
## 0.3.2 - 2026-03-22
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Added a `collapse_thinking` config flag to control thinking block display.
|
|
14
|
+
- Added a Ghostty theme preview script.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Improved theme and model picker indicators.
|
|
19
|
+
- Refactored tool display helpers into shared `truncate_text` and `shorten_path` utilities.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- Fixed duplicate skill warnings coming from the home directory.
|
|
24
|
+
|
|
25
|
+
## 0.3.1 - 2026-03-21
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- Added optional built-in web tools (`web_search`, `web_fetch`) configurable via `--extra-tools` and config - @Meltedd.
|
|
30
|
+
- Added tool permission controls with bash safety analysis - @Meltedd.
|
|
31
|
+
- Added popular built-in themes.
|
|
32
|
+
- Added tool previews in approval prompts.
|
|
33
|
+
- Added run token throughput metrics.
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
|
|
37
|
+
- Updated the default config shape to use `ui.theme`, add `tools` and `permissions` sections, and simplify agent loop defaults.
|
|
38
|
+
- Refreshed README/config/local-model docs and clarified custom skill slash commands.
|
|
39
|
+
- Improved plain-text tool call displays, approval UI presentation, and thinking/input styling.
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
|
|
43
|
+
- Fixed session loading to rebuild the agent and persist the session system prompt.
|
|
44
|
+
- Fixed session file handling by tightening session directory permissions and tarfile path filtering.
|
|
45
|
+
- Fixed update-version check behavior and shortened web fetch extraction errors.
|
|
46
|
+
- Fixed collapsed thinking block rendering, exit summary theming, and summary formatting polish.
|
|
47
|
+
- Fixed skill collision warning path formatting to display consistently.
|
|
48
|
+
|
|
9
49
|
## 0.3.0 - 2026-03-15
|
|
10
50
|
|
|
11
51
|
### Added
|
|
12
52
|
|
|
53
|
+
- Added `/handoff` to start a focused handoff in a new session, including handoff links between sessions.
|
|
13
54
|
- Added Azure AI Foundry provider support for Anthropic models.
|
|
14
55
|
- Added configurable Git context controls in the system prompt.
|
|
15
56
|
- Added startup launch warnings for provider/config/skill initialization issues.
|
|
@@ -36,10 +77,6 @@ All notable changes to this project will be documented in this file.
|
|
|
36
77
|
- Fixed editor/input UX regressions (newline border flicker and truncation/history cycling conflicts).
|
|
37
78
|
- Fixed git-status prompt spacing and reduced git-context prompt cap for stability.
|
|
38
79
|
|
|
39
|
-
### Tests
|
|
40
|
-
|
|
41
|
-
- Added result assertions for tool error paths.
|
|
42
|
-
|
|
43
80
|
## 0.2.7 - 2026-03-14
|
|
44
81
|
|
|
45
82
|
### Added
|
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: kon-coding-agent
|
|
3
|
+
Version: 0.3.2
|
|
4
|
+
Summary: Minimal coding agent
|
|
5
|
+
License-File: LICENSE
|
|
6
|
+
Requires-Python: >=3.12
|
|
7
|
+
Requires-Dist: aiofiles>=25.1.0
|
|
8
|
+
Requires-Dist: aiohttp>=3.13.3
|
|
9
|
+
Requires-Dist: anthropic>=0.79.0
|
|
10
|
+
Requires-Dist: ddgs>=9.0.0
|
|
11
|
+
Requires-Dist: openai>=2.21.0
|
|
12
|
+
Requires-Dist: pillow>=12.1.1
|
|
13
|
+
Requires-Dist: pydantic>=2.12.5
|
|
14
|
+
Requires-Dist: rich>=14.3.2
|
|
15
|
+
Requires-Dist: textual>=8.0.0
|
|
16
|
+
Requires-Dist: trafilatura>=2.0.0
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
|
|
19
|
+
<h1 align="center">Kon</h1>
|
|
20
|
+
<p align="center">A minimal terminal coding agent with a small core, strong defaults, and user-owned context.</p>
|
|
21
|
+
<p align="center">
|
|
22
|
+
<a href="https://pypi.org/project/kon-coding-agent/"><img alt="PyPI" src="https://img.shields.io/pypi/v/kon-coding-agent?style=flat-square" /></a>
|
|
23
|
+
<a href="https://www.python.org/downloads/release/python-3120/"><img alt="Python" src="https://img.shields.io/badge/python-3.12%2B-blue?style=flat-square" /></a>
|
|
24
|
+
<a href="LICENSE"><img alt="License" src="https://img.shields.io/badge/license-MIT-green?style=flat-square" /></a>
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
<p align="center">
|
|
28
|
+
<img src="docs/images/kon-screenshot.png" alt="Kon terminal UI screenshot" width="490" />
|
|
29
|
+
</p>
|
|
30
|
+
|
|
31
|
+
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**.
|
|
32
|
+
|
|
33
|
+
[Kon](https://bleach.fandom.com/wiki/Kon) is named after the artificial soul from *Bleach*.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Table of Contents
|
|
38
|
+
|
|
39
|
+
- [Quick Start](#quick-start)
|
|
40
|
+
- [Why Kon](#why-kon)
|
|
41
|
+
- [Minimal by design](#minimal-by-design)
|
|
42
|
+
- [Configuration](#configuration)
|
|
43
|
+
- [Core tools](#core-tools)
|
|
44
|
+
- [Extra tools](#extra-tools)
|
|
45
|
+
- [Interactive TUI](#interactive-tui)
|
|
46
|
+
- [Editor and navigation](#editor-and-navigation)
|
|
47
|
+
- [Slash commands](#slash-commands)
|
|
48
|
+
- [Themes](#themes)
|
|
49
|
+
- [Sessions](#sessions)
|
|
50
|
+
- [Resume and continue](#resume-and-continue)
|
|
51
|
+
- [Handoff](#handoff)
|
|
52
|
+
- [Export and copy](#export-and-copy)
|
|
53
|
+
- [Compaction](#compaction)
|
|
54
|
+
- [Context Loading](#context-loading)
|
|
55
|
+
- [AGENTS.md](#agentsmd)
|
|
56
|
+
- [Skills](#skills)
|
|
57
|
+
- [Providers and Models](#providers-and-models)
|
|
58
|
+
- [OAuth and API keys](#oauth-and-api-keys)
|
|
59
|
+
- [Local models](#local-models)
|
|
60
|
+
- [Permissions](#permissions)
|
|
61
|
+
- [Tool binaries](#tool-binaries)
|
|
62
|
+
- [Documentation](#documentation)
|
|
63
|
+
- [Acknowledgements](#acknowledgements)
|
|
64
|
+
- [License](#license)
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Quick Start
|
|
69
|
+
|
|
70
|
+
### Install
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
uv tool install kon-coding-agent
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Run
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
kon
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
```text
|
|
83
|
+
usage: kon [-h] [--model MODEL]
|
|
84
|
+
[--provider {azure-ai-foundry,github-copilot,openai,openai-codex,openai-responses,zhipu}]
|
|
85
|
+
[--api-key API_KEY] [--base-url BASE_URL] [--continue]
|
|
86
|
+
[--resume RESUME_SESSION] [--version]
|
|
87
|
+
[--extra-tools EXTRA_TOOLS]
|
|
88
|
+
|
|
89
|
+
Kon TUI
|
|
90
|
+
|
|
91
|
+
options:
|
|
92
|
+
-h, --help show this help message and exit
|
|
93
|
+
--model, -m MODEL Model to use
|
|
94
|
+
--provider, -p {azure-ai-foundry,github-copilot,openai,openai-codex,openai-responses,zhipu}
|
|
95
|
+
Provider to use
|
|
96
|
+
--api-key, -k API_KEY
|
|
97
|
+
API key
|
|
98
|
+
--base-url, -u BASE_URL
|
|
99
|
+
Base URL for API
|
|
100
|
+
--continue, -c Resume the most recent session
|
|
101
|
+
--resume, -r RESUME_SESSION
|
|
102
|
+
Resume a specific session by ID (full or unique prefix)
|
|
103
|
+
--version show program's version number and exit
|
|
104
|
+
--extra-tools EXTRA_TOOLS
|
|
105
|
+
Comma-separated extra tools to enable (e.g. web_search,web_fetch)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Common examples
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# choose a model explicitly
|
|
112
|
+
kon -p openai-codex -m gpt-5.4
|
|
113
|
+
|
|
114
|
+
# continue your latest session
|
|
115
|
+
kon -c
|
|
116
|
+
|
|
117
|
+
# resume a specific session by id or unique prefix
|
|
118
|
+
kon -r 3f2a8c1b-...
|
|
119
|
+
|
|
120
|
+
# enable the optional web tools
|
|
121
|
+
kon --extra-tools web_search,web_fetch
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Install from source
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
git clone https://github.com/kuutsav/kon
|
|
128
|
+
cd kon
|
|
129
|
+
uv tool install .
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
> [!WARNING]
|
|
133
|
+
> Kon currently targets macOS and Linux. Windows is not tested yet.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Why Kon
|
|
138
|
+
|
|
139
|
+
### Minimal by design
|
|
140
|
+
|
|
141
|
+
Kon tries to stay small in the places that matter most:
|
|
142
|
+
|
|
143
|
+
- **System prompt under 270 tokens** by default
|
|
144
|
+
- **6 core tools** for everyday coding work
|
|
145
|
+
- **2 optional extra tools** for web lookup and content extraction
|
|
146
|
+
- **Project instructions are externalized** through `AGENTS.md`
|
|
147
|
+
- **Heavily configurable** defaults that you can tune around model, prompt, permissions, compaction, tools, and UI
|
|
148
|
+
- **Useful features are borrowed selectively** from other agents, like `/handoff` inspired by Amp
|
|
149
|
+
|
|
150
|
+
That means the default harness stays lightweight, while your actual working behavior can still become rich through project context and configuration.
|
|
151
|
+
|
|
152
|
+
If you want a coding agent you can read, understand, fork, and adapt without inheriting a giant framework, that is the point of Kon.
|
|
153
|
+
|
|
154
|
+
### Configuration
|
|
155
|
+
|
|
156
|
+
Kon stores config at:
|
|
157
|
+
|
|
158
|
+
```text
|
|
159
|
+
~/.kon/config.toml
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
It is created automatically on first run, and old schemas are migrated forward automatically when needed.
|
|
163
|
+
|
|
164
|
+
Users are recommended to customize this config based on their model, workflow, safety preferences, and UI taste. For the shipped default config with inline comments, see [`src/kon/defaults/config.toml`](src/kon/defaults/config.toml).
|
|
165
|
+
|
|
166
|
+
Here is the full config shape:
|
|
167
|
+
|
|
168
|
+
```toml
|
|
169
|
+
[meta]
|
|
170
|
+
config_version = 3
|
|
171
|
+
|
|
172
|
+
[llm]
|
|
173
|
+
default_provider = "openai-codex"
|
|
174
|
+
default_model = "gpt-5.4"
|
|
175
|
+
default_base_url = ""
|
|
176
|
+
default_thinking_level = "high"
|
|
177
|
+
tool_call_idle_timeout_seconds = 180
|
|
178
|
+
|
|
179
|
+
[llm.system_prompt]
|
|
180
|
+
git_context = true
|
|
181
|
+
content = """You are an expert coding assistant called Kon.
|
|
182
|
+
..."""
|
|
183
|
+
|
|
184
|
+
[compaction]
|
|
185
|
+
on_overflow = "continue"
|
|
186
|
+
buffer_tokens = 20000
|
|
187
|
+
|
|
188
|
+
[agent]
|
|
189
|
+
max_turns = 500
|
|
190
|
+
default_context_window = 200000
|
|
191
|
+
|
|
192
|
+
[tools]
|
|
193
|
+
extra = ["web_search", "web_fetch"]
|
|
194
|
+
|
|
195
|
+
[ui]
|
|
196
|
+
theme = "gruvbox-dark"
|
|
197
|
+
|
|
198
|
+
[permissions]
|
|
199
|
+
mode = "prompt"
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Core tools
|
|
203
|
+
|
|
204
|
+
These are enabled by default:
|
|
205
|
+
|
|
206
|
+
| Tool | What it does | Why it matters |
|
|
207
|
+
| --- | --- | --- |
|
|
208
|
+
| `read` | Read file contents with pagination and image support | Keeps file inspection structured and token-efficient |
|
|
209
|
+
| `edit` | Exact text replacement | Good for surgical code changes |
|
|
210
|
+
| `write` | Create or fully overwrite files | Good for new files or full rewrites |
|
|
211
|
+
| `bash` | Run shell commands | For tests, git, builds, scripts, package managers |
|
|
212
|
+
| `grep` | Regex search inside files | Faster and cleaner than shelling out for content search |
|
|
213
|
+
| `find` | Glob-based file discovery | Fast repo navigation with `.gitignore` awareness |
|
|
214
|
+
|
|
215
|
+
This is the core experience: small, predictable, and enough for most coding tasks.
|
|
216
|
+
|
|
217
|
+
### Extra tools
|
|
218
|
+
|
|
219
|
+
Kon also ships optional built-in tools you can turn on when needed:
|
|
220
|
+
|
|
221
|
+
| Tool | Purpose | How to enable |
|
|
222
|
+
| --- | --- | --- |
|
|
223
|
+
| `web_search` | Search the web with DuckDuckGo | `--extra-tools web_search,web_fetch` or config |
|
|
224
|
+
| `web_fetch` | Fetch and extract clean page content | Usually paired with `web_search` |
|
|
225
|
+
|
|
226
|
+
Enable them from the CLI:
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
kon --extra-tools web_search,web_fetch
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Or in `~/.kon/config.toml`:
|
|
233
|
+
|
|
234
|
+
```toml
|
|
235
|
+
[tools]
|
|
236
|
+
extra = ["web_search", "web_fetch"]
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Interactive TUI
|
|
242
|
+
|
|
243
|
+
Kon is built around a terminal UI that stays simple but practical.
|
|
244
|
+
|
|
245
|
+
### Editor and navigation
|
|
246
|
+
|
|
247
|
+
| Feature | How it works |
|
|
248
|
+
| --- | --- |
|
|
249
|
+
| File reference | Type `@` to fuzzy-search files and folders in the current project |
|
|
250
|
+
| Path completion | Press **Tab** to complete paths like `./`, `../`, `~`, quoted paths, and absolute paths |
|
|
251
|
+
| Queued prompts | You can submit follow-up prompts while the agent is still running |
|
|
252
|
+
| Queue limit | Up to **5** queued prompts |
|
|
253
|
+
| Model switching | Use `/model` to switch interactively |
|
|
254
|
+
| Session browsing | Use `/resume` to browse prior sessions |
|
|
255
|
+
|
|
256
|
+
### Slash commands
|
|
257
|
+
|
|
258
|
+
Type `/` at the start of the input box to see available commands.
|
|
259
|
+
|
|
260
|
+
| Command | Description |
|
|
261
|
+
| --- | --- |
|
|
262
|
+
| `/new` | Start a new conversation and reload project context |
|
|
263
|
+
| `/resume` | Browse and restore a saved session |
|
|
264
|
+
| `/model` | Switch model via picker |
|
|
265
|
+
| `/session` | Show session file, ids, message counts, and token stats |
|
|
266
|
+
| `/compact` | Compact the current conversation immediately |
|
|
267
|
+
| `/handoff` | Create a focused handoff into a new session |
|
|
268
|
+
| `/themes` | Switch UI themes |
|
|
269
|
+
| `/export` | Export current session to standalone HTML |
|
|
270
|
+
| `/copy` | Copy the last assistant response to the clipboard |
|
|
271
|
+
| `/login` | Authenticate with a supported OAuth provider |
|
|
272
|
+
| `/logout` | Remove provider credentials |
|
|
273
|
+
| `/clear` | Clear the current conversation |
|
|
274
|
+
| `/help` | Show help and keybindings |
|
|
275
|
+
| `/<custom>` | Custom skills registered as slash commands, shown in the /cmd popup for manual triggering |
|
|
276
|
+
| `/quit` (`/exit`, `/q`) | Quit Kon |
|
|
277
|
+
|
|
278
|
+
### Themes
|
|
279
|
+
|
|
280
|
+
Kon includes built-in themes and supports switching from inside the app:
|
|
281
|
+
|
|
282
|
+
- `gruvbox-dark`
|
|
283
|
+
- `gruvbox-light`
|
|
284
|
+
- `one-dark`
|
|
285
|
+
- `one-light`
|
|
286
|
+
- other built-in themes shipped with the app
|
|
287
|
+
|
|
288
|
+
Set one interactively with `/themes`, or persist it in config:
|
|
289
|
+
|
|
290
|
+
```toml
|
|
291
|
+
[ui]
|
|
292
|
+
theme = "gruvbox-dark"
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## Sessions
|
|
298
|
+
|
|
299
|
+
Kon stores sessions as append-only **JSONL** files in:
|
|
300
|
+
|
|
301
|
+
```text
|
|
302
|
+
~/.kon/sessions/
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
That keeps sessions easy to inspect, archive, and move around.
|
|
306
|
+
|
|
307
|
+
### Resume and continue
|
|
308
|
+
|
|
309
|
+
You can restore work from the CLI or inside the TUI:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
kon --continue
|
|
313
|
+
kon --resume <session-id>
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
Inside Kon:
|
|
317
|
+
|
|
318
|
+
- `/resume` opens an interactive session picker
|
|
319
|
+
- `/session` shows metadata and token usage
|
|
320
|
+
- the session picker also supports deleting old saved sessions
|
|
321
|
+
|
|
322
|
+
### Handoff
|
|
323
|
+
|
|
324
|
+
`/handoff <query>` starts a new focused session using a synthesized handoff prompt generated from the current conversation.
|
|
325
|
+
|
|
326
|
+
This is useful when a thread has grown broad and you want a fresh, narrower working context without losing the original session.
|
|
327
|
+
|
|
328
|
+
### Export and copy
|
|
329
|
+
|
|
330
|
+
- `/export` writes a standalone HTML transcript into the current working directory
|
|
331
|
+
- `/copy` copies the latest assistant response text to your clipboard
|
|
332
|
+
|
|
333
|
+
### Compaction
|
|
334
|
+
|
|
335
|
+
Long sessions eventually fill the context window. Kon supports both:
|
|
336
|
+
|
|
337
|
+
- **manual compaction** via `/compact`
|
|
338
|
+
- **automatic compaction** on overflow
|
|
339
|
+
|
|
340
|
+
Overflow behavior is configurable:
|
|
341
|
+
|
|
342
|
+
```toml
|
|
343
|
+
[compaction]
|
|
344
|
+
on_overflow = "continue" # or "pause"
|
|
345
|
+
buffer_tokens = 20000
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
The full session history still remains on disk in the JSONL file.
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
## Context Loading
|
|
353
|
+
|
|
354
|
+
Kon keeps the built-in harness small by moving project-specific instructions out of the fixed prompt.
|
|
355
|
+
|
|
356
|
+
### AGENTS.md
|
|
357
|
+
|
|
358
|
+
Kon loads project guidance from `AGENTS.md` or `CLAUDE.md` files into the system prompt.
|
|
359
|
+
|
|
360
|
+
Load order:
|
|
361
|
+
|
|
362
|
+
1. `~/.kon/AGENTS.md`
|
|
363
|
+
2. matching ancestor directories from git root (or home) down to the current working directory
|
|
364
|
+
|
|
365
|
+
Use these files for repo conventions, test commands, code style notes, deployment steps, or anything else you want loaded automatically.
|
|
366
|
+
|
|
367
|
+
### Skills
|
|
368
|
+
|
|
369
|
+
Skills are reusable instruction packs discovered from:
|
|
370
|
+
|
|
371
|
+
- project: `.kon/skills/`
|
|
372
|
+
- global: `~/.kon/skills/`
|
|
373
|
+
|
|
374
|
+
Each skill lives in its own directory with a `SKILL.md` file.
|
|
375
|
+
|
|
376
|
+
Example:
|
|
377
|
+
|
|
378
|
+
```markdown
|
|
379
|
+
---
|
|
380
|
+
name: my-skill
|
|
381
|
+
description: Brief description of what this skill does
|
|
382
|
+
register_cmd: true # also registers the skill in the /cmd popup for manual triggering
|
|
383
|
+
cmd_info: Quick action shown in slash menu
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
# My Skill
|
|
387
|
+
|
|
388
|
+
Detailed instructions for the agent...
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
Important fields:
|
|
392
|
+
|
|
393
|
+
- `name` - skill identifier
|
|
394
|
+
- `description` - used for discovery and prompt context
|
|
395
|
+
- `register_cmd` - if `true`, exposes the skill as a slash command and includes it in the `/cmd` popup for manual triggering
|
|
396
|
+
- `cmd_info` - short help text for the slash menu
|
|
397
|
+
|
|
398
|
+
Validation highlights:
|
|
399
|
+
|
|
400
|
+
- lowercase letters, numbers, and `-` only
|
|
401
|
+
- no leading/trailing `-`
|
|
402
|
+
- no `--`
|
|
403
|
+
- max length for `name`: 64 chars
|
|
404
|
+
|
|
405
|
+
Skills are the main way to add reusable behaviors without bloating the default harness.
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## Providers and Models
|
|
410
|
+
|
|
411
|
+
Kon works with hosted models and local models exposed through an OpenAI-compatible `/v1` API.
|
|
412
|
+
|
|
413
|
+
Built-in provider support includes:
|
|
414
|
+
|
|
415
|
+
- **GitHub Copilot**
|
|
416
|
+
- **OpenAI Codex**
|
|
417
|
+
- **OpenAI Responses / OpenAI-compatible endpoints**
|
|
418
|
+
- **Azure AI Foundry**
|
|
419
|
+
- **ZhiPu**
|
|
420
|
+
|
|
421
|
+
Use `/model` in the TUI to switch between available configured models.
|
|
422
|
+
|
|
423
|
+
### OAuth and API keys
|
|
424
|
+
|
|
425
|
+
Kon supports both OAuth login flows and direct API-key configuration.
|
|
426
|
+
|
|
427
|
+
- **GitHub Copilot OAuth**: run `/login` and choose GitHub Copilot
|
|
428
|
+
- **OpenAI OAuth**: run `/login` and choose OpenAI
|
|
429
|
+
- **OpenAI-compatible providers**: use `OPENAI_API_KEY` or provider-specific equivalents
|
|
430
|
+
- **Azure AI Foundry**: set `AZURE_AI_FOUNDRY_API_KEY` and `AZURE_AI_FOUNDRY_BASE_URL`
|
|
431
|
+
|
|
432
|
+
You can also pass credentials directly on launch:
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
kon --provider openai --model some-model --api-key "$OPENAI_API_KEY"
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### Local models
|
|
439
|
+
|
|
440
|
+
Kon works well with local models served through an OpenAI-compatible endpoint.
|
|
441
|
+
|
|
442
|
+
Example with `llama-server`:
|
|
443
|
+
|
|
444
|
+
```bash
|
|
445
|
+
./llama-server -m <models-dir>/GLM-4.7-Flash-GGUF/GLM-4.7-Flash-Q4_K_M.gguf \
|
|
446
|
+
-n 8192 \
|
|
447
|
+
-c 64000
|
|
448
|
+
|
|
449
|
+
kon --model zai-org/glm-4.7-flash \
|
|
450
|
+
--provider openai \
|
|
451
|
+
--base-url http://localhost:8080/v1 \
|
|
452
|
+
--api-key ""
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
More notes, tested models, and examples live in [docs/local-models.md](docs/local-models.md).
|
|
456
|
+
|
|
457
|
+
---
|
|
458
|
+
|
|
459
|
+
### Configuration
|
|
460
|
+
|
|
461
|
+
Kon stores config at:
|
|
462
|
+
|
|
463
|
+
```text
|
|
464
|
+
~/.kon/config.toml
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
It is created automatically on first run, and old schemas are migrated forward automatically when needed.
|
|
468
|
+
|
|
469
|
+
Users are recommended to customize this config based on their model, workflow, safety preferences, and UI taste.
|
|
470
|
+
|
|
471
|
+
Here is the full config shape:
|
|
472
|
+
|
|
473
|
+
```toml
|
|
474
|
+
[meta]
|
|
475
|
+
config_version = 3
|
|
476
|
+
|
|
477
|
+
[llm]
|
|
478
|
+
default_provider = "openai-codex"
|
|
479
|
+
default_model = "gpt-5.4"
|
|
480
|
+
default_base_url = ""
|
|
481
|
+
default_thinking_level = "high"
|
|
482
|
+
tool_call_idle_timeout_seconds = 180
|
|
483
|
+
|
|
484
|
+
[llm.system_prompt]
|
|
485
|
+
git_context = true
|
|
486
|
+
content = """You are an expert coding assistant called Kon.
|
|
487
|
+
..."""
|
|
488
|
+
|
|
489
|
+
[compaction]
|
|
490
|
+
on_overflow = "continue"
|
|
491
|
+
buffer_tokens = 20000
|
|
492
|
+
|
|
493
|
+
[agent]
|
|
494
|
+
max_turns = 500
|
|
495
|
+
default_context_window = 200000
|
|
496
|
+
|
|
497
|
+
[tools]
|
|
498
|
+
extra = ["web_search", "web_fetch"]
|
|
499
|
+
|
|
500
|
+
[ui]
|
|
501
|
+
theme = "gruvbox-dark"
|
|
502
|
+
|
|
503
|
+
[permissions]
|
|
504
|
+
mode = "prompt"
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
### Permissions
|
|
508
|
+
|
|
509
|
+
Kon supports two permission modes:
|
|
510
|
+
|
|
511
|
+
| Mode | Behavior |
|
|
512
|
+
| --- | --- |
|
|
513
|
+
| `prompt` | Ask before mutating tool calls |
|
|
514
|
+
| `auto` | Skip approval prompts |
|
|
515
|
+
|
|
516
|
+
In `prompt` mode, non-mutating tools are allowed automatically, and some clearly read-only shell commands are also allowed.
|
|
517
|
+
|
|
518
|
+
```toml
|
|
519
|
+
[permissions]
|
|
520
|
+
mode = "prompt" # or "auto"
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### Tool binaries
|
|
524
|
+
|
|
525
|
+
Kon depends on a few fast CLI tools for file discovery and search:
|
|
526
|
+
|
|
527
|
+
- **[`fd`](https://github.com/sharkdp/fd)** - required for fast file discovery
|
|
528
|
+
- **[`ripgrep`](https://github.com/BurntSushi/ripgrep)** - required for fast content search
|
|
529
|
+
- **[`eza`](https://github.com/eza-community/eza)** - optional
|
|
530
|
+
|
|
531
|
+
If `fd` or `rg` are missing, Kon can download them automatically. `eza` is optional and mainly useful for cleaner, `.gitignore`-aware directory listings.
|
|
532
|
+
|
|
533
|
+
---
|
|
534
|
+
|
|
535
|
+
## Documentation
|
|
536
|
+
|
|
537
|
+
- [Local models](docs/local-models.md) - Running Kon with local OpenAI-compatible models, plus tested setups and example commands.
|
|
538
|
+
|
|
539
|
+
---
|
|
540
|
+
|
|
541
|
+
## Acknowledgements
|
|
542
|
+
|
|
543
|
+
- Kon takes significant inspiration from [pi coding-agent](https://github.com/badlogic/pi-mono/tree/main/packages/coding-agent), especially around philosophy and UI direction.
|
|
544
|
+
- Kon also borrows ideas from Amp, Claude Code, and other terminal coding agents.
|
|
545
|
+
|
|
546
|
+
---
|
|
547
|
+
|
|
548
|
+
## License
|
|
549
|
+
|
|
550
|
+
MIT
|