noah-code 0.2.1__tar.gz → 0.2.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.
- noah_code-0.2.2/PKG-INFO +242 -0
- noah_code-0.2.2/README.md +199 -0
- noah_code-0.2.2/docs/assets/noah-in-action.svg +234 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/docs/configuration.md +23 -16
- {noah_code-0.2.1 → noah_code-0.2.2}/docs/extensions.md +6 -5
- {noah_code-0.2.1 → noah_code-0.2.2}/docs/interactive-reference.md +14 -6
- noah_code-0.2.2/docs/releases/v0.2.2.md +42 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/pyproject.toml +1 -1
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/__init__.py +1 -1
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/agent.py +2 -5
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/cli.py +41 -9
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/commands.py +1 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/config.py +60 -3
- noah_code-0.2.2/src/noah_code/event_bridge.py +361 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/host.py +86 -10
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/mcp_setup.py +18 -4
- noah_code-0.2.2/src/noah_code/themes.py +118 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/tools/workspace_tools.py +100 -13
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/ui/textual.css +24 -15
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/ui/textual_app.py +455 -100
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/updates.py +28 -0
- noah_code-0.2.2/tests/conftest.py +17 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_config.py +25 -4
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_efficiency.py +3 -3
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_event_bridge.py +47 -5
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_host.py +138 -11
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_mcp_setup.py +93 -1
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_textual_tui.py +252 -10
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_updates.py +20 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_workspace_tools.py +75 -1
- {noah_code-0.2.1 → noah_code-0.2.2}/uv.lock +1 -1
- noah_code-0.2.1/PKG-INFO +0 -230
- noah_code-0.2.1/README.md +0 -187
- noah_code-0.2.1/src/noah_code/event_bridge.py +0 -196
- {noah_code-0.2.1 → noah_code-0.2.2}/.github/workflows/ci.yml +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/.github/workflows/release.yml +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/.gitignore +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/docs/development.md +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/docs/releases/v0.1.0.md +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/docs/releases/v0.1.1.md +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/docs/releases/v0.2.0.md +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/docs/releases/v0.2.1.md +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/docs/security.md +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/install.sh +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/__main__.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/agents.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/approvals.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/benchmark.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/composer.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/credentials.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/custom_commands.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/events.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/llm.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/macos_sandbox.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/permissions.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/providers.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/sessions.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/skills_setup.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/snapshots.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/summarization.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/tool_output.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/tools/__init__.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/tools/git_tools.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/tools/lsp_tools.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/tools/media_tools.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/tools/process_tools.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/tools/question_tools.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/tools/task_tools.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/tools/web_tools.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/ui/__init__.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/ui/console.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/ui/protocol.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/usage.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/src/noah_code/workspace.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_agent_security.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_agents.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_approvals.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_cli.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_composer.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_credentials.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_custom_commands.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_event_bridge_and_shell.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_git_tools.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_installer.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_llm.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_lsp_tools.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_permissions.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_process_tools.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_providers.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_question_tools.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_run_exit.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_sessions.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_skills_setup.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_snapshots.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_summarization.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_task_tools.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_wave1_e2e.py +0 -0
- {noah_code-0.2.1 → noah_code-0.2.2}/tests/test_web_tools.py +0 -0
noah_code-0.2.2/PKG-INFO
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: noah-code
|
|
3
|
+
Version: 0.2.2
|
|
4
|
+
Summary: Noah Code terminal coding agent, built on NVIDIA OO Agents (NOOA)
|
|
5
|
+
Project-URL: Homepage, https://github.com/skundu42/noah-code
|
|
6
|
+
Project-URL: Documentation, https://github.com/skundu42/noah-code#readme
|
|
7
|
+
Project-URL: Repository, https://github.com/skundu42/noah-code.git
|
|
8
|
+
Project-URL: Issues, https://github.com/skundu42/noah-code/issues
|
|
9
|
+
Project-URL: Releases, https://github.com/skundu42/noah-code/releases
|
|
10
|
+
Author: noah-code contributors
|
|
11
|
+
License: Apache-2.0
|
|
12
|
+
Keywords: agents,coding,nooa,terminal
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
16
|
+
Classifier: Operating System :: MacOS
|
|
17
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Software Development
|
|
21
|
+
Requires-Python: <3.14,>=3.12
|
|
22
|
+
Requires-Dist: click>=8.1.0
|
|
23
|
+
Requires-Dist: litellm<1.92.0,>=1.84.0
|
|
24
|
+
Requires-Dist: nooa-cli==0.0.9
|
|
25
|
+
Requires-Dist: nooa==0.0.9
|
|
26
|
+
Requires-Dist: packaging>=24.0
|
|
27
|
+
Requires-Dist: pydantic>=2.5.0
|
|
28
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
29
|
+
Requires-Dist: rich>=13.0.0
|
|
30
|
+
Requires-Dist: textual>=1.0.0
|
|
31
|
+
Requires-Dist: tomli>=2.0.0; python_version < '3.11'
|
|
32
|
+
Provides-Extra: dev
|
|
33
|
+
Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
|
|
34
|
+
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
35
|
+
Requires-Dist: ruff>=0.8.0; extra == 'dev'
|
|
36
|
+
Provides-Extra: mcp
|
|
37
|
+
Requires-Dist: nooa[mcp]==0.0.9; extra == 'mcp'
|
|
38
|
+
Provides-Extra: tracing
|
|
39
|
+
Requires-Dist: nooa[tracing]==0.0.9; extra == 'tracing'
|
|
40
|
+
Provides-Extra: tui
|
|
41
|
+
Requires-Dist: textual>=1.0.0; extra == 'tui'
|
|
42
|
+
Description-Content-Type: text/markdown
|
|
43
|
+
|
|
44
|
+
<div align="center">
|
|
45
|
+
|
|
46
|
+
# Noah Code
|
|
47
|
+
|
|
48
|
+
**A terminal coding harness built on NVIDIA's NOAA framework**
|
|
49
|
+
|
|
50
|
+
[](https://pypi.org/project/noah-code/)
|
|
51
|
+
[](https://github.com/skundu42/noah-code/actions/workflows/ci.yml)
|
|
52
|
+
[](https://pypi.org/project/noah-code/)
|
|
53
|
+
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+

|
|
57
|
+
|
|
58
|
+
<p align="center"><sub>The real Textual interface, captured from a deterministic Noah Code session.</sub></p>
|
|
59
|
+
|
|
60
|
+
Noah keeps the conversation central while the context rail tracks the workspace, model, session,
|
|
61
|
+
token usage, and current plan. Tool execution stays visible, completed work compacts into readable
|
|
62
|
+
records, and every session remains scoped to its repository.
|
|
63
|
+
|
|
64
|
+
Built on the [NVIDIA OO Agents (NOOA)](https://github.com/NVIDIA-NeMo/labs-OO-Agents) runtime.
|
|
65
|
+
|
|
66
|
+
## Install
|
|
67
|
+
|
|
68
|
+
Install Noah Code and its managed Python runtime with one command:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
curl -LsSf https://raw.githubusercontent.com/skundu42/noah-code/main/install.sh | sh
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Open a new terminal, move into a repository, and start Noah:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
cd your-project
|
|
78
|
+
noah .
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Noah is compatible with macOS on Apple Silicon and Intel, plus Linux on arm64 and x86_64.
|
|
82
|
+
|
|
83
|
+
On the first launch, the TUI walks through provider, API key, model, and reasoning setup. Keys are
|
|
84
|
+
stored in Noah's private auth file with owner-only permissions; they are never written to project
|
|
85
|
+
configuration or session history.
|
|
86
|
+
|
|
87
|
+
## Why Noah
|
|
88
|
+
|
|
89
|
+
- **Repository-aware exploration.** Search with ripgrep, inspect Git history and diffs, navigate
|
|
90
|
+
symbols through language servers, and use an mtime-cached repository map.
|
|
91
|
+
- **Controlled edits.** Apply anchored replacements or atomic multi-file patches with exact
|
|
92
|
+
preimages, concurrent-change detection, immediate diagnostics, and rollback.
|
|
93
|
+
- **Visible execution.** Stream bounded shell output while commands run, keep servers and watchers
|
|
94
|
+
as managed background jobs, and revisit activity details with `F2`.
|
|
95
|
+
- **Recoverable work.** Review staged and unstaged changes in `/diff`, then undo or redo journaled
|
|
96
|
+
file edits even after restarting Noah.
|
|
97
|
+
- **Persistent sessions.** Resume repository-scoped conversations, todos, model choices, and
|
|
98
|
+
automatically compacted context without losing the full underlying tool results.
|
|
99
|
+
- **Explicit control.** Switch between implementation-focused **build** mode and read-only
|
|
100
|
+
**plan** mode, with ordered `allow`, `ask`, and `deny` permission rules.
|
|
101
|
+
- **Extensible workflows.** Add slash commands, opt-in skills, MCP servers, or markdown subagents;
|
|
102
|
+
attach `@files` and images when the task needs more context.
|
|
103
|
+
|
|
104
|
+
Noah follows repository instructions from `AGENTS.md`, `CLAUDE.md`, and
|
|
105
|
+
`.noah-code/instructions.md`.
|
|
106
|
+
|
|
107
|
+
## Quick start
|
|
108
|
+
|
|
109
|
+
Describe the outcome you want rather than prescribing every edit:
|
|
110
|
+
|
|
111
|
+
```text
|
|
112
|
+
Find the cause of the failing parser tests, implement the smallest safe fix, and run the
|
|
113
|
+
focused test file.
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Useful launch modes:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Open another workspace
|
|
120
|
+
noah /path/to/repository
|
|
121
|
+
|
|
122
|
+
# Inspect and plan without editing
|
|
123
|
+
noah --mode plan .
|
|
124
|
+
|
|
125
|
+
# Run one task and exit
|
|
126
|
+
noah run "Explain how authentication is wired" .
|
|
127
|
+
|
|
128
|
+
# Allow actions that would normally ask; explicit deny rules still apply
|
|
129
|
+
noah run --auto "Fix the failing unit test" .
|
|
130
|
+
|
|
131
|
+
# Resume previous work
|
|
132
|
+
noah --continue .
|
|
133
|
+
noah --session SESSION_ID .
|
|
134
|
+
|
|
135
|
+
# Use the line-oriented interface
|
|
136
|
+
noah --console .
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Check the installation and resolved configuration with:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
noah --version
|
|
143
|
+
noah doctor .
|
|
144
|
+
noah config show .
|
|
145
|
+
noah update --check
|
|
146
|
+
noah benchmark .
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
The package also installs `noah-code` and `nc` as equivalent entry points. Because `nc` commonly
|
|
150
|
+
means netcat, `noah` or `noah-code` is recommended.
|
|
151
|
+
|
|
152
|
+
## Inside the TUI
|
|
153
|
+
|
|
154
|
+
Type `/` to search the full command and configuration reference. The most common controls are:
|
|
155
|
+
|
|
156
|
+
| Control | Action |
|
|
157
|
+
| --- | --- |
|
|
158
|
+
| `Enter` | Send the current prompt or accept a selected suggestion |
|
|
159
|
+
| `Shift+Enter` | Insert a newline |
|
|
160
|
+
| `Tab` | Switch between build and plan mode |
|
|
161
|
+
| `F2` | Open execution activity |
|
|
162
|
+
| `F3` | Open paginated conversation history |
|
|
163
|
+
| `/model` | Configure a provider or switch the session model |
|
|
164
|
+
| `/theme` | Choose Atom One Dark, Noah Ocean, Graphite, or High Contrast |
|
|
165
|
+
| `/diff` | Review staged and unstaged changes |
|
|
166
|
+
| `/undo` / `/redo` | Traverse the persistent edit journal |
|
|
167
|
+
| `/tokens` | Inspect tokens, cache usage, model wait, and tool output |
|
|
168
|
+
| `/efficiency` | Switch between `fast`, `balanced`, and `deep` budgets |
|
|
169
|
+
|
|
170
|
+
On wide terminals, the side rail keeps the active workspace, session, model, tokens, update state,
|
|
171
|
+
and plan in view. The main pane remains centered on the Noah mark until the first prompt, then
|
|
172
|
+
becomes the conversation and execution timeline.
|
|
173
|
+
|
|
174
|
+
## Models and providers
|
|
175
|
+
|
|
176
|
+
Noah supports OpenAI, Anthropic, OpenRouter, NVIDIA, and custom OpenAI-compatible providers. It
|
|
177
|
+
also works with vLLM, LM Studio, Ollama, Azure OpenAI, Bedrock, Gemini, Groq, Mistral, xAI,
|
|
178
|
+
DeepSeek, Together AI, and Perplexity.
|
|
179
|
+
|
|
180
|
+
The guided `/model` flow is the easiest way to configure a provider. Environment variables and
|
|
181
|
+
the CLI remain available for scripts and headless environments:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
export OPENAI_API_KEY="..." # or ANTHROPIC_API_KEY / OPENROUTER_API_KEY
|
|
185
|
+
noah providers list
|
|
186
|
+
noah providers add openai --model MODEL_NAME
|
|
187
|
+
noah .
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
`/model MODEL` changes only the current session and remembers that choice when resumed. Use
|
|
191
|
+
`/model --global MODEL` to set the default for future sessions in every repository.
|
|
192
|
+
|
|
193
|
+
For compatible reasoning models, choose `default`, `none`, `minimal`, `low`, `medium`, `high`, or
|
|
194
|
+
`xhigh`. `default` omits the provider parameter:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
noah --model openai/MODEL --reasoning-effort high .
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
See the [provider configuration guide](docs/configuration.md#bring-your-own-api-provider) for
|
|
201
|
+
gateway-specific setup.
|
|
202
|
+
|
|
203
|
+
## Updates
|
|
204
|
+
|
|
205
|
+
Noah checks PyPI for new versions at most once every 24 hours. New TUI sessions show a temporary
|
|
206
|
+
banner when an update is available and keep the version visible in the context rail. Installation
|
|
207
|
+
remains explicit by default:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
noah update --check
|
|
211
|
+
noah update
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Documentation
|
|
215
|
+
|
|
216
|
+
- [Interactive interface and sessions](docs/interactive-reference.md)
|
|
217
|
+
- [Configuration, modes, permissions, and updates](docs/configuration.md)
|
|
218
|
+
- [Generated-code security](docs/security.md)
|
|
219
|
+
- [Custom commands, skills, MCP, and tracing](docs/extensions.md)
|
|
220
|
+
- [Development, CI, and releases](docs/development.md)
|
|
221
|
+
- [Release notes](docs/releases/)
|
|
222
|
+
|
|
223
|
+
## Development
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
uv sync --extra dev --extra mcp --extra tracing
|
|
227
|
+
uv run ruff check src tests
|
|
228
|
+
uv run pytest tests
|
|
229
|
+
uv build
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
See the [development guide](docs/development.md) for platform checks and the release process.
|
|
233
|
+
|
|
234
|
+
## License
|
|
235
|
+
|
|
236
|
+
Apache-2.0. NOOA remains separately licensed by its upstream
|
|
237
|
+
project.
|
|
238
|
+
|
|
239
|
+
## Credits
|
|
240
|
+
|
|
241
|
+
Built on [NVIDIA OO Agents (NOOA)](https://github.com/NVIDIA-NeMo/labs-OO-Agents). Thanks to the
|
|
242
|
+
NVIDIA NeMo team and NOOA contributors for the agent runtime that powers Noah Code.
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# Noah Code
|
|
4
|
+
|
|
5
|
+
**A terminal coding harness built on NVIDIA's NOAA framework**
|
|
6
|
+
|
|
7
|
+
[](https://pypi.org/project/noah-code/)
|
|
8
|
+
[](https://github.com/skundu42/noah-code/actions/workflows/ci.yml)
|
|
9
|
+
[](https://pypi.org/project/noah-code/)
|
|
10
|
+
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+

|
|
14
|
+
|
|
15
|
+
<p align="center"><sub>The real Textual interface, captured from a deterministic Noah Code session.</sub></p>
|
|
16
|
+
|
|
17
|
+
Noah keeps the conversation central while the context rail tracks the workspace, model, session,
|
|
18
|
+
token usage, and current plan. Tool execution stays visible, completed work compacts into readable
|
|
19
|
+
records, and every session remains scoped to its repository.
|
|
20
|
+
|
|
21
|
+
Built on the [NVIDIA OO Agents (NOOA)](https://github.com/NVIDIA-NeMo/labs-OO-Agents) runtime.
|
|
22
|
+
|
|
23
|
+
## Install
|
|
24
|
+
|
|
25
|
+
Install Noah Code and its managed Python runtime with one command:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
curl -LsSf https://raw.githubusercontent.com/skundu42/noah-code/main/install.sh | sh
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Open a new terminal, move into a repository, and start Noah:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
cd your-project
|
|
35
|
+
noah .
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Noah is compatible with macOS on Apple Silicon and Intel, plus Linux on arm64 and x86_64.
|
|
39
|
+
|
|
40
|
+
On the first launch, the TUI walks through provider, API key, model, and reasoning setup. Keys are
|
|
41
|
+
stored in Noah's private auth file with owner-only permissions; they are never written to project
|
|
42
|
+
configuration or session history.
|
|
43
|
+
|
|
44
|
+
## Why Noah
|
|
45
|
+
|
|
46
|
+
- **Repository-aware exploration.** Search with ripgrep, inspect Git history and diffs, navigate
|
|
47
|
+
symbols through language servers, and use an mtime-cached repository map.
|
|
48
|
+
- **Controlled edits.** Apply anchored replacements or atomic multi-file patches with exact
|
|
49
|
+
preimages, concurrent-change detection, immediate diagnostics, and rollback.
|
|
50
|
+
- **Visible execution.** Stream bounded shell output while commands run, keep servers and watchers
|
|
51
|
+
as managed background jobs, and revisit activity details with `F2`.
|
|
52
|
+
- **Recoverable work.** Review staged and unstaged changes in `/diff`, then undo or redo journaled
|
|
53
|
+
file edits even after restarting Noah.
|
|
54
|
+
- **Persistent sessions.** Resume repository-scoped conversations, todos, model choices, and
|
|
55
|
+
automatically compacted context without losing the full underlying tool results.
|
|
56
|
+
- **Explicit control.** Switch between implementation-focused **build** mode and read-only
|
|
57
|
+
**plan** mode, with ordered `allow`, `ask`, and `deny` permission rules.
|
|
58
|
+
- **Extensible workflows.** Add slash commands, opt-in skills, MCP servers, or markdown subagents;
|
|
59
|
+
attach `@files` and images when the task needs more context.
|
|
60
|
+
|
|
61
|
+
Noah follows repository instructions from `AGENTS.md`, `CLAUDE.md`, and
|
|
62
|
+
`.noah-code/instructions.md`.
|
|
63
|
+
|
|
64
|
+
## Quick start
|
|
65
|
+
|
|
66
|
+
Describe the outcome you want rather than prescribing every edit:
|
|
67
|
+
|
|
68
|
+
```text
|
|
69
|
+
Find the cause of the failing parser tests, implement the smallest safe fix, and run the
|
|
70
|
+
focused test file.
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Useful launch modes:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Open another workspace
|
|
77
|
+
noah /path/to/repository
|
|
78
|
+
|
|
79
|
+
# Inspect and plan without editing
|
|
80
|
+
noah --mode plan .
|
|
81
|
+
|
|
82
|
+
# Run one task and exit
|
|
83
|
+
noah run "Explain how authentication is wired" .
|
|
84
|
+
|
|
85
|
+
# Allow actions that would normally ask; explicit deny rules still apply
|
|
86
|
+
noah run --auto "Fix the failing unit test" .
|
|
87
|
+
|
|
88
|
+
# Resume previous work
|
|
89
|
+
noah --continue .
|
|
90
|
+
noah --session SESSION_ID .
|
|
91
|
+
|
|
92
|
+
# Use the line-oriented interface
|
|
93
|
+
noah --console .
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Check the installation and resolved configuration with:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
noah --version
|
|
100
|
+
noah doctor .
|
|
101
|
+
noah config show .
|
|
102
|
+
noah update --check
|
|
103
|
+
noah benchmark .
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The package also installs `noah-code` and `nc` as equivalent entry points. Because `nc` commonly
|
|
107
|
+
means netcat, `noah` or `noah-code` is recommended.
|
|
108
|
+
|
|
109
|
+
## Inside the TUI
|
|
110
|
+
|
|
111
|
+
Type `/` to search the full command and configuration reference. The most common controls are:
|
|
112
|
+
|
|
113
|
+
| Control | Action |
|
|
114
|
+
| --- | --- |
|
|
115
|
+
| `Enter` | Send the current prompt or accept a selected suggestion |
|
|
116
|
+
| `Shift+Enter` | Insert a newline |
|
|
117
|
+
| `Tab` | Switch between build and plan mode |
|
|
118
|
+
| `F2` | Open execution activity |
|
|
119
|
+
| `F3` | Open paginated conversation history |
|
|
120
|
+
| `/model` | Configure a provider or switch the session model |
|
|
121
|
+
| `/theme` | Choose Atom One Dark, Noah Ocean, Graphite, or High Contrast |
|
|
122
|
+
| `/diff` | Review staged and unstaged changes |
|
|
123
|
+
| `/undo` / `/redo` | Traverse the persistent edit journal |
|
|
124
|
+
| `/tokens` | Inspect tokens, cache usage, model wait, and tool output |
|
|
125
|
+
| `/efficiency` | Switch between `fast`, `balanced`, and `deep` budgets |
|
|
126
|
+
|
|
127
|
+
On wide terminals, the side rail keeps the active workspace, session, model, tokens, update state,
|
|
128
|
+
and plan in view. The main pane remains centered on the Noah mark until the first prompt, then
|
|
129
|
+
becomes the conversation and execution timeline.
|
|
130
|
+
|
|
131
|
+
## Models and providers
|
|
132
|
+
|
|
133
|
+
Noah supports OpenAI, Anthropic, OpenRouter, NVIDIA, and custom OpenAI-compatible providers. It
|
|
134
|
+
also works with vLLM, LM Studio, Ollama, Azure OpenAI, Bedrock, Gemini, Groq, Mistral, xAI,
|
|
135
|
+
DeepSeek, Together AI, and Perplexity.
|
|
136
|
+
|
|
137
|
+
The guided `/model` flow is the easiest way to configure a provider. Environment variables and
|
|
138
|
+
the CLI remain available for scripts and headless environments:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
export OPENAI_API_KEY="..." # or ANTHROPIC_API_KEY / OPENROUTER_API_KEY
|
|
142
|
+
noah providers list
|
|
143
|
+
noah providers add openai --model MODEL_NAME
|
|
144
|
+
noah .
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
`/model MODEL` changes only the current session and remembers that choice when resumed. Use
|
|
148
|
+
`/model --global MODEL` to set the default for future sessions in every repository.
|
|
149
|
+
|
|
150
|
+
For compatible reasoning models, choose `default`, `none`, `minimal`, `low`, `medium`, `high`, or
|
|
151
|
+
`xhigh`. `default` omits the provider parameter:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
noah --model openai/MODEL --reasoning-effort high .
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
See the [provider configuration guide](docs/configuration.md#bring-your-own-api-provider) for
|
|
158
|
+
gateway-specific setup.
|
|
159
|
+
|
|
160
|
+
## Updates
|
|
161
|
+
|
|
162
|
+
Noah checks PyPI for new versions at most once every 24 hours. New TUI sessions show a temporary
|
|
163
|
+
banner when an update is available and keep the version visible in the context rail. Installation
|
|
164
|
+
remains explicit by default:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
noah update --check
|
|
168
|
+
noah update
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Documentation
|
|
172
|
+
|
|
173
|
+
- [Interactive interface and sessions](docs/interactive-reference.md)
|
|
174
|
+
- [Configuration, modes, permissions, and updates](docs/configuration.md)
|
|
175
|
+
- [Generated-code security](docs/security.md)
|
|
176
|
+
- [Custom commands, skills, MCP, and tracing](docs/extensions.md)
|
|
177
|
+
- [Development, CI, and releases](docs/development.md)
|
|
178
|
+
- [Release notes](docs/releases/)
|
|
179
|
+
|
|
180
|
+
## Development
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
uv sync --extra dev --extra mcp --extra tracing
|
|
184
|
+
uv run ruff check src tests
|
|
185
|
+
uv run pytest tests
|
|
186
|
+
uv build
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
See the [development guide](docs/development.md) for platform checks and the release process.
|
|
190
|
+
|
|
191
|
+
## License
|
|
192
|
+
|
|
193
|
+
Apache-2.0. NOOA remains separately licensed by its upstream
|
|
194
|
+
project.
|
|
195
|
+
|
|
196
|
+
## Credits
|
|
197
|
+
|
|
198
|
+
Built on [NVIDIA OO Agents (NOOA)](https://github.com/NVIDIA-NeMo/labs-OO-Agents). Thanks to the
|
|
199
|
+
NVIDIA NeMo team and NOOA contributors for the agent runtime that powers Noah Code.
|