cluxion-agentplugin-preprocessing 0.3.1__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.
Files changed (86) hide show
  1. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/LICENSE +26 -22
  2. cluxion_agentplugin_preprocessing-0.3.2/PKG-INFO +138 -0
  3. cluxion_agentplugin_preprocessing-0.3.2/README.md +106 -0
  4. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/pyproject.toml +1 -1
  5. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_agentplugin_preprocessing/__init__.py +1 -1
  6. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_agentplugin_preprocessing/guard_watch.py +16 -19
  7. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_agentplugin_preprocessing/schemas.py +5 -0
  8. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/adapters/contract.py +8 -2
  9. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/web/browser_bridge.py +9 -0
  10. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/runtime/test_contract.py +17 -0
  11. cluxion_agentplugin_preprocessing-0.3.1/PKG-INFO +0 -125
  12. cluxion_agentplugin_preprocessing-0.3.1/README.md +0 -93
  13. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/.github/profile/README.md +0 -0
  14. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/.gitignore +0 -0
  15. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/Docs/README.md +0 -0
  16. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/adapters/claude/.claude-plugin/plugin.json +0 -0
  17. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/adapters/claude/skills/preprocess/SKILL.md +0 -0
  18. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/adapters/codex/config-snippet.toml +0 -0
  19. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/cluxion-Docs/README.md +0 -0
  20. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/cluxion-Docs/architecture.md +0 -0
  21. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/cluxion-Docs/harness-logic.md +0 -0
  22. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/cluxion-Docs/honesty-preprocessing.md +0 -0
  23. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/cluxion-Docs/install-and-operations.md +0 -0
  24. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/cluxion-Docs/security.md +0 -0
  25. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/rust/cluxion_queue/Cargo.lock +0 -0
  26. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/rust/cluxion_queue/Cargo.toml +0 -0
  27. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/rust/cluxion_queue/pyproject.toml +0 -0
  28. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/rust/cluxion_queue/src/context.rs +0 -0
  29. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/rust/cluxion_queue/src/dispatch.rs +0 -0
  30. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/rust/cluxion_queue/src/guard.rs +0 -0
  31. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/rust/cluxion_queue/src/lib.rs +0 -0
  32. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/rust/cluxion_queue/src/main.rs +0 -0
  33. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/rust/cluxion_queue/src/queue.rs +0 -0
  34. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/rust/cluxion_queue/src/types.rs +0 -0
  35. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_agentplugin_preprocessing/cli.py +0 -0
  36. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_agentplugin_preprocessing/hermes_config.py +0 -0
  37. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_agentplugin_preprocessing/plugin.py +0 -0
  38. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_agentplugin_preprocessing/plugin.yaml +0 -0
  39. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_agentplugin_preprocessing/runner.py +0 -0
  40. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/__init__.py +0 -0
  41. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/__main__.py +0 -0
  42. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/adapters/__init__.py +0 -0
  43. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/adapters/grok_build.py +0 -0
  44. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/adapters/hermes.py +0 -0
  45. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/adapters/spec.py +0 -0
  46. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/bootstrap.py +0 -0
  47. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/cli.py +0 -0
  48. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/core/__init__.py +0 -0
  49. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/core/clarification.py +0 -0
  50. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/core/context_compress.py +0 -0
  51. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/core/dispatch_store.py +0 -0
  52. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/core/harness.py +0 -0
  53. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/core/intent.py +0 -0
  54. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/core/ledger.py +0 -0
  55. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/core/ledger_codec.py +0 -0
  56. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/core/plan_codec.py +0 -0
  57. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/core/preprocess.py +0 -0
  58. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/core/types.py +0 -0
  59. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/core/work_queue.py +0 -0
  60. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/guard_daemon_host.py +0 -0
  61. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/models/__init__.py +0 -0
  62. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/models/supervisor.py +0 -0
  63. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/models/vllm_mlx.py +0 -0
  64. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/resources/__init__.py +0 -0
  65. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/resources/guard_bridge.py +0 -0
  66. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/resources/py_queue.py +0 -0
  67. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/resources/queue_bridge.py +0 -0
  68. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/resources/rust_bridge.py +0 -0
  69. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/src/cluxion_runtime/web/__init__.py +0 -0
  70. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/runtime/test_browser_bridge.py +0 -0
  71. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/runtime/test_clarification.py +0 -0
  72. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/runtime/test_cluxion_runtime_spine.py +0 -0
  73. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/runtime/test_context_compress.py +0 -0
  74. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/runtime/test_dispatch_store.py +0 -0
  75. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/runtime/test_guard.py +0 -0
  76. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/runtime/test_ledger.py +0 -0
  77. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/runtime/test_queue_backends.py +0 -0
  78. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/runtime/test_runtime_adapter_cli.py +0 -0
  79. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/runtime/test_rust_queue.py +0 -0
  80. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/runtime/test_supervisor.py +0 -0
  81. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/test_bootstrap.py +0 -0
  82. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/test_guard_watch.py +0 -0
  83. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/test_hermes_config.py +0 -0
  84. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/test_packaging_policy.py +0 -0
  85. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/test_plugin.py +0 -0
  86. {cluxion_agentplugin_preprocessing-0.3.1 → cluxion_agentplugin_preprocessing-0.3.2}/tests/test_runner.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Apache License
