agentnova 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 (93) hide show
  1. {agentnova-0.3.1 → agentnova-0.3.2}/PKG-INFO +3 -5
  2. {agentnova-0.3.1 → agentnova-0.3.2}/README.md +269 -271
  3. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/agent.py +1 -1
  4. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/backends/base.py +4 -4
  5. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/backends/bitnet.py +1 -1
  6. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/cli.py +229 -92
  7. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/config.py +2 -2
  8. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/core/helpers.py +73 -11
  9. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/core/model_config.py +2 -2
  10. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/core/prompts.py +64 -29
  11. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/core/tool_parse.py +9 -0
  12. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/examples/01_quick_diagnostic.py +23 -6
  13. agentnova-0.3.2/agentnova/examples/02_tool_test.py +915 -0
  14. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/examples/03_reasoning_test.py +3 -0
  15. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/examples/04_gsm8k_benchmark.py +4 -1
  16. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/examples/05_common_sense.py +3 -0
  17. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/examples/06_causal_reasoning.py +3 -0
  18. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/examples/07_logical_deduction.py +3 -0
  19. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/examples/08_reading_comprehension.py +3 -0
  20. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/examples/09_general_knowledge.py +3 -0
  21. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/examples/10_implicit_reasoning.py +3 -0
  22. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/examples/11_analogical_reasoning.py +3 -0
  23. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/model_discovery.py +140 -0
  24. agentnova-0.3.2/agentnova/souls/nova-helper/IDENTITY.md +36 -0
  25. agentnova-0.3.2/agentnova/souls/nova-helper/SOUL.md +51 -0
  26. agentnova-0.3.2/agentnova/souls/nova-helper/STYLE.md +49 -0
  27. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/souls/nova-helper/soul.json +5 -5
  28. agentnova-0.3.2/agentnova/tools/builtins.py +633 -0
  29. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova.egg-info/PKG-INFO +3 -5
  30. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova.egg-info/SOURCES.txt +0 -1
  31. {agentnova-0.3.1 → agentnova-0.3.2}/pyproject.toml +1 -1
  32. agentnova-0.3.1/agentnova/examples/02_tool_test.py +0 -283
  33. agentnova-0.3.1/agentnova/soul/__init__.py +0 -97
  34. agentnova-0.3.1/agentnova/souls/nova-helper/IDENTITY.md +0 -33
  35. agentnova-0.3.1/agentnova/souls/nova-helper/SOUL.md +0 -62
  36. agentnova-0.3.1/agentnova/souls/nova-helper/STYLE.md +0 -75
  37. agentnova-0.3.1/agentnova/tools/builtins.py +0 -412
  38. {agentnova-0.3.1 → agentnova-0.3.2}/LICENSE +0 -0
  39. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/__init__.py +0 -0
  40. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/__main__.py +0 -0
  41. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/acp_plugin.py +0 -0
  42. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/agent_mode.py +0 -0
  43. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/backends/__init__.py +0 -0
  44. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/backends/ollama.py +0 -0
  45. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/core/__init__.py +0 -0
  46. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/core/args_normal.py +0 -0
  47. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/core/math_prompts.py +0 -0
  48. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/core/memory.py +0 -0
  49. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/core/model_family_config.py +0 -0
  50. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/core/models.py +0 -0
  51. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/core/types.py +0 -0
  52. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/examples/00_basic_agent.py +0 -0
  53. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/examples/__init__.py +0 -0
  54. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/orchestrator.py +0 -0
  55. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/orchestrator_enhanced.py +0 -0
  56. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/py.typed +0 -0
  57. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/shared_args.py +0 -0
  58. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/__init__.py +0 -0
  59. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/acp/SKILL.md +0 -0
  60. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/datetime/SKILL.md +0 -0
  61. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/loader.py +0 -0
  62. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/SKILL.md +0 -0
  63. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/__init__.py +0 -0
  64. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/aggregate_benchmark.py +0 -0
  65. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/generate_report.py +0 -0
  66. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/improve_description.py +0 -0
  67. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/init_skill.py +0 -0
  68. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/package_skill.py +0 -0
  69. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/quick_validate.py +0 -0
  70. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/run_eval.py +0 -0
  71. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/run_loop.py +0 -0
  72. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/security_scan.py +0 -0
  73. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/test_package_skill.py +0 -0
  74. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/test_quick_validate.py +0 -0
  75. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/utils.py +0 -0
  76. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/validate.py +0 -0
  77. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/skills/web-search/SKILL.md +0 -0
  78. /agentnova-0.3.1/agentnova/soul/___init___.py → /agentnova-0.3.2/agentnova/soul/__init__.py +0 -0
  79. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/soul/loader.py +0 -0
  80. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/soul/types.py +0 -0
  81. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/tools/__init__.py +0 -0
  82. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/tools/registry.py +0 -0
  83. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova/tools/sandboxed_repl.py +0 -0
  84. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova.egg-info/dependency_links.txt +0 -0
  85. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova.egg-info/entry_points.txt +0 -0
  86. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova.egg-info/requires.txt +0 -0
  87. {agentnova-0.3.1 → agentnova-0.3.2}/agentnova.egg-info/top_level.txt +0 -0
  88. {agentnova-0.3.1 → agentnova-0.3.2}/localclaw/__init__.py +0 -0
  89. {agentnova-0.3.1 → agentnova-0.3.2}/localclaw-redirect/localclaw/__init__.py +0 -0
  90. {agentnova-0.3.1 → agentnova-0.3.2}/setup.cfg +0 -0
  91. {agentnova-0.3.1 → agentnova-0.3.2}/tests/test_acp_integration.py +0 -0
  92. {agentnova-0.3.1 → agentnova-0.3.2}/tests/test_acp_subagents.py +0 -0
  93. {agentnova-0.3.1 → agentnova-0.3.2}/tests/test_agent.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentnova
3
- Version: 0.3.1
3
+ Version: 0.3.2
4
4
  Summary: ⚛️ AgentNova - A minimal, hackable agentic framework for local LLM inference
5
5
  Author-email: VTSTech <veritas@vts-tech.org>
6
6
  Maintainer-email: VTSTech <veritas@vts-tech.org>
@@ -32,7 +32,7 @@ Requires-Dist: black>=23.0; extra == "dev"
32
32
  Requires-Dist: ruff>=0.1.0; extra == "dev"
33
33
  Dynamic: license-file
34
34
 
35
- # ⚛️ AgentNova R03.1
35
+ # ⚛️ AgentNova R03.2
36
36
 
37
37
  **Status: Alpha**
38
38
 
@@ -49,9 +49,7 @@ Inspired by the architecture of OpenClaw, rebuilt from scratch for local-first o
49
49
 
50
50
  [![License](https://img.shields.io/badge/License-MIT-blue)](#license) [![Go to Python website](https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2FVTSTech%2FAgentNova%2Frefs%2Fheads%2Fmain%2Fpyproject.toml&query=project.requires-python&label=python&logo=python&logoColor=white)](https://python.org)
51
51
 
52
- <img width="801" height="603" alt="image" src="https://github.com/user-attachments/assets/457acc38-231f-4d75-aec6-fa4897fbbb88" />
53
-
54
- ---
52
+ <img width="1102" height="960" alt="image" src="https://github.com/user-attachments/assets/2a5fe9b4-93df-46a0-9383-9e01e0c0105d" />
55
53
 
56
54
  ## 📚 Documentation
57
55
 
@@ -1,271 +1,269 @@
1
- # ⚛️ AgentNova R03.1
2
-
3
- **Status: Alpha**
4
-
5
- A minimal, hackable agentic framework engineered to run **entirely locally** with [Ollama](https://ollama.com) or [BitNet](https://github.com/microsoft/BitNet).
6
-
7
- Inspired by the architecture of OpenClaw, rebuilt from scratch for local-first operation.
8
-
9
- **Written by [VTSTech](https://www.vts-tech.org)** · [GitHub](https://github.com/VTSTech/AgentNova)
10
-
11
- [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/VTSTech/AgentNova/blob/main/AgentNova.ipynb)
12
- [![GitHub commits](https://badgen.net/github/commits/VTSTech/AgentNova)](https://GitHub.com/VTSTech/AgentNova/commit/) [![GitHub latest commit](https://badgen.net/github/last-commit/VTSTech/AgentNova)](https://GitHub.com/VTSTech/AgentNova/commit/)
13
-
14
- [![pip - agentnova](https://img.shields.io/badge/pip-agentnova-2ea44f?logo=PyPi)](https://pypi.org/project/agentnova/) [![PyPI version fury.io](https://badge.fury.io/py/agentnova.svg)](https://pypi.org/project/agentnova/) [![PyPI download month](https://img.shields.io/pypi/dm/agentnova.svg)](https://pypi.org/project/agentnova/) [![PyPI download day](https://img.shields.io/pypi/dd/agentnova.svg)](https://pypi.org/project/agentnova/)
15
-
16
- [![License](https://img.shields.io/badge/License-MIT-blue)](#license) [![Go to Python website](https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2FVTSTech%2FAgentNova%2Frefs%2Fheads%2Fmain%2Fpyproject.toml&query=project.requires-python&label=python&logo=python&logoColor=white)](https://python.org)
17
-
18
- <img width="801" height="603" alt="image" src="https://github.com/user-attachments/assets/457acc38-231f-4d75-aec6-fa4897fbbb88" />
19
-
20
- ---
21
-
22
- ## 📚 Documentation
23
-
24
- | Document | Description |
25
- |----------|-------------|
26
- | [Architecture.md](https://github.com/VTSTech/AgentNova/blob/main/Architecture.md) | Technical documentation for developers (directory structure, core design, orchestrator modes) |
27
- | [CHANGELOG.md](https://github.com/VTSTech/AgentNova/blob/main/CHANGELOG.md) | Version history and release notes (includes LocalClaw history) |
28
- | [TESTS.md](https://github.com/VTSTech/AgentNova/blob/main/TESTS.md) | Benchmark results, model recommendations, and testing guide |
29
-
30
- ## Features
31
-
32
- - **Zero dependencies** — Uses Python stdlib only (urllib for HTTP)
33
- - **Ollama + BitNet backends** — Switch with `--backend` flag
34
- - **Three-tier tool support** — Native, ReAct, or none (auto-detected)
35
- - **Small model optimized** — Fuzzy matching, argument normalization
36
- - **Built-in security** — Path validation, command blocklist, SSRF protection
37
- - **Multi-agent orchestration** — Router, pipeline, and parallel modes
38
-
39
- ## Installation
40
-
41
- ```bash
42
- # From source
43
- git clone https://github.com/VTSTech/AgentNova.git
44
- cd AgentNova
45
- pip install -e .
46
-
47
- # Or from PyPI (when published)
48
- pip install agentnova
49
- ```
50
-
51
- ## Quick Start
52
-
53
- ### CLI Usage
54
-
55
- ```bash
56
- # Run a single prompt
57
- agentnova run "What is 15 * 8?" --tools calculator
58
-
59
- # Interactive chat
60
- agentnova chat -m qwen2.5:0.5b --tools calculator,shell
61
-
62
- # Autonomous agent mode
63
- agentnova agent -m qwen2.5:7b --tools calculator,shell,write_file
64
-
65
- # List available models
66
- agentnova models
67
-
68
- # List available tools
69
- agentnova tools
70
- ```
71
-
72
- ### Python API
73
-
74
- ```python
75
- from agentnova import Agent
76
- from agentnova.tools import make_builtin_registry
77
-
78
- # Create tools
79
- tools = make_builtin_registry().subset(["calculator", "shell"])
80
-
81
- # Create agent
82
- agent = Agent(
83
- model="qwen2.5:0.5b",
84
- tools=tools,
85
- backend="ollama",
86
- )
87
-
88
- # Run
89
- result = agent.run("What is 15 * 8?")
90
- print(result.final_answer)
91
- print(f"Completed in {result.total_ms:.0f}ms")
92
- ```
93
-
94
- ### Multi-Agent Orchestration
95
-
96
- ```python
97
- from agentnova import Agent, Orchestrator, AgentCard
98
-
99
- orchestrator = Orchestrator(mode="router")
100
-
101
- # Register specialized agents
102
- orchestrator.register(AgentCard(
103
- name="math_agent",
104
- description="Handles mathematical calculations",
105
- capabilities=["calculate", "math", "compute"],
106
- tools=["calculator"],
107
- ))
108
-
109
- orchestrator.register(AgentCard(
110
- name="file_agent",
111
- description="Handles file operations",
112
- capabilities=["read", "write", "file"],
113
- tools=["read_file", "write_file"],
114
- ))
115
-
116
- # Route tasks to appropriate agent
117
- result = orchestrator.run("Calculate 15 * 8 and save to file")
118
- ```
119
-
120
- ## Tool Support Levels
121
-
122
- AgentNova supports three levels of tool use:
123
-
124
- 1. **Native** — Models with built-in function calling (qwen2.5, llama3.1+, mistral, granite, functiongemma)
125
- 2. **ReAct** — Text-based tool use via reasoning prompts (qwen2.5-coder, qwen3)
126
- 3. **None** — Pure reasoning without tools
127
-
128
- Tool support is auto-detected by running `agentnova models --tool-support`. Results are cached in `~/.cache/agentnova/tool_support.json`.
129
-
130
- ```bash
131
- # Test and cache tool support for all models
132
- agentnova models --tool-support
133
-
134
- # Re-test (ignore cache)
135
- agentnova models --tool-support --no-cache
136
- ```
137
-
138
- You can also force ReAct mode:
139
-
140
- ```python
141
- agent = Agent(model="qwen2.5:0.5b", force_react=True)
142
- ```
143
-
144
- ## Model Families
145
-
146
- Configured model families with optimized prompts:
147
-
148
- - **qwen2.5** — Native tool support, excellent performance
149
- - **llama3.1/3.2/3.3** — Native tool support
150
- - **mistral/mixtral** — Native tool support
151
- - **gemma2/gemma3** — ReAct mode, special prompting
152
- - **granite/granitemoe** — Native tool support
153
- - **phi3** — Native tool support
154
- - **deepseek** — Native with `<think/>` tag handling
155
-
156
- ## Security Features
157
-
158
- Built-in security for safe operation:
159
-
160
- - **Command blocklist** — Blocks dangerous shell commands (rm, sudo, etc.)
161
- - **Path validation** — Prevents access to sensitive directories
162
- - **SSRF protection** — Blocks requests to local/internal URLs
163
- - **Injection detection** — Detects shell injection patterns
164
-
165
- ## Configuration
166
-
167
- Environment variables:
168
-
169
- ```bash
170
- # Backend URLs
171
- OLLAMA_BASE_URL=https://your-ollama-server.com # Default: http://localhost:11434
172
- BITNET_BASE_URL=http://localhost:8765 # BitNet server URL
173
- BITNET_TUNNEL=https://your-tunnel.com # Alternative BitNet URL
174
- ACP_BASE_URL=http://localhost:8766 # ACP server URL
175
-
176
- # Agent settings
177
- AGENTNOVA_BACKEND=ollama # Default backend: ollama or bitnet
178
- AGENTNOVA_MODEL=qwen2.5:0.5b # Default model
179
- AGENTNOVA_MAX_STEPS=10 # Maximum reasoning steps
180
- AGENTNOVA_DEBUG=false # Enable debug output
181
- ```
182
-
183
- Check current configuration:
184
- ```bash
185
- agentnova config
186
- agentnova config --urls # Show only URLs
187
- ```
188
-
189
- ## LocalClaw Redirect
190
-
191
- The `localclaw` command is provided for backward compatibility:
192
-
193
- ```bash
194
- # Both work identically
195
- localclaw run "What is 2+2?"
196
- agentnova run "What is 2+2?"
197
- ```
198
-
199
- ## Tests & Examples
200
-
201
- AgentNova includes a suite of tests for validating agent capabilities:
202
-
203
- ```bash
204
- # Basic agent test (no tools)
205
- python -m agentnova.examples.00_basic_agent
206
-
207
- # Quick 5-question diagnostic
208
- python -m agentnova.examples.01_quick_diagnostic
209
-
210
- # Tool usage tests (calculator, shell, datetime)
211
- python -m agentnova.examples.02_tool_test
212
-
213
- # Logic and reasoning tests (BBH-style)
214
- python -m agentnova.examples.03_reasoning_test
215
-
216
- # GSM8K math benchmark (50 questions)
217
- python -m agentnova.examples.04_gsm8k_benchmark
218
- ```
219
-
220
- ### Test Categories
221
-
222
- | Test | Questions | Focus |
223
- |------|-----------|-------|
224
- | Quick Diagnostic | 5 | Calculator tool, multi-step reasoning |
225
- | Tool Test | 10 | Calculator, shell, datetime tools |
226
- | Reasoning Test | 13 | Logic, deduction, patterns, spatial |
227
- | GSM8K Benchmark | 50 | Math word problems |
228
-
229
- ### Benchmark Results (Quick Diagnostic)
230
-
231
- | Model | Score | Time | Tool Support |
232
- |-------|-------|------|-------------|
233
- | functiongemma:270m | 5/5 (100%) | ~20s | native |
234
- | granite4:350m | 5/5 (100%) | ~50s | native |
235
- | qwen2.5:0.5b | 5/5 (100%) | 38s | native |
236
- | qwen2.5-coder:0.5b | 5/5 (100%) | 93s | react |
237
- | qwen3:0.6b | 5/5 (100%) | 70s | react |
238
-
239
- All tested models achieve 100% on the Quick Diagnostic. Native models are ~2x faster than ReAct models due to direct API tool calling.
240
-
241
- ## Development
242
-
243
- ```bash
244
- # Install dev dependencies
245
- pip install -e ".[dev]"
246
-
247
- # Run unit tests
248
- pytest
249
-
250
- # Format code
251
- black agentnova
252
- ruff check agentnova
253
- ```
254
-
255
- ## License
256
-
257
- MIT License - See LICENSE file for details.
258
-
259
- ## Author
260
-
261
- **VTSTech** — [https://www.vts-tech.org](https://www.vts-tech.org)
262
-
263
- ## Contributing
264
-
265
- Contributions welcome! Please read the contributing guidelines first.
266
-
267
- ## Acknowledgments
268
-
269
- - Built for local inference with [Ollama](https://ollama.ai)
270
- - Optimized for small, efficient models
271
- - Inspired by ReAct and other agentic frameworks
1
+ # ⚛️ AgentNova R03.2
2
+
3
+ **Status: Alpha**
4
+
5
+ A minimal, hackable agentic framework engineered to run **entirely locally** with [Ollama](https://ollama.com) or [BitNet](https://github.com/microsoft/BitNet).
6
+
7
+ Inspired by the architecture of OpenClaw, rebuilt from scratch for local-first operation.
8
+
9
+ **Written by [VTSTech](https://www.vts-tech.org)** · [GitHub](https://github.com/VTSTech/AgentNova)
10
+
11
+ [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/VTSTech/AgentNova/blob/main/AgentNova.ipynb)
12
+ [![GitHub commits](https://badgen.net/github/commits/VTSTech/AgentNova)](https://GitHub.com/VTSTech/AgentNova/commit/) [![GitHub latest commit](https://badgen.net/github/last-commit/VTSTech/AgentNova)](https://GitHub.com/VTSTech/AgentNova/commit/)
13
+
14
+ [![pip - agentnova](https://img.shields.io/badge/pip-agentnova-2ea44f?logo=PyPi)](https://pypi.org/project/agentnova/) [![PyPI version fury.io](https://badge.fury.io/py/agentnova.svg)](https://pypi.org/project/agentnova/) [![PyPI download month](https://img.shields.io/pypi/dm/agentnova.svg)](https://pypi.org/project/agentnova/) [![PyPI download day](https://img.shields.io/pypi/dd/agentnova.svg)](https://pypi.org/project/agentnova/)
15
+
16
+ [![License](https://img.shields.io/badge/License-MIT-blue)](#license) [![Go to Python website](https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2FVTSTech%2FAgentNova%2Frefs%2Fheads%2Fmain%2Fpyproject.toml&query=project.requires-python&label=python&logo=python&logoColor=white)](https://python.org)
17
+
18
+ <img width="1102" height="960" alt="image" src="https://github.com/user-attachments/assets/2a5fe9b4-93df-46a0-9383-9e01e0c0105d" />
19
+
20
+ ## 📚 Documentation
21
+
22
+ | Document | Description |
23
+ |----------|-------------|
24
+ | [Architecture.md](https://github.com/VTSTech/AgentNova/blob/main/Architecture.md) | Technical documentation for developers (directory structure, core design, orchestrator modes) |
25
+ | [CHANGELOG.md](https://github.com/VTSTech/AgentNova/blob/main/CHANGELOG.md) | Version history and release notes (includes LocalClaw history) |
26
+ | [TESTS.md](https://github.com/VTSTech/AgentNova/blob/main/TESTS.md) | Benchmark results, model recommendations, and testing guide |
27
+
28
+ ## Features
29
+
30
+ - **Zero dependencies** — Uses Python stdlib only (urllib for HTTP)
31
+ - **Ollama + BitNet backends** — Switch with `--backend` flag
32
+ - **Three-tier tool support** — Native, ReAct, or none (auto-detected)
33
+ - **Small model optimized** — Fuzzy matching, argument normalization
34
+ - **Built-in security** — Path validation, command blocklist, SSRF protection
35
+ - **Multi-agent orchestration** — Router, pipeline, and parallel modes
36
+
37
+ ## Installation
38
+
39
+ ```bash
40
+ # From source
41
+ git clone https://github.com/VTSTech/AgentNova.git
42
+ cd AgentNova
43
+ pip install -e .
44
+
45
+ # Or from PyPI (when published)
46
+ pip install agentnova
47
+ ```
48
+
49
+ ## Quick Start
50
+
51
+ ### CLI Usage
52
+
53
+ ```bash
54
+ # Run a single prompt
55
+ agentnova run "What is 15 * 8?" --tools calculator
56
+
57
+ # Interactive chat
58
+ agentnova chat -m qwen2.5:0.5b --tools calculator,shell
59
+
60
+ # Autonomous agent mode
61
+ agentnova agent -m qwen2.5:7b --tools calculator,shell,write_file
62
+
63
+ # List available models
64
+ agentnova models
65
+
66
+ # List available tools
67
+ agentnova tools
68
+ ```
69
+
70
+ ### Python API
71
+
72
+ ```python
73
+ from agentnova import Agent
74
+ from agentnova.tools import make_builtin_registry
75
+
76
+ # Create tools
77
+ tools = make_builtin_registry().subset(["calculator", "shell"])
78
+
79
+ # Create agent
80
+ agent = Agent(
81
+ model="qwen2.5:0.5b",
82
+ tools=tools,
83
+ backend="ollama",
84
+ )
85
+
86
+ # Run
87
+ result = agent.run("What is 15 * 8?")
88
+ print(result.final_answer)
89
+ print(f"Completed in {result.total_ms:.0f}ms")
90
+ ```
91
+
92
+ ### Multi-Agent Orchestration
93
+
94
+ ```python
95
+ from agentnova import Agent, Orchestrator, AgentCard
96
+
97
+ orchestrator = Orchestrator(mode="router")
98
+
99
+ # Register specialized agents
100
+ orchestrator.register(AgentCard(
101
+ name="math_agent",
102
+ description="Handles mathematical calculations",
103
+ capabilities=["calculate", "math", "compute"],
104
+ tools=["calculator"],
105
+ ))
106
+
107
+ orchestrator.register(AgentCard(
108
+ name="file_agent",
109
+ description="Handles file operations",
110
+ capabilities=["read", "write", "file"],
111
+ tools=["read_file", "write_file"],
112
+ ))
113
+
114
+ # Route tasks to appropriate agent
115
+ result = orchestrator.run("Calculate 15 * 8 and save to file")
116
+ ```
117
+
118
+ ## Tool Support Levels
119
+
120
+ AgentNova supports three levels of tool use:
121
+
122
+ 1. **Native** — Models with built-in function calling (qwen2.5, llama3.1+, mistral, granite, functiongemma)
123
+ 2. **ReAct** — Text-based tool use via reasoning prompts (qwen2.5-coder, qwen3)
124
+ 3. **None** — Pure reasoning without tools
125
+
126
+ Tool support is auto-detected by running `agentnova models --tool-support`. Results are cached in `~/.cache/agentnova/tool_support.json`.
127
+
128
+ ```bash
129
+ # Test and cache tool support for all models
130
+ agentnova models --tool-support
131
+
132
+ # Re-test (ignore cache)
133
+ agentnova models --tool-support --no-cache
134
+ ```
135
+
136
+ You can also force ReAct mode:
137
+
138
+ ```python
139
+ agent = Agent(model="qwen2.5:0.5b", force_react=True)
140
+ ```
141
+
142
+ ## Model Families
143
+
144
+ Configured model families with optimized prompts:
145
+
146
+ - **qwen2.5** — Native tool support, excellent performance
147
+ - **llama3.1/3.2/3.3** — Native tool support
148
+ - **mistral/mixtral** — Native tool support
149
+ - **gemma2/gemma3** — ReAct mode, special prompting
150
+ - **granite/granitemoe** — Native tool support
151
+ - **phi3** — Native tool support
152
+ - **deepseek** — Native with `<think/>` tag handling
153
+
154
+ ## Security Features
155
+
156
+ Built-in security for safe operation:
157
+
158
+ - **Command blocklist** — Blocks dangerous shell commands (rm, sudo, etc.)
159
+ - **Path validation** — Prevents access to sensitive directories
160
+ - **SSRF protection** — Blocks requests to local/internal URLs
161
+ - **Injection detection** — Detects shell injection patterns
162
+
163
+ ## Configuration
164
+
165
+ Environment variables:
166
+
167
+ ```bash
168
+ # Backend URLs
169
+ OLLAMA_BASE_URL=https://your-ollama-server.com # Default: http://localhost:11434
170
+ BITNET_BASE_URL=http://localhost:8765 # BitNet server URL
171
+ BITNET_TUNNEL=https://your-tunnel.com # Alternative BitNet URL
172
+ ACP_BASE_URL=http://localhost:8766 # ACP server URL
173
+
174
+ # Agent settings
175
+ AGENTNOVA_BACKEND=ollama # Default backend: ollama or bitnet
176
+ AGENTNOVA_MODEL=qwen2.5:0.5b # Default model
177
+ AGENTNOVA_MAX_STEPS=10 # Maximum reasoning steps
178
+ AGENTNOVA_DEBUG=false # Enable debug output
179
+ ```
180
+
181
+ Check current configuration:
182
+ ```bash
183
+ agentnova config
184
+ agentnova config --urls # Show only URLs
185
+ ```
186
+
187
+ ## LocalClaw Redirect
188
+
189
+ The `localclaw` command is provided for backward compatibility:
190
+
191
+ ```bash
192
+ # Both work identically
193
+ localclaw run "What is 2+2?"
194
+ agentnova run "What is 2+2?"
195
+ ```
196
+
197
+ ## Tests & Examples
198
+
199
+ AgentNova includes a suite of tests for validating agent capabilities:
200
+
201
+ ```bash
202
+ # Basic agent test (no tools)
203
+ python -m agentnova.examples.00_basic_agent
204
+
205
+ # Quick 5-question diagnostic
206
+ python -m agentnova.examples.01_quick_diagnostic
207
+
208
+ # Tool usage tests (calculator, shell, datetime)
209
+ python -m agentnova.examples.02_tool_test
210
+
211
+ # Logic and reasoning tests (BBH-style)
212
+ python -m agentnova.examples.03_reasoning_test
213
+
214
+ # GSM8K math benchmark (50 questions)
215
+ python -m agentnova.examples.04_gsm8k_benchmark
216
+ ```
217
+
218
+ ### Test Categories
219
+
220
+ | Test | Questions | Focus |
221
+ |------|-----------|-------|
222
+ | Quick Diagnostic | 5 | Calculator tool, multi-step reasoning |
223
+ | Tool Test | 10 | Calculator, shell, datetime tools |
224
+ | Reasoning Test | 13 | Logic, deduction, patterns, spatial |
225
+ | GSM8K Benchmark | 50 | Math word problems |
226
+
227
+ ### Benchmark Results (Quick Diagnostic)
228
+
229
+ | Model | Score | Time | Tool Support |
230
+ |-------|-------|------|-------------|
231
+ | functiongemma:270m | 5/5 (100%) | ~20s | native |
232
+ | granite4:350m | 5/5 (100%) | ~50s | native |
233
+ | qwen2.5:0.5b | 5/5 (100%) | 38s | native |
234
+ | qwen2.5-coder:0.5b | 5/5 (100%) | 93s | react |
235
+ | qwen3:0.6b | 5/5 (100%) | 70s | react |
236
+
237
+ All tested models achieve 100% on the Quick Diagnostic. Native models are ~2x faster than ReAct models due to direct API tool calling.
238
+
239
+ ## Development
240
+
241
+ ```bash
242
+ # Install dev dependencies
243
+ pip install -e ".[dev]"
244
+
245
+ # Run unit tests
246
+ pytest
247
+
248
+ # Format code
249
+ black agentnova
250
+ ruff check agentnova
251
+ ```
252
+
253
+ ## License
254
+
255
+ MIT License - See LICENSE file for details.
256
+
257
+ ## Author
258
+
259
+ **VTSTech** — [https://www.vts-tech.org](https://www.vts-tech.org)
260
+
261
+ ## Contributing
262
+
263
+ Contributions welcome! Please read the contributing guidelines first.
264
+
265
+ ## Acknowledgments
266
+
267
+ - Built for local inference with [Ollama](https://ollama.ai)
268
+ - Optimized for small, efficient models
269
+ - Inspired by ReAct and other agentic frameworks
@@ -845,7 +845,7 @@ class Agent:
845
845
  role = msg.get('role', '?')
846
846
  content = msg.get('content', '')
847
847
  tc = msg.get('tool_calls', [])
848
- content_preview = content[:1024] if content else '(empty)'
848
+ content_preview = content[:2048] if content else '(empty)'
849
849
  print(f" [MSG {i}] role={role}, content={content_preview!r}{' [has tool_calls]' if tc else ''}")
850
850
  print(f" [DEBUG] Tools: {[t.name for t in self.tools.all()] if self.tools else None}")
851
851
 
@@ -57,8 +57,8 @@ class BaseBackend(ABC):
57
57
  model: str,
58
58
  messages: list[dict],
59
59
  tools: list[Tool] | None = None,
60
- temperature: float = 0.7,
61
- max_tokens: int = 2048,
60
+ temperature: float = 0.1,
61
+ max_tokens: int = 8192,
62
62
  **kwargs,
63
63
  ) -> dict:
64
64
  """
@@ -86,8 +86,8 @@ class BaseBackend(ABC):
86
86
  model: str,
87
87
  messages: list[dict],
88
88
  tools: list[Tool] | None = None,
89
- temperature: float = 0.7,
90
- max_tokens: int = 2048,
89
+ temperature: float = 0.1,
90
+ max_tokens: int = 8192,
91
91
  **kwargs,
92
92
  ) -> Generator[str, None, None]:
93
93
  """
@@ -58,7 +58,7 @@ class BitNetBackend(BaseBackend):
58
58
  model: str,
59
59
  messages: list[dict],
60
60
  tools: list[Tool] | None = None,
61
- temperature: float = 0.7,
61
+ temperature: float = 0.1,
62
62
  max_tokens: int = 2048,
63
63
  **kwargs,
64
64
  ) -> dict: