agentnova 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.
- {agentnova-0.3.0 → agentnova-0.3.2}/PKG-INFO +3 -31
- {agentnova-0.3.0 → agentnova-0.3.2}/README.md +269 -297
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/__init__.py +28 -1
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/agent.py +85 -5
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/backends/__init__.py +9 -2
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/backends/base.py +4 -4
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/backends/bitnet.py +1 -1
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/backends/ollama.py +80 -18
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/cli.py +671 -128
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/config.py +8 -2
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/core/helpers.py +73 -11
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/core/model_config.py +2 -2
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/core/prompts.py +64 -29
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/core/tool_parse.py +9 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/examples/01_quick_diagnostic.py +23 -6
- agentnova-0.3.2/agentnova/examples/02_tool_test.py +915 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/examples/03_reasoning_test.py +15 -9
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/examples/04_gsm8k_benchmark.py +4 -1
- agentnova-0.3.2/agentnova/examples/05_common_sense.py +388 -0
- agentnova-0.3.2/agentnova/examples/06_causal_reasoning.py +369 -0
- agentnova-0.3.2/agentnova/examples/07_logical_deduction.py +360 -0
- agentnova-0.3.2/agentnova/examples/08_reading_comprehension.py +421 -0
- agentnova-0.3.2/agentnova/examples/09_general_knowledge.py +380 -0
- agentnova-0.3.2/agentnova/examples/10_implicit_reasoning.py +359 -0
- agentnova-0.3.2/agentnova/examples/11_analogical_reasoning.py +366 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/model_discovery.py +140 -0
- agentnova-0.3.2/agentnova/soul/__init__.py +97 -0
- agentnova-0.3.2/agentnova/soul/loader.py +492 -0
- agentnova-0.3.2/agentnova/soul/types.py +262 -0
- agentnova-0.3.2/agentnova/souls/nova-helper/IDENTITY.md +36 -0
- agentnova-0.3.2/agentnova/souls/nova-helper/SOUL.md +51 -0
- agentnova-0.3.2/agentnova/souls/nova-helper/STYLE.md +49 -0
- agentnova-0.3.2/agentnova/souls/nova-helper/soul.json +30 -0
- agentnova-0.3.2/agentnova/tools/builtins.py +633 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova.egg-info/PKG-INFO +3 -31
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova.egg-info/SOURCES.txt +14 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/pyproject.toml +2 -2
- {agentnova-0.3.0 → agentnova-0.3.2}/tests/test_acp_integration.py +222 -222
- {agentnova-0.3.0 → agentnova-0.3.2}/tests/test_acp_subagents.py +295 -295
- agentnova-0.3.0/agentnova/examples/02_tool_test.py +0 -283
- agentnova-0.3.0/agentnova/tools/builtins.py +0 -412
- {agentnova-0.3.0 → agentnova-0.3.2}/LICENSE +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/__main__.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/acp_plugin.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/agent_mode.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/core/__init__.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/core/args_normal.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/core/math_prompts.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/core/memory.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/core/model_family_config.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/core/models.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/core/types.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/examples/00_basic_agent.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/examples/__init__.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/orchestrator.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/orchestrator_enhanced.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/py.typed +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/shared_args.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/__init__.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/acp/SKILL.md +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/datetime/SKILL.md +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/loader.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/SKILL.md +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/__init__.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/aggregate_benchmark.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/generate_report.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/improve_description.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/init_skill.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/package_skill.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/quick_validate.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/run_eval.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/run_loop.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/security_scan.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/test_package_skill.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/test_quick_validate.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/utils.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/skill-creator/scripts/validate.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/skills/web-search/SKILL.md +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/tools/__init__.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/tools/registry.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova/tools/sandboxed_repl.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova.egg-info/dependency_links.txt +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova.egg-info/entry_points.txt +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova.egg-info/requires.txt +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/agentnova.egg-info/top_level.txt +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/localclaw/__init__.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/localclaw-redirect/localclaw/__init__.py +0 -0
- {agentnova-0.3.0 → agentnova-0.3.2}/setup.cfg +0 -0
- {agentnova-0.3.0 → 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.
|
|
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
|
|
35
|
+
# ⚛️ AgentNova R03.2
|
|
36
36
|
|
|
37
37
|
**Status: Alpha**
|
|
38
38
|
|
|
@@ -49,7 +49,7 @@ Inspired by the architecture of OpenClaw, rebuilt from scratch for local-first o
|
|
|
49
49
|
|
|
50
50
|
[](#license) [](https://python.org)
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
<img width="1102" height="960" alt="image" src="https://github.com/user-attachments/assets/2a5fe9b4-93df-46a0-9383-9e01e0c0105d" />
|
|
53
53
|
|
|
54
54
|
## 📚 Documentation
|
|
55
55
|
|
|
@@ -149,34 +149,6 @@ orchestrator.register(AgentCard(
|
|
|
149
149
|
result = orchestrator.run("Calculate 15 * 8 and save to file")
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
## Architecture
|
|
153
|
-
|
|
154
|
-
```
|
|
155
|
-
agentnova/
|
|
156
|
-
├── core/
|
|
157
|
-
│ ├── types.py # Enum types
|
|
158
|
-
│ ├── models.py # Data models
|
|
159
|
-
│ ├── memory.py # Sliding window memory
|
|
160
|
-
│ ├── tool_parse.py # Tool call extraction
|
|
161
|
-
│ ├── helpers.py # Utilities (fuzzy match, security)
|
|
162
|
-
│ ├── prompts.py # Model-specific prompts
|
|
163
|
-
│ └── model_config.py # Model family configurations
|
|
164
|
-
├── tools/
|
|
165
|
-
│ ├── registry.py # Tool registry
|
|
166
|
-
│ └── builtins.py # Built-in tools
|
|
167
|
-
├── backends/
|
|
168
|
-
│ ├── base.py # Abstract backend
|
|
169
|
-
│ ├── ollama.py # Ollama backend
|
|
170
|
-
│ └── bitnet.py # BitNet backend
|
|
171
|
-
├── skills/
|
|
172
|
-
│ └── loader.py # Skill loader
|
|
173
|
-
├── agent.py # Main Agent class
|
|
174
|
-
├── agent_mode.py # Autonomous mode
|
|
175
|
-
├── orchestrator.py # Multi-agent orchestration
|
|
176
|
-
├── config.py # Configuration
|
|
177
|
-
└── cli.py # Command-line interface
|
|
178
|
-
```
|
|
179
|
-
|
|
180
152
|
## Tool Support Levels
|
|
181
153
|
|
|
182
154
|
AgentNova supports three levels of tool use:
|
|
@@ -1,297 +1,269 @@
|
|
|
1
|
-
# ⚛️ AgentNova R03
|
|
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
|
-
[](https://colab.research.google.com/github/VTSTech/AgentNova/blob/main/AgentNova.ipynb)
|
|
12
|
-
[](https://GitHub.com/VTSTech/AgentNova/commit/) [](https://GitHub.com/VTSTech/AgentNova/commit/)
|
|
13
|
-
|
|
14
|
-
[](https://pypi.org/project/agentnova/) [](https://pypi.org/project/agentnova/) [](https://pypi.org/project/agentnova/) [](https://pypi.org/project/agentnova/)
|
|
15
|
-
|
|
16
|
-
[](#license) [](https://python.org)
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
##
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
#
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
#
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
# Install dev dependencies
|
|
271
|
-
pip install -e ".[dev]"
|
|
272
|
-
|
|
273
|
-
# Run unit tests
|
|
274
|
-
pytest
|
|
275
|
-
|
|
276
|
-
# Format code
|
|
277
|
-
black agentnova
|
|
278
|
-
ruff check agentnova
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
## License
|
|
282
|
-
|
|
283
|
-
MIT License - See LICENSE file for details.
|
|
284
|
-
|
|
285
|
-
## Author
|
|
286
|
-
|
|
287
|
-
**VTSTech** — [https://www.vts-tech.org](https://www.vts-tech.org)
|
|
288
|
-
|
|
289
|
-
## Contributing
|
|
290
|
-
|
|
291
|
-
Contributions welcome! Please read the contributing guidelines first.
|
|
292
|
-
|
|
293
|
-
## Acknowledgments
|
|
294
|
-
|
|
295
|
-
- Built for local inference with [Ollama](https://ollama.ai)
|
|
296
|
-
- Optimized for small, efficient models
|
|
297
|
-
- 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
|
+
[](https://colab.research.google.com/github/VTSTech/AgentNova/blob/main/AgentNova.ipynb)
|
|
12
|
+
[](https://GitHub.com/VTSTech/AgentNova/commit/) [](https://GitHub.com/VTSTech/AgentNova/commit/)
|
|
13
|
+
|
|
14
|
+
[](https://pypi.org/project/agentnova/) [](https://pypi.org/project/agentnova/) [](https://pypi.org/project/agentnova/) [](https://pypi.org/project/agentnova/)
|
|
15
|
+
|
|
16
|
+
[](#license) [](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
|