2
2
  Version 2.0, January 2004
3
- https://www.apache.org/licenses/
3
+ http://www.apache.org/licenses/
4
4
 
5
5
  TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
6
 
@@ -73,17 +73,18 @@
73
73
  3. Grant of Patent License. Subject to the terms and conditions of
74
74
  this License, each Contributor hereby grants to You a perpetual,
75
75
  worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
- patent license to make, have made, use, offer to sell, sell, import,
77
- and otherwise transfer the Work, where such license applies only to
78
- those patent claims licensable by such Contributor that are necessarily
79
- infringed by their Contribution(s) alone or by combination of their
80
- Contribution(s) with the Work to which such Contribution(s) was
81
- submitted. If You institute patent litigation against any entity
82
- (including a cross-claim or counterclaim in a lawsuit) alleging that
83
- the Work or a Contribution incorporated within the Work constitutes
84
- direct or contributory patent infringement, then any patent licenses
85
- granted to You under this License for that Work shall terminate as
86
- of the date such litigation is filed.
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
87
88
 
88
89
  4. Redistribution. You may reproduce and distribute copies of the
89
90
  Work or Derivative Works thereof in any medium, with or without
@@ -130,6 +131,9 @@
130
131
  any Contribution intentionally submitted for inclusion in the Work
131
132
  by You to the Licensor shall be under the terms and conditions of
132
133
  this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
133
137
 
134
138
  6. Trademarks. This License does not grant permission to use the trade
135
139
  names, trademarks, service marks, or product names of the Licensor,
@@ -182,16 +186,16 @@
182
186
  same "printed page" as the copyright notice for easier
183
187
  identification within third-party archives.
184
188
 
185
- Copyright 2026 Cluxion
189
+ Copyright [yyyy] [name of copyright owner]
186
190
 
187
- Licensed under the Apache License, Version 2.0 (the "License");
188
- you may not use this file except in compliance with the License.
189
- You may obtain a copy of the License at
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
190
194
 
191
- https://www.apache.org/licenses/LICENSE-2.0
195
+ http://www.apache.org/licenses/LICENSE-2.0
192
196
 
