Lightweight AI assistant framework in Rust with pluggable LLM providers (Ollama, llama.cpp, vLLM), built-in tool calling, agent skills, and customizable system prompts.
- Pluggable Providers: Ollama, llama.cpp, vLLM, any OpenAI-compatible API gateway (OpenRouter, Together, etc.) with Bearer auth, and
β οΈ Sockudo AI Transport as a highly experimental backend requiring a running Sockudo server and a worker bridge (seedocs/examples/sockudo-worker/). Ollama supports retries with backoff, configurable timeouts, and reasoning/think levels. - Tool System: 15 modular tools (
ls,read,write,edit,grep,glob,run,web_search,web_fetch,auto_compact,invoke_skill,switch_mode,question,screenshot, plus the built-inreadimage loader for multimodal models). - Custom Tools: Extend TinyHarness with shell-command-based tools the LLM can call β defined in
custom_tools.json(~/.config/tinyharness/custom_tools.jsonglobal,.tinyharness/custom_tools.jsonper-project), no Rust code or recompilation required. Supports{param}template substitution,TH_*env vars,readonly/destructivecategories, and timeouts. - Agent Modes: Four modes β
casual(web-only),planning(read-only + signals),agent(full access), andresearch(web-focused) β to control what the AI can do. Modes are backed by customizable.mdprompt files. - Skills: Pluggable SKILL.md modules discovered from
~/.config/tinyharness/skills/and.tinyharness/skills/. Invokable by the AI viainvoke_skillor by the user via/use <name>. Supports YAML frontmatter with name, description, compatibility, licensing, and model-invocation controls. - Context Management: Token estimation with per-model context window sizes (8Kβ256K), load warnings at 70%/90% thresholds, and cascading conversation compaction via
/compact. - Session Persistence: JSONL-based sessions with UUIDs, saved in
~/.local/share/tinyharness/sessions/. Supports session listing, switching by prefix, renaming, deletion, and auto-save every 5 messages. - Async Streaming: Built on
tokiofor efficient streaming with all providers. Ctrl+C interrupts generation gracefully. - Experimental TUI: Split-pane terminal UI with conversation view, sidebar, input bar, and tool output panel. Built from scratch with no external TUI framework. Activate with
--tui.β οΈ Experimental β may have rendering issues or incomplete features. - Interactive CLI: Color-coded terminal interface with 24+ slash commands for session management, configuration, file pinning, image attachment, audit logging, debug diagnostics, and tool control.
- Customizable Prompts: System prompts are seeded from hardcoded defaults on first launch to
~/.config/tinyharness/prompts/and can be freely edited. - Command Safety: Smart auto-accept for safe shell commands with prefix matching, deny lists, redirection stripping, and audit logging.
- Thinking Display: Optionally render the model's reasoning chain inline during streaming (toggle via
/showthink). - Image Attachments: Multimodal support β attach images with
/imageand thereadtool automatically loads image files for visual models. - Project Instructions: Auto-discovers
TINYHARNESS.md,.tinyharness.md,AGENTS.md, orCLAUDE.mdwalking up from the current directory. Configurable viaTINYHARNESS_MD_FILESenv var or settings. Additional project-specific files (e.g.RULES.md,.cursorrules) can be loaded from.tinyharness/config.json. - Per-Project Settings: Layer
.tinyharness/config.jsonover global settings. Override safe/denied commands, auto-accept behavior, context limits, preferred mode, and more per project. View merged settings with/project-settings. - Smart Language Detection: Auto-detects 17+ languages and build tools (Rust, Zig, Deno, Bun, Swift, Ruby, Elixir, Haskell, Kotlin, .NET, Dart/Flutter, Nix, Node.js, Python, Go, Java, C/C++). Detects monorepos (e.g. "Rust + Node.js").
- Rust (latest stable, edition 2024)
- At least one LLM backend:
- Ollama (default, local)
- llama.cpp server (local, no auth)
- vLLM (local, no auth)
- Any OpenAI-compatible API gateway (OpenRouter, Together, custom proxies, etc.) β requires an API key and explicit URL
- Sockudo (
β οΈ highly experimental β requires a worker bridge, seedocs/examples/sockudo-worker/)
git clone https://github.com/yourusername/TinyHarness.git
cd TinyHarness
make installThis builds in release mode and copies the binary to ~/.local/bin. Make sure ~/.local/bin is in your $PATH:
export PATH="$HOME/.local/bin:$PATH"To uninstall:
make uninstallAlternatively, install via Cargo:
cargo install --path .A Nix flake is provided for reproducible builds and dev environments.
Run once without installing:
nix run github:PTFOPlayer/TinyHarnessBuild the package:
cd TinyHarness
nix build
./result/bin/tinyharnessEnter a development shell (with Rust toolchain, rustfmt, and clippy pre-configured):
nix developOllama (default):
tinyharnessConnects to http://127.0.0.1:11434. Supports configurable timeout, retries, and think/reasoning level.
llama.cpp:
tinyharness --llama-cppConnects to http://127.0.0.1:8080 by default.
vLLM:
tinyharness --vllmConnects to http://127.0.0.1:8000 by default.
OpenAI-compatible gateway (OpenRouter, Together, custom proxies, etc.):
tinyharness --openai-compat --url https://openrouter.ai/api/v1 --api-key <YOUR_KEY>Requires --url (no default URL) and an API key. You can also set the OPENAI_API_KEY environment variable instead of --api-key. Bearer auth is sent on every request. Use --skip-health-check if the gateway doesn't expose a /health endpoint.
Sockudo (
tinyharness --sockudoConnects to http://127.0.0.1:6001 by default. Requires a running Sockudo server with AI Transport enabled and a worker bridge process (see docs/examples/sockudo-worker/). This backend is not recommended for production use.
A health check runs on startup to verify the provider is reachable. If the saved model is unavailable, the first available model is auto-selected with a warning.
Custom URL (works with any provider):
tinyharness --llama-cpp --url http://localhost:2832
tinyharness --ollama --url http://192.168.1.50:11434
tinyharness --vllm --url http://gpu-server:8000
tinyharness --openai-compat --url https://api.example.com/v1 --api-key sk-xxxContinue last session:
tinyharness --continueResumes the most recent session in the current working directory.
Non-interactive prompt:
tinyharness -p "What does this project do?"
tinyharness --prompt "Explain the architecture"Sends an initial prompt and then drops into the interactive loop for follow-up turns.
Terminal UI (experimental):
tinyharness --tuiLaunches a split-pane TUI with conversation view, sidebar, input bar, and tool output panel. Built from scratch using raw ANSI escape sequences β no external TUI framework. This is experimental and may have rendering issues or incomplete features.
Interactive setup:
tinyharness --configRuns a guided setup: pick a provider, enter a URL, save to settings. Exits when done.
| Flag | Description |
|---|---|
-o, --ollama |
Use the Ollama provider (default) |
-l, --llama-cpp |
Use the llama.cpp provider |
-v, --vllm |
Use the vLLM provider |
--openai-compat |
Use a generic OpenAI-compatible gateway (requires --api-key and --url) |
--sockudo |
Use the Sockudo AI Transport provider ( |
-u, --url <url> |
Custom base URL for the provider |
--api-key <key> |
Bearer token for --openai-compat (use - to clear saved key) |
--skip-health-check |
Skip provider health check at startup |
-c, --continue |
Continue the most recent session in the current directory |
--config |
Run interactive provider setup, then exit |
-p, --prompt <text> |
Start with this message, then drop into interactive mode |
--tui |
Launch the experimental terminal UI (split-pane TUI) |
| Mode | Tools Available | Purpose |
|---|---|---|
| casual | web_search, web_fetch |
Pure chat with web access, no filesystem access |
| planning | All read-only tools + signal tools | Analyze & plan, then escalate to agent |
| agent | All 15 tools | Full development access β code, commands, web |
| research | All read-only tools + signal tools | Web research, then escalate for execution |
Switch modes with /mode <name>, use shortcut aliases (/plan, /agent, /research, /casual), or let the AI request escalation via switch_mode.
| Tool | Category | Description |
|---|---|---|
ls |
ReadOnly | List directory contents |
read |
ReadOnly | Read file content (also loads images for multimodal models) |
grep |
ReadOnly | Search with regex across files |
glob |
ReadOnly | Find files by glob pattern |
web_search |
ReadOnly | Search the web (requires Ollama API key) |
web_fetch |
ReadOnly | Fetch a web page by URL |
write |
Destructive | Write content to a file |
edit |
Destructive | Edit a file by find-and-replace |
run |
Destructive | Execute shell commands with timeout & working directory |
switch_mode |
Signal | Request a mode switch |
question |
Signal | Ask the user a question with options |
auto_compact |
Signal | Request conversation compaction |
invoke_skill |
Signal | Activate a skill by name |
screenshot |
Signal | Request a screenshot from the user |
| Command | Description |
|---|---|
/sessions |
List all saved sessions (most recent first) |
/session <id> |
Switch to an existing session by ID prefix |
/session delete <id|name> |
Delete a session with confirmation |
/rename <name> |
Rename the current session |
| Command | Description |
|---|---|
/mode [casual|planning|agent|research] |
Show or switch agent mode |
/plan, /agent, /research, /casual |
Quick mode switch aliases |
/model [name] |
List available models or switch to one |
| Command | Description |
|---|---|
/add <path> |
Pin a file into context |
/drop <path> |
Remove a pinned file from context |
/files |
List all pinned files |
/dropall |
Remove all pinned files |
/refresh |
Re-read pinned files from disk |
/context |
Show auto-detected project context |
/init |
Generate or update TINYHARNESS.md |
/project-settings [init] |
Show or initialize per-project settings |
| Command | Description |
|---|---|
/compact [focus] |
Summarize conversation history (with cascading for long sessions) |
/image [<path>|clear|drop <n>] |
Attach an image to the next message |
| Command | Description |
|---|---|
/skills |
List all available skills |
/skill <name> |
Show a skill's details and content |
/use <name> |
Activate a skill, injecting its instructions |
/unload <name> |
Deactivate a previously loaded skill |
| Command | Description |
|---|---|
/settings [all] |
Show current configuration |
/command [list|add|rm|deny|undeny|reset|resetdeny] |
Manage auto-accepted and denied commands |
/apikey [key|clear] |
Set, show, or clear the Ollama API key (needed for web_search) |
/contextlimit [tokens] |
Show or set the context warning threshold |
/autoaccept [all|safe|off] |
Show or set auto-accept mode (off, safe = read-only, all = all tools except run) |
/autocompact [on|off] |
Toggle the auto_compact tool (when off, the model cannot request compaction) |
/showthink [on|off] |
Toggle display of the model's thinking/reasoning chain |
/timeout <seconds> |
Set Ollama request timeout (default: 5s) |
/retries <count> |
Set Ollama max retries (default: 3) |
/think [off|low|medium|high] |
Set Ollama reasoning/think level |
/audit [last|session|clear] |
View command execution audit log |
| Command | Description |
|---|---|
/help |
Show available commands |
/clear |
Clear terminal screen |
/debug [path] |
Dump full conversation context to a log file (for diagnostics) |
/exit or /quit |
Exit TinyHarness |
The /command system controls which shell commands are auto-accepted:
/command list # Show safe and denied commands
/command add <cmd> # Add a command to auto-accept list
/command rm <cmd> # Remove from auto-accept list
/command deny <cmd> # Add to deny list (always requires confirmation)
/command undeny <cmd> # Remove from deny list
/command reset # Reset safe commands to defaults
/command resetdeny # Clear the deny list
Safe commands include cd, ls, grep, cat, git status, git diff, git log, cargo tree, and ~40 more. Shell redirections (2>&1, 2>/dev/null) are stripped before matching. The deny list takes priority β if a command matches both lists, it is denied. The run tool can never be auto-accepted even in auto-accept mode.
/compact summarizes older messages to free context space. Sessions with over 200 intermediate messages use cascading multi-stage compaction (chunking β per-stage summaries β merged final summary).
/compact focus on build errors and fixes
Cascading compaction: 580 intermediate messages β 3 stages (200 messages/stage)
Stage 1/3: Compacting messages 1β200...
Stage 2/3: Compacting messages 201β400...
Stage 3/3: Compacting messages 401β580...
Merging 3 summaries into final summary...
Compacted: 600 messages β 6 messages
On session load, TinyHarness warns if the conversation exceeds 70% or 90% of the context window, using the last known provider token count from session metadata.
Skills are pluggable instruction modules that give the AI specialized knowledge. Each skill lives in a directory with a SKILL.md file.
Discovery paths:
~/.config/tinyharness/skills/<name>/SKILL.md(personal β per-user).tinyharness/skills/<name>/SKILL.md(project-local β per-repo)
Project skills take precedence over personal skills with the same name.
SKILL.md format (YAML frontmatter):
---
name: rust-dev
description: Rust development best practices and code review guidelines
argument-hint: Rust file or module to review
compatibility: rust
disable-model-invocation: false
license: MIT
metadata:
version: "1.0"
user-invocable: true
---
# Rust Development Skill
Always run `cargo fmt` and `cargo clippy` before suggesting changes...All frontmatter fields are optional with sensible defaults. Skills over 10,000 characters are truncated (70% head / 30% tail). Use the read tool to view full content.
Invoking skills:
- AI: calls
invoke_skillwith the skill name (unlessdisable-model-invocation: true) - User:
/use <name>or/skill use <name> - Deactivate:
/unload <name>
Both personal and project-local skill directories are scanned at startup and accessible via /skills.
TinyHarness is a Cargo workspace with three crates:
Frontend-agnostic β no terminal I/O, no ANSI codes, no rustyline.
tinyharness-lib/src/
βββ lib.rs Re-exports all public types
βββ provider/ Provider trait + implementations
β βββ mod.rs Provider trait, Message types, ToolDefinition, ToolCall (with id)
β βββ ollama.rs OllamaProvider β raw SSE streaming, retries, Gemini signatures
β βββ sockudo.rs SockudoProvider β AI Transport via WebSocket (β οΈ highly experimental)
β βββ openai_compat.rs Shared HTTP/SSE logic for OpenAI-compatible backends
β βββ openai_compat_provider.rs OpenAiCompatProvider β unified llama.cpp / vLLM / Bearer-auth gateway provider
βββ config/mod.rs Settings persistence (provider, model, mode, API key, safe/denied commands, think type)
βββ mode.rs AgentMode enum (casual/planning/agent/research) with customizable .md prompts
βββ context.rs WorkspaceContext β auto-detected project metadata + instruction file discovery
βββ session.rs JSONL session persistence with UUIDs, auto-save, atomic writes
βββ token.rs Token estimation, context window sizes (8Kβ256K), usage warnings
βββ skill.rs Skill discovery, registry, frontmatter parsing, indexing
βββ secret.rs SecretString wrapper for API key redaction (custom Debug, serde support)
βββ image.rs Image attachment handling (base64 encoding, dimension detection)
βββ custom_tools/ Custom-tools system β shell-command tools via custom_tools.json
β βββ mod.rs CustomToolManager β load/merge global + project configs
β βββ custom_tool.rs CustomToolDefinition, CustomToolCategory, build_tool()
β βββ shell.rs ShellCommand β template substitution, timeout, env vars
βββ prompts/ Hardcoded default system prompts (header.md, casual.md, planning.md, agent.md, research.md)
βββ tools/ 15 tool implementations
βββ mod.rs ToolManager with mode-based filtering, signal event parsing
βββ tool.rs Tool struct, ToolCategory enum, schema builders, extract_args! macro
βββ ls.rs Directory listing
βββ read.rs File reading with image detection for multimodal models
βββ write.rs File writing
βββ edit.rs Find-and-replace file editing
βββ grep.rs Regex search across files
βββ glob.rs File glob pattern matching
βββ run.rs Shell command execution with timeout
βββ web_search.rs Web search + web fetch (Ollama cloud API)
βββ switch_mode.rs Mode switch signal
βββ question.rs User question signal
βββ auto_compact.rs Compaction signal
βββ invoke_skill.rs Skill activation signal
βββ screenshot.rs Screenshot request signal
Terminal UI abstractions β reusable output formatting, diff display, confirmation prompts, and the experimental TUI.
tinyharness-ui/src/
βββ lib.rs Module declarations
βββ output.rs Structured output writer (stdout/stderr abstraction)
βββ style.rs ANSI color constants (BOLD, CYAN, RED, BG_TOOL, SPINNER_FRAMES, etc.)
βββ ui/
β βββ mod.rs Module declarations
β βββ confirm.rs Tool call confirmation prompts (Yes/No/Auto-accept)
β βββ diff.rs Unified diff display
β βββ input.rs CommandHelper for rustyline tab-completion
β βββ wrap.rs Word-wrapped output with ANSI-aware line filling
βββ tui/ β οΈ Experimental TUI subsystem
βββ mod.rs TUI module declarations + agent integration types (TuiAgentEvent, TuiUserAction)
βββ app.rs Main TUI application loop, widget layout, event dispatch
βββ backend.rs Backend trait (StdioBackend + TestBackend for testing)
βββ cell.rs Color/style representation for the screen buffer (raw ANSI, no framework)
βββ event.rs Event system (keyboard, mouse, paste)
βββ layout.rs Rect/constraint-based layout (inspired by ratatui, from scratch)
βββ screen.rs Screen buffer with differential rendering, Unicode width support (CJK/combining marks)
βββ terminal.rs Raw terminal control, alternate screen, signal handling
βββ widget.rs Widget trait, Action enum, shared style helpers
βββ widgets/
βββ conversation.rs Conversation pane (streaming text, thinking, tool calls)
βββ input_bar.rs Multi-line input with history, word-wrap, paste
βββ sidebar.rs Context panel (files, tools, mode, model info)
βββ spinner.rs Streaming indicator
βββ status_bar.rs Top bar (mode, model, token count)
βββ tool_output.rs Tool result viewer
CLI application β argument parsing, agent loop, slash commands, tool dispatch, safety checking.
ai-input events, calls Ollama for inference, and streams responses back as versioned message mutations. Not part of the Cargo workspace and not required for normal TinyHarness usage with Ollama, llama.cpp, or vLLM. Build it standalone with cargo build from within the docs/examples/sockudo-worker/ directory.
src/
βββ main.rs Entry point, CLI parsing (clap), provider creation, session init, TUI launch
βββ agent/
β βββ mod.rs Main interaction loop, streaming response display, spinner, thinking chain
β βββ tui_loop.rs Background agent loop for TUI mode (communicates via channels)
β βββ tools.rs Tool call dispatch, confirmation, generic execution, signal handlers
β βββ safety.rs Shell command safety checker (prefix + deny list + redirection stripping)
β βββ setup.rs Interactive provider setup (--config), URL prompting
β βββ display.rs Context status formatting, args summaries, listing result summaries
β βββ input.rs Multi-line input reading with continuation prompt
β βββ confirm.rs Confirmation prompt rendering for tool calls
β βββ signal.rs Signal tool handling (switch_mode, question, auto_compact, invoke_skill)
β βββ tool_result.rs Tool result formatting and batching
β βββ command_result.rs CommandResult enum definition
βββ commands/
βββ mod.rs CommandRegistry, CommandDispatcher, build_registry() β 24+ commands
βββ registry.rs CommandContext, CommandResult, AsyncCommand trait, async_command! macro
βββ apikey.rs /apikey β Ollama API key management
βββ audit.rs /audit β command execution audit log
βββ clear.rs /clear β terminal clear
βββ command.rs /command β safe/denied command management
βββ compact.rs /compact β cascading conversation summarization
βββ config_settings.rs /contextlimit, /autoaccept, /autocompact, /showthink, /timeout, /retries, /think
βββ context.rs /context β workspace context display
βββ debug.rs /debug β full conversation context dump to log file
βββ exit.rs /exit β graceful shutdown
βββ files.rs /add, /drop, /files, /dropall, /refresh β file pinning
βββ help.rs /help β command listing
βββ image.rs /image β image attachment management
βββ init.rs /init β TINYHARNESS.md generation
βββ mode.rs /mode β mode switching
βββ models.rs /model β model listing and selection
βββ project_settings.rs /project-settings β per-project settings display and init
βββ sessions.rs /sessions, /session β session listing, switching, deletion
βββ settings.rs /settings β configuration display
βββ skill.rs /skills, /skill, /use, /unload β skill management
cargo build # Debug build
cargo build --release # Release build
cargo test --workspace # Run all tests
cargo test -p tinyharness-lib # Library tests only
cargo test -p TinyHarness # Binary tests only
cargo test <test_name> # Run a specific test
cargo clippy --workspace -- -D warnings # Lint
cargo fmt --all -- --check # Format check
cargo fmt --all # Auto-formatIf you're using the Nix flake, prefer:
nix build # Build the package
nix flake check # Run all checks (build + fmt + clippy --deny warnings + test)
nix develop # Enter dev shell with cargo/rustfmt/clippyAfter making changes, run:
cargo fmt --allβ ensure formatting is cleancargo clippy --workspace -- -D warningsβ no clippy warningscargo test --workspaceβ all tests passcargo buildβ clean debug build succeeds
TinyHarness grants LLMs the ability to interact with your filesystem through tool calling. This introduces specific risks:
- Sandboxing: Run within a sandboxed environment (Docker container, VM) to prevent unintended modifications.
- Non-determinism: LLMs may hallucinate or produce incorrect tool arguments. Always review proposed actions.
- Accountability: You assume full responsibility for all operations performed by the AI. Ensure you have backups.
The run tool can never be auto-accepted β even in all mode β unlike write and edit. Safe commands (e.g., ls, git status) can be auto-accepted when /autoaccept is set to safe or all.
TinyHarness automatically discovers project instruction files, similar to CLAUDE.md in Claude Code and AGENTS.md in other agents. These files give the AI persistent context about your project.
Searches from the current directory up to the filesystem root (first match wins). The discovery order is configurable via settings or an environment variable.
Default priority order:
| Priority | File | Notes |
|---|---|---|
| 1 | TINYHARNESS.md |
TinyHarness-native |
| 2 | .tinyharness.md |
Hidden variant |
| 3 | AGENTS.md |
Industry standard (60K+ repos) |
| 4 | CLAUDE.md |
Claude Code compatibility |
Customizing the discovery list:
# Env var override (highest priority):
export TINYHARNESS_MD_FILES="CLAUDE.md,TEAM_RULES.md"
tinyharnessOr in ~/.config/tinyharness/settings.json:
{
"project_md_files": ["CLAUDE.md", ".cursorrules", "TEAM_RULES.md"]
}Additional per-project files can be loaded via .tinyharness/config.json:
{
"project_md_files": ["RULES.md", "DEPLOYMENT.md"]
}These are appended after the main instruction file in the AI's context.
Files over 20,000 characters are truncated (70% head / 30% tail with a marker).
Run /init in a TinyHarness session and the AI will analyze your project and generate a TINYHARNESS.md:
[agent]> /init
Generating project instruction file...
β¦ Created /path/to/TINYHARNESS.md (45 lines)
If one already exists, /init updates it β keeping accurate parts, removing outdated ones, and adding what's missing.
A good instruction file should contain what you'd tell a new teammate:
- Build and test commands β specific ones, not vague
- Code conventions β rules that differ from defaults
- Architecture β key directories and module relationships
- Known gotchas β things that trip up newcomers
- Verification steps β what to run after making changes
Keep it concise (under 200 lines). For detailed reference, the AI can use read on specific files.
TinyHarness supports per-project configuration via .tinyharness/config.json, discovered by walking up from the current working directory (same algorithm as instruction file discovery). Settings are layered:
~/.config/tinyharness/settings.json (global)
β .tinyharness/config.json (project override)
β CLI flags (highest priority)
{
"safe_command_prefixes": ["python -m pytest", "npm run lint"],
"denied_command_prefixes": ["git push --force"],
"auto_accept_mode": "off",
"context_limit": 32768,
"project_md_files": ["RULES.md", ".cursorrules"],
"preferred_mode": "agent"
}safe_command_prefixes: Extends (not replaces) the global safe listdenied_command_prefixes: Replaces the global deny list entirelyauto_accept_mode: Overrides global auto-accept mode ("off","safe", or"all")context_limit: Overrides context warning thresholdproject_md_files: Additional instruction files loaded after the main onepreferred_mode: Default agent mode for this project
/project-settings # Show merged settings with source annotations
/project-settings init # Generate a commented .tinyharness/config.json template
Sources are displayed as (project), (global), or (default), making it clear where each value originates.
TinyHarness auto-detects your project's language and build tool from marker files in the workspace root. Detection supports 17+ languages and can identify multiple languages in monorepos (e.g. "Rust + Node.js").
| Language | Detection files |
|---|---|
| Rust | Cargo.toml |
| Zig | build.zig, build.zig.zon |
| Deno | deno.json, deno.jsonc |
| Bun | bun.lockb, bun.lock |
| Swift | Package.swift |
| Ruby | Gemfile |
| Elixir | mix.exs |
| Haskell | stack.yaml, *.cabal |
| Kotlin | build.gradle.kts, settings.gradle.kts |
| .NET | *.csproj, *.sln |
| Dart/Flutter | pubspec.yaml |
| Nix | flake.nix, default.nix |
| Node.js | package.json |
| Python | pyproject.toml, setup.py, setup.cfg, requirements.txt |
| Go | go.mod |
| Java (Gradle) | build.gradle |
| Java (Maven) | pom.xml |
| C/C++ (CMake) | CMakeLists.txt |
Unknown project types fall back to Makefile or Justfile hints when available. Detected commands are injected into the system prompt so the AI knows how to build and test your project without being told.