193
- Unless required by applicable law or agreed to in writing, software
194
- distributed under the License is distributed on an "AS IS" BASIS,
195
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
196
- See the License for the specific language governing permissions and
197
- limitations under the License.
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
@@ -0,0 +1,138 @@
1
+ Metadata-Version: 2.4
2
+ Name: cluxion-agentplugin-preprocessing
3
+ Version: 0.3.2
4
+ Summary: Universal agent plugin for Cluxion preprocessing, honesty contracts, clarification, Rust work queue, and resource-aware harness handoff.
5
+ Project-URL: Homepage, https://github.com/cluxion/cluxion-Agentplugin-preprocessing
6
+ Project-URL: Repository, https://github.com/cluxion/cluxion-Agentplugin-preprocessing
7
+ Project-URL: Issues, https://github.com/cluxion/cluxion-Agentplugin-preprocessing/issues
8
+ Author-email: cluxion <algocean1204@users.noreply.github.com>
9
+ License-Expression: Apache-2.0
10
+ License-File: LICENSE
11
+ Keywords: ai-agent,claude-code,cluxion,codex,hermes-agent,plugin,preprocessing
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Plugins
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: Apache Software License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Python: >=3.11
21
+ Requires-Dist: psutil>=5.9
22
+ Requires-Dist: pyyaml>=6.0
23
+ Provides-Extra: browser
24
+ Requires-Dist: playwright>=1.49; extra == 'browser'
25
+ Provides-Extra: dev
26
+ Requires-Dist: build>=1.2; extra == 'dev'
27
+ Requires-Dist: pytest>=8.0; extra == 'dev'
28
+ Requires-Dist: ruff>=0.8; extra == 'dev'
29
+ Requires-Dist: twine>=6.0; extra == 'dev'
30
+ Requires-Dist: wheel>=0.45; extra == 'dev'
31
+ Description-Content-Type: text/markdown
32
+
33
+ ========= Written in Korean first, then English ==========
34
+
35
+ ======== 한국어 ========
36
+
37
+ # cluxion-agentplugin-preprocessing
38
+
39
+ AI 코딩 에이전트(Hermes Agent, Claude Code, Codex)를 위한 전처리 플러그인입니다. 작업이 시작되기
40
+ *전에* 정리를 해 줍니다: 에이전트가 모르는 것은 모른다고 인정하게 하고, 애매한 요청은 행동하기 전에
41
+ 사용자에게 명확히 묻게 하며, 긴 작업을 안정적으로 큐에 넣고, 폭주하는 프로세스가 기기를 다운시키지
42
+ 못하게 막고, 대화가 너무 길어지면 자동으로 압축합니다.
43
+
44
+ ## 설치
45
+
46
+ ```bash
47
+ pip install cluxion-agentplugin-preprocessing
48
+
49
+ # 선택: 사용자 본인의 로그인된 Chrome으로 웹 검색
50
+ pip install 'cluxion-agentplugin-preprocessing[browser]'
51
+ playwright install chromium
52
+ ```
53
+
54
+ ### Hermes Agent에서 사용
55
+
56
+ ```bash
57
+ cluxion-preprocess enable # ~/.hermes/config.yaml 에 플러그인을 추가합니다
58
+ # 그 다음 Hermes 재시작
59
+ ```
60
+
61
+ Hermes를 통해 제공되는 로컬 모델(vLLM/MLX)에서도 동일하게 동작합니다.
62
+
63
+ ## 기능
64
+
65
+ 활성화하면 에이전트가 아래 도구들을 얻고, 자동으로 호출합니다.
66
+
67
+ - **정직함과 명확화** — 에이전트가 추측하기 전에 먼저 묻고, 근거를 댈 수 없는 답을 지어내지 않습니다.
68
+ - **작업 큐** — 긴 작업을 하나의 프롬프트에 넘치게 담는 대신 추적 가능한 세그먼트로 분할합니다.
69
+ - **자원 가드** — 폭주 프로세스가 RAM을 모두 잡아먹지 못하게 막는 가벼운 감시기. Hermes 세션마다
70
+ 자동으로 시작됩니다.
71
+ - **컨텍스트 압축** — 대화가 모델 컨텍스트의 약 70%를 넘으면, 의도와 최근 대화를 보존하며 압축합니다.
72
+ - **내 Chrome으로 웹 검색** — 본인의 로그인된 브라우저 세션으로 Google / Naver / Perplexity / 사내
73
+ 페이지를 검색합니다(위의 `[browser]` extra 필요).
74
+
75
+ ## 문제 해결
76
+
77
+ | 증상 | 해결 |
78
+ |---|---|
79
+ | `playwright_not_installed` | `pip install 'cluxion-agentplugin-preprocessing[browser]' && playwright install chromium` |
80
+ | Hermes에 도구가 안 보임 | `cluxion-preprocess enable` 실행 후 Hermes 재시작 |
81
+
82
+ ## 라이선스
83
+
84
+ Apache-2.0
85
+
86
+ ============ English ==========
87
+
88
+ # cluxion-agentplugin-preprocessing
89
+
90
+ A preprocessing plugin for AI coding agents (Hermes Agent, Claude Code, Codex). It tidies
91
+ things up *before* work starts: it makes the agent admit when it doesn't know, asks you to
92
+ clarify vague requests before acting, queues long tasks reliably, keeps runaway processes
93
+ from taking down your machine, and auto-compresses the conversation when it grows too long.
94
+
95
+ ## Install
96
+
97
+ ```bash
98
+ pip install cluxion-agentplugin-preprocessing
99
+
100
+ # optional: web search through your own logged-in Chrome
101
+ pip install 'cluxion-agentplugin-preprocessing[browser]'
102
+ playwright install chromium
103
+ ```
104
+
105
+ ### Use with Hermes Agent
106
+
107
+ ```bash
108
+ cluxion-preprocess enable # adds the plugin to ~/.hermes/config.yaml
109
+ # then restart Hermes
110
+ ```
111
+
112
+ The tools also work with local models (vLLM/MLX) served through Hermes.
113
+
114
+ ## What you get
115
+
116
+ Once enabled, your agent gains these tools and calls them automatically:
117
+
118
+ - **Honesty & clarification** — the agent asks before guessing and won't fake an answer it
119
+ can't back up.
120
+ - **Work queue** — long tasks are split into tracked segments instead of overflowing a
121
+ single prompt.
122
+ - **Resource guard** — a lightweight watcher that stops runaway processes from eating all
123
+ your RAM. It starts automatically with each Hermes session.
124
+ - **Context compression** — shrinks the conversation once it passes ~70% of the model's
125
+ window, keeping your intent and recent turns.
126
+ - **Web search via your Chrome** — searches Google / Naver / Perplexity / internal pages
127
+ through your own logged-in browser session (needs the `[browser]` extra above).
128
+
129
+ ## Troubleshooting
130
+
131
+ | Problem | Fix |
132
+ |---|---|
133
+ | `playwright_not_installed` | `pip install 'cluxion-agentplugin-preprocessing[browser]' && playwright install chromium` |
134
+ | Tools don't appear in Hermes | run `cluxion-preprocess enable`, then restart Hermes |
135
+
136
+ ## License
137
+
138
+ Apache-2.0
@@ -0,0 +1,106 @@
1
+ ========= Written in Korean first, then English ==========
2
+
3
+ ======== 한국어 ========
4
+
5
+ # cluxion-agentplugin-preprocessing
6
+
7
+ AI 코딩 에이전트(Hermes Agent, Claude Code, Codex)를 위한 전처리 플러그인입니다. 작업이 시작되기
8
+ *전에* 정리를 해 줍니다: 에이전트가 모르는 것은 모른다고 인정하게 하고, 애매한 요청은 행동하기 전에
9
+ 사용자에게 명확히 묻게 하며, 긴 작업을 안정적으로 큐에 넣고, 폭주하는 프로세스가 기기를 다운시키지
10
+ 못하게 막고, 대화가 너무 길어지면 자동으로 압축합니다.
11
+
12
+ ## 설치
13
+
14
+ ```bash
15
+ pip install cluxion-agentplugin-preprocessing
16
+
17
+ # 선택: 사용자 본인의 로그인된 Chrome으로 웹 검색
18
+ pip install 'cluxion-agentplugin-preprocessing[browser]'
19
+ playwright install chromium
20
+ ```
21
+
22
+ ### Hermes Agent에서 사용
23
+
24
+ ```bash
25
+ cluxion-preprocess enable # ~/.hermes/config.yaml 에 플러그인을 추가합니다
26
+ # 그 다음 Hermes 재시작
27
+ ```
28
+
29
+ Hermes를 통해 제공되는 로컬 모델(vLLM/MLX)에서도 동일하게 동작합니다.
30
+
31
+ ## 기능
32
+
33
+ 활성화하면 에이전트가 아래 도구들을 얻고, 자동으로 호출합니다.
34
+
35
+ - **정직함과 명확화** — 에이전트가 추측하기 전에 먼저 묻고, 근거를 댈 수 없는 답을 지어내지 않습니다.
36
+ - **작업 큐** — 긴 작업을 하나의 프롬프트에 넘치게 담는 대신 추적 가능한 세그먼트로 분할합니다.
37
+ - **자원 가드** — 폭주 프로세스가 RAM을 모두 잡아먹지 못하게 막는 가벼운 감시기. Hermes 세션마다
38
+ 자동으로 시작됩니다.
39
+ - **컨텍스트 압축** — 대화가 모델 컨텍스트의 약 70%를 넘으면, 의도와 최근 대화를 보존하며 압축합니다.
40
+ - **내 Chrome으로 웹 검색** — 본인의 로그인된 브라우저 세션으로 Google / Naver / Perplexity / 사내
41
+ 페이지를 검색합니다(위의 `[browser]` extra 필요).
42
+
43
+ ## 문제 해결
44
+
45
+ | 증상 | 해결 |
46
+ |---|---|
47
+ | `playwright_not_installed` | `pip install 'cluxion-agentplugin-preprocessing[browser]' && playwright install chromium` |
48
+ | Hermes에 도구가 안 보임 | `cluxion-preprocess enable` 실행 후 Hermes 재시작 |
49
+
50
+ ## 라이선스
51
+
52
+ Apache-2.0
53
+
54
+ ============ English ==========
55
+
56
+ # cluxion-agentplugin-preprocessing
57
+
58
+ A preprocessing plugin for AI coding agents (Hermes Agent, Claude Code, Codex). It tidies
59
+ things up *before* work starts: it makes the agent admit when it doesn't know, asks you to
60
+ clarify vague requests before acting, queues long tasks reliably, keeps runaway processes
61
+ from taking down your machine, and auto-compresses the conversation when it grows too long.
62
+
63
+ ## Install
64
+
65
+ ```bash
66
+ pip install cluxion-agentplugin-preprocessing
67
+
68
+ # optional: web search through your own logged-in Chrome
69
+ pip install 'cluxion-agentplugin-preprocessing[browser]'
70
+ playwright install chromium
71
+ ```
72
+
73
+ ### Use with Hermes Agent
74
+
75
+ ```bash
76
+ cluxion-preprocess enable # adds the plugin to ~/.hermes/config.yaml
77
+ # then restart Hermes
78
+ ```
79
+
80
+ The tools also work with local models (vLLM/MLX) served through Hermes.
81
+
82
+ ## What you get
83
+
84
+ Once enabled, your agent gains these tools and calls them automatically:
85
+
86
+ - **Honesty & clarification** — the agent asks before guessing and won't fake an answer it
87
+ can't back up.
88
+ - **Work queue** — long tasks are split into tracked segments instead of overflowing a
89
+ single prompt.
90
+ - **Resource guard** — a lightweight watcher that stops runaway processes from eating all
91
+ your RAM. It starts automatically with each Hermes session.
92
+ - **Context compression** — shrinks the conversation once it passes ~70% of the model's
93
+ window, keeping your intent and recent turns.
94
+ - **Web search via your Chrome** — searches Google / Naver / Perplexity / internal pages
95
+ through your own logged-in browser session (needs the `[browser]` extra above).
96
+
97
+ ## Troubleshooting
98
+
99
+ | Problem | Fix |
100
+ |---|---|
101
+ | `playwright_not_installed` | `pip install 'cluxion-agentplugin-preprocessing[browser]' && playwright install chromium` |
102
+ | Tools don't appear in Hermes | run `cluxion-preprocess enable`, then restart Hermes |
103
+
104
+ ## License
105
+
106
+ Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "cluxion-agentplugin-preprocessing"
7
- version = "0.3.1"
7
+ version = "0.3.2"
8
8
  description = "Universal agent plugin for Cluxion preprocessing, honesty contracts, clarification, Rust work queue, and resource-aware harness handoff."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -2,6 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- __version__ = "0.3.1"
5
+ __version__ = "0.3.2"
6
6
 
7
7
  __all__ = ["__version__"]
@@ -51,23 +51,27 @@ def post_tool_call(**_: Any) -> None:
51
51
  let the existing owned-only fail-closed enforcement path terminate
52
52
  candidates.
53
53
  """
54
- global _last_watch_at
54
+ global _last_warning_at, _last_watch_at
55
55
 
56
56
  now = time.monotonic()
57
- with _lock:
58
- if _last_watch_at is not None and now - _last_watch_at < _watch_interval_seconds():
59
- return
60
- _last_watch_at = now
61
-
62
57
  try:
63
- result = guard_bridge.auto_enforce([os.getpid()], dry_run=not _auto_apply_enabled())
58
+ with _lock:
59
+ if _last_watch_at is not None and now - _last_watch_at < _watch_interval_seconds():
60
+ return
61
+ _last_watch_at = now
62
+ result = guard_bridge.auto_enforce([os.getpid()], dry_run=not _auto_apply_enabled())
63
+ should_warn = (
64
+ bool(result.get("triggered", False))
65
+ and bool(result.get("dry_run", True))
66
+ and (_last_warning_at is None or now - _last_warning_at >= WARNING_INTERVAL_SECONDS)
67
+ )
68
+ if should_warn:
69
+ _last_warning_at = now
64
70
  except Exception as exc:
65
71
  _warn(f"cluxion guard watch failed: {exc}")
66
72
  return
67
- if not result.get("triggered", False) or not result.get("dry_run", True):
68
- return
69
-
70
- _warn_triggered(result, now)
73
+ if should_warn:
74
+ _warn_triggered(result)
71
75
 
72
76
 
73
77
  def _autostart_enabled() -> bool:
@@ -88,14 +92,7 @@ def _watch_interval_seconds() -> float:
88
92
  return DEFAULT_WATCH_INTERVAL_SECONDS
89
93
 
90
94
 
91
- def _warn_triggered(result: dict[str, Any], now: float) -> None:
92
- global _last_warning_at
93
-
94
- with _lock:
95
- if _last_warning_at is not None and now - _last_warning_at < WARNING_INTERVAL_SECONDS:
96
- return
97
- _last_warning_at = now
98
-
95
+ def _warn_triggered(result: dict[str, Any]) -> None:
99
96
  pids = [str(entry.get("pid")) for entry in result.get("candidates", []) if isinstance(entry, dict)]
100
97
  reasons = [str(reason) for reason in result.get("trigger_reasons", [])]
101
98
  _warn(
@@ -53,6 +53,11 @@ PLAN_SCHEMA = {
53
53
  "expected_ram_mb": {"type": "integer", "minimum": 0, "default": 0},
54
54
  "context_tokens": {"type": "integer", "minimum": 0, "default": 0},
55
55
  "cwd": {"type": "string", "default": ""},
56
+ "clarification_answers": {
57
+ "type": "string",
58
+ "default": "",
59
+ "description": "Answers that resolve a prior clarification gate; required to enqueue an ambiguous or large task.",
60
+ },
56
61
  },
57
62
  "required": ["prompt"],
58
63
  },
@@ -25,7 +25,7 @@ def work_item_from_adapter_payload(payload: Mapping[str, object], *, default_sur
25
25
  model_route=str(payload.get("model_route", "host/default")),
26
26
  expected_ram_mb=max(0, int(payload.get("expected_ram_mb", 0))),
27
27
  context_tokens=max(0, int(payload.get("context_tokens", 0))),
28
- metadata=_metadata(payload.get("metadata"), payload.get("cwd")),
28
+ metadata=_metadata(payload.get("metadata"), payload.get("cwd"), payload.get("clarification_answers")),
29
29
  )
30
30
 
31
31
 
@@ -70,12 +70,18 @@ def _priority(value: object) -> WorkPriority:
70
70
  return WorkPriority[str(value).upper()]
71
71
 
72
72
 
73
- def _metadata(value: object, cwd: object) -> dict[str, str]:
73
+ def _metadata(value: object, cwd: object, clarification_answers: object = None) -> dict[str, str]:
74
74
  metadata: dict[str, str] = {}
75
75
  if isinstance(value, dict):
76
76
  metadata.update({str(key): str(val) for key, val in value.items()})
77
77
  if cwd is not None and cwd != "":
78
78
  metadata["cwd"] = str(cwd)
79
+ # Top-level clarification_answers is the documented way the host answers a
80
+ # clarification gate; without merging it here the gate stays blocked and the
81
+ # work queue never engages, even for very long prompts. A nested
82
+ # metadata.clarification_answers (if present) is not overwritten by an empty top-level value.
83
+ if clarification_answers is not None and str(clarification_answers) != "":
84
+ metadata["clarification_answers"] = str(clarification_answers)
79
85
  return metadata
80
86
 
81
87
 
@@ -10,6 +10,7 @@ from __future__ import annotations
10
10
  import atexit
11
11
  import contextlib
12
12
  import os
13
+ import signal
13
14
  import time
14
15
  from pathlib import Path
15
16
  from typing import TYPE_CHECKING, Any
@@ -400,7 +401,15 @@ def _close_session() -> None:
400
401
  _session["mode"] = None
401
402
 
402
403
 
404
+ def _handle_sigterm(signum: int, _frame: object) -> None:
405
+ # SIGKILL is uncatchable; SIGTERM cleanup is best-effort before exit.
406
+ _close_session()
407
+ raise SystemExit(128 + signum)
408
+
409
+
403
410
  atexit.register(_close_session)
411
+ with contextlib.suppress(AttributeError, OSError, ValueError):
412
+ signal.signal(signal.SIGTERM, _handle_sigterm)
404
413
 
405
414
 
406
415
  __all__ = [
@@ -50,6 +50,23 @@ def test_metadata_merges_cwd() -> None:
50
50
  assert item.metadata == {"repo": "demo", "cwd": "/tmp/project"}
51
51
 
52
52
 
53
+ def test_top_level_clarification_answers_reaches_metadata() -> None:
54
+ # Regression: the adapter dropped a top-level clarification_answers field, so
55
+ # the clarification gate stayed blocked and the work queue never engaged even
56
+ # for very long prompts. It must reach WorkItem.metadata.
57
+ item = work_item_from_adapter_payload(
58
+ {"prompt": "x", "clarification_answers": "fix src/app.py in order", "cwd": "/tmp/p"},
59
+ default_surface=AgentSurface.HERMES,
60
+ )
61
+ assert item.metadata["clarification_answers"] == "fix src/app.py in order"
62
+ # An empty top-level value must not clobber a nested metadata answer.
63
+ nested = work_item_from_adapter_payload(
64
+ {"prompt": "x", "metadata": {"clarification_answers": "nested"}, "clarification_answers": ""},
65
+ default_surface=AgentSurface.HERMES,
66
+ )
67
+ assert nested.metadata["clarification_answers"] == "nested"
68
+
69
+
53
70
  def test_negative_budgets_clamped_to_zero() -> None:
54
71
  item = work_item_from_adapter_payload(
55
72
  {"prompt": "x", "expected_ram_mb": -512, "context_tokens": -10},
@@ -1,125 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: cluxion-agentplugin-preprocessing
3
- Version: 0.3.1
4
- Summary: Universal agent plugin for Cluxion preprocessing, honesty contracts, clarification, Rust work queue, and resource-aware harness handoff.
5
- Project-URL: Homepage, https://github.com/cluxion/cluxion-Agentplugin-preprocessing
6
- Project-URL: Repository, https://github.com/cluxion/cluxion-Agentplugin-preprocessing
7
- Project-URL: Issues, https://github.com/cluxion/cluxion-Agentplugin-preprocessing/issues
8
- Author-email: cluxion <algocean1204@users.noreply.github.com>
9
- License-Expression: Apache-2.0
10
- License-File: LICENSE
11
- Keywords: ai-agent,claude-code,cluxion,codex,hermes-agent,plugin,preprocessing
12
- Classifier: Development Status :: 3 - Alpha
13
- Classifier: Environment :: Plugins
14
- Classifier: Intended Audience :: Developers
15
- Classifier: License :: OSI Approved :: Apache Software License
16
- Classifier: Programming Language :: Python :: 3
17
- Classifier: Programming Language :: Python :: 3.11
18
- Classifier: Programming Language :: Python :: 3.12
19
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
- Requires-Python: >=3.11
21
- Requires-Dist: psutil>=5.9
22
- Requires-Dist: pyyaml>=6.0
23
- Provides-Extra: browser
24
- Requires-Dist: playwright>=1.49; extra == 'browser'
25
- Provides-Extra: dev
26
- Requires-Dist: build>=1.2; extra == 'dev'
27
- Requires-Dist: pytest>=8.0; extra == 'dev'
28
- Requires-Dist: ruff>=0.8; extra == 'dev'
29
- Requires-Dist: twine>=6.0; extra == 'dev'
30
- Requires-Dist: wheel>=0.45; extra == 'dev'
31
- Description-Content-Type: text/markdown
32
-
33
- # cluxion-Agentplugin-preprocessing
34
-
35
- 범용 에이전트 **전처리 플러그인** — **Hermes, Claude Code, Codex, Grok Build**에서 동일 core로 동작합니다.
36
-
37
- **Repository:** https://github.com/cluxion/cluxion-Agentplugin-preprocessing
38
-
39
- ## 한 줄 요약
40
-
41
- 작업 시작 전에 **방향·정직함·큐**를 정리합니다. **연결된 AI**가 `cluxion_plan` 등 도구를 호출하고, JSON 계약(`answer_policy`, `host_execution`)에 따라 응답합니다. 플러그인은 추가 LLM 호출 없이 결정론적 plan만 반환합니다.
42
-
43
- ## 범용 에이전트 + Rust-First
44
-
45
- | 계층 | 구현 |
46
- |------|------|
47
- | **Rust** (`cluxion-queue`) | SQLite 작업큐, atomic dispatch |
48
- | **Python** (`cluxion_runtime`, adapter) | harness plan, 전처리, CLI |
49
- | **Agent adapter** | `adapters/` — Hermes plugin, Claude skill, Codex snippet |
50
-
51
- 내부 hot path는 **Rust**. Python은 등록·JSON bridge·fallback입니다.
52
-
53
- ## 이 플러그인의 역할
54
-
55
- - **정직함**: context 부족 시 모른다고 답하도록 `answer_policy` 생성
56
- - **명확화**: 의도가 애매하면 큐 진입 전 질문 (`needs_clarification`)
57
- - **작업큐**: 긴 입력을 segment로 분할, checksum 보존
58
- - **리소스 admission**: RAM/CPU 압력에 따른 실행 허용 (결정론적)
59
-
60
- **모델·OAuth·provider는 host agent 소유.** Cluxion은 plan·게이트·큐 메타데이터만 반환합니다.
61
-
62
- ## 연결된 AI가 하는 일
63
-
64
- | 단계 | 동작 |
65
- |------|------|
66
- | 요청 수신 | `cluxion_plan` 또는 `cluxion-runtime plan` |
67
- | 명확화 필요 | `clarification.questions`로 사용자에게 질문 |
68
- | queued 모드 | `cluxion_queue_next` → 처리 → `cluxion_queue_record` → `cluxion_queue_brief` |
69
- | 응답 | `answer_policy.required_checks` 준수 |
70
-
71
- ## 설계 요약
72
-
73
- ```
74
- User prompt → cluxion_plan → [clarification?] → preprocessing mode
75
- → answer_policy + host_execution
76
- → (queued) queue_next/record/brief
77
- ```
78
-
79
- **설계 원칙**
80
-
81
- 1. **추가 AI preflight 없음** — 결정론적 plan
82
- 2. 짧은 일반 질문은 `simple_answer` fast path
83
- 3. 불확실 시 fake success 금지 — `needs_clarification`, `unknown_after_check`
84
- 4. **opt-in** — 사용자 동의 없이 권한 확대 없음
85
-
86
- ## 빠른 시작
87
-
88
- ```bash
89
- pip install cluxion-agentplugin-preprocessing
90
- cluxion-preprocess check
91
- cluxion-preprocess enable # Hermes
92
- ```
93
-
94
- ```bash
95
- cluxion-runtime plan --surface hermes --prompt "작업 설명"
96
- ```
97
-
98
- ## 도구 (`cluxion` toolset, 10 tools)
99
-
100
- | Tool | 설명 |
101
- |------|------|
102
- | `cluxion_plan` | 전처리·방향·큐·리소스 계획 |
103
- | `cluxion_clarify` | 명확화 질문 목록 |
104
- | `cluxion_bootstrap` | 로컬 runtime 의존성 설치/업그레이드 (예: vllm-mlx) |
105
- | `cluxion_serve_local` | Cluxion-managed vLLM-MLX 로컬 endpoint 준비/시작 |
106
- | `cluxion_hermes_config` | 로컬 OpenAI-compatible endpoint용 Hermes provider config |
107
- | `cluxion_queue_next` / `record` / `brief` | segment 큐 |
108
- | `cluxion_context_compress` | context 사용률 초과 시 결정론적 압축 (pinned/recent 보존) |
109
- | `cluxion_guard` | 실시간 리소스 guard (`status`/`start`/`stop`/`enforce`/`auto-enforce`) |
110
-
111
- Hermes에서는 `on_session_start` hook이 guard daemon을 자동 시작합니다. `CLUXION_GUARD_AUTOSTART=0` 또는 `false`로 끌 수 있고, `post_tool_call` hook은 기본 30초마다 report-only `auto_enforce(dry_run=True)`를 실행합니다. 실제 적용은 `CLUXION_GUARD_AUTO_APPLY=1` 또는 `true`일 때만 켜집니다.
112
-
113
- ## 문서
114
-
115
- - [Docs/README.md](Docs/README.md) — **처음 읽는 분** + 목차
116
- - [Docs/architecture.md](Docs/architecture.md)
117
- - [Docs/design.md](Docs/design.md)
118
- - [Docs/installation.md](Docs/installation.md)
119
- - [Docs/tools.md](Docs/tools.md)
120
- - [Docs/agent-surfaces.md](Docs/agent-surfaces.md)
121
- - [Docs/rust-architecture.md](Docs/rust-architecture.md)
122
-
123
- ## License
124
-
125
- Apache-2.0
@@ -1,93 +0,0 @@
1
- # cluxion-Agentplugin-preprocessing
2
-
3
- 범용 에이전트 **전처리 플러그인** — **Hermes, Claude Code, Codex, Grok Build**에서 동일 core로 동작합니다.
4
-
5
- **Repository:** https://github.com/cluxion/cluxion-Agentplugin-preprocessing
6
-
7
- ## 한 줄 요약
8
-
9
- 작업 시작 전에 **방향·정직함·큐**를 정리합니다. **연결된 AI**가 `cluxion_plan` 등 도구를 호출하고, JSON 계약(`answer_policy`, `host_execution`)에 따라 응답합니다. 플러그인은 추가 LLM 호출 없이 결정론적 plan만 반환합니다.
10
-
11
- ## 범용 에이전트 + Rust-First
12
-
13
- | 계층 | 구현 |
14
- |------|------|
15
- | **Rust** (`cluxion-queue`) | SQLite 작업큐, atomic dispatch |
16
- | **Python** (`cluxion_runtime`, adapter) | harness plan, 전처리, CLI |
17
- | **Agent adapter** | `adapters/` — Hermes plugin, Claude skill, Codex snippet |
18
-
19
- 내부 hot path는 **Rust**. Python은 등록·JSON bridge·fallback입니다.
20
-
21
- ## 이 플러그인의 역할
22
-
23
- - **정직함**: context 부족 시 모른다고 답하도록 `answer_policy` 생성
24
- - **명확화**: 의도가 애매하면 큐 진입 전 질문 (`needs_clarification`)
25
- - **작업큐**: 긴 입력을 segment로 분할, checksum 보존
26
- - **리소스 admission**: RAM/CPU 압력에 따른 실행 허용 (결정론적)
27
-
28
- **모델·OAuth·provider는 host agent 소유.** Cluxion은 plan·게이트·큐 메타데이터만 반환합니다.
29
-
30
- ## 연결된 AI가 하는 일
31
-
32
- | 단계 | 동작 |
33
- |------|------|
34
- | 요청 수신 | `cluxion_plan` 또는 `cluxion-runtime plan` |
35
- | 명확화 필요 | `clarification.questions`로 사용자에게 질문 |
36
- | queued 모드 | `cluxion_queue_next` → 처리 → `cluxion_queue_record` → `cluxion_queue_brief` |
37
- | 응답 | `answer_policy.required_checks` 준수 |
38
-
39
- ## 설계 요약
40
-
41
- ```
42
- User prompt → cluxion_plan → [clarification?] → preprocessing mode
43
- → answer_policy + host_execution
44
- → (queued) queue_next/record/brief
45
- ```
46
-
47
- **설계 원칙**
48
-
49
- 1. **추가 AI preflight 없음** — 결정론적 plan
50
- 2. 짧은 일반 질문은 `simple_answer` fast path
51
- 3. 불확실 시 fake success 금지 — `needs_clarification`, `unknown_after_check`
52
- 4. **opt-in** — 사용자 동의 없이 권한 확대 없음
53
-
54
- ## 빠른 시작
55
-
56
- ```bash
57
- pip install cluxion-agentplugin-preprocessing
58
- cluxion-preprocess check
59
- cluxion-preprocess enable # Hermes
60
- ```
61
-
62
- ```bash
63
- cluxion-runtime plan --surface hermes --prompt "작업 설명"
64
- ```
65
-
66
- ## 도구 (`cluxion` toolset, 10 tools)
67
-
68
- | Tool | 설명 |
69
- |------|------|
70
- | `cluxion_plan` | 전처리·방향·큐·리소스 계획 |
71
- | `cluxion_clarify` | 명확화 질문 목록 |
72
- | `cluxion_bootstrap` | 로컬 runtime 의존성 설치/업그레이드 (예: vllm-mlx) |
73
- | `cluxion_serve_local` | Cluxion-managed vLLM-MLX 로컬 endpoint 준비/시작 |
74
- | `cluxion_hermes_config` | 로컬 OpenAI-compatible endpoint용 Hermes provider config |
75
- | `cluxion_queue_next` / `record` / `brief` | segment 큐 |
76
- | `cluxion_context_compress` | context 사용률 초과 시 결정론적 압축 (pinned/recent 보존) |
77
- | `cluxion_guard` | 실시간 리소스 guard (`status`/`start`/`stop`/`enforce`/`auto-enforce`) |
78
-
79
- Hermes에서는 `on_session_start` hook이 guard daemon을 자동 시작합니다. `CLUXION_GUARD_AUTOSTART=0` 또는 `false`로 끌 수 있고, `post_tool_call` hook은 기본 30초마다 report-only `auto_enforce(dry_run=True)`를 실행합니다. 실제 적용은 `CLUXION_GUARD_AUTO_APPLY=1` 또는 `true`일 때만 켜집니다.
80
-
81
- ## 문서
82
-
83
- - [Docs/README.md](Docs/README.md) — **처음 읽는 분** + 목차
84
- - [Docs/architecture.md](Docs/architecture.md)
85
- - [Docs/design.md](Docs/design.md)
86
- - [Docs/installation.md](Docs/installation.md)
87
- - [Docs/tools.md](Docs/tools.md)
88
- - [Docs/agent-surfaces.md](Docs/agent-surfaces.md)
89
- - [Docs/rust-architecture.md](Docs/rust-architecture.md)
90
-
91
- ## License
92
-
93
- Apache-2.0