npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@zhijiewang/openharness

v0.2.1

Published

Open-source terminal coding agent. Works with any LLM.

Readme

OpenHarness

        ___
       /   \
      (     )        ___  ___  ___ _  _ _  _   _ ___ _  _ ___ ___ ___
       `~w~`        / _ \| _ \| __| \| | || | /_\ | _ \ \| | __/ __/ __|
       (( ))       | (_) |  _/| _|| .` | __ |/ _ \|   / .` | _|\__ \__ \
        ))((        \___/|_|  |___|_|\_|_||_/_/ \_\_|_\_|\_|___|___/___/
       ((  ))
        `--`

AI coding agent in your terminal. Works with any LLM -- free local models or cloud APIs.

npm Node.js 18+ TypeScript License: MIT Status: Alpha


OpenHarness reading files, running commands, and editing code — powered by a local Ollama model.


Quick Start

npm install -g @zhijiewang/openharness
oh

That's it. OpenHarness auto-detects Ollama and starts chatting. No API key needed.

oh                                    # auto-detect local model
oh --model ollama/qwen2.5:7b         # specific model
oh --model gpt-4o                     # cloud model (needs OPENAI_API_KEY)
oh --trust                            # auto-approve all tool calls
oh run "fix the tests" --json         # headless mode for CI/CD

Why OpenHarness?

Most AI coding agents are locked to one provider or cost $20+/month. OpenHarness works with any LLM -- run it free with Ollama on your own machine, or connect to any cloud API. Every AI edit is git-committed and reversible with /undo.

| | OpenHarness | Claude Code | Aider | OpenCode | |---|---|---|---|---| | Any LLM | Yes (Ollama, OpenAI, Anthropic, OpenRouter, any OpenAI-compatible) | Anthropic only | Yes | Yes | | Free local models | Ollama native | No | Yes | Yes | | Tools | 17 with permission gates | 40+ | File-focused | 20+ | | Git integration | Auto-commit + /undo | Yes | Deep git | Basic | | Slash commands | 16 built-in | 80+ | Some | Some | | Headless/CI mode | oh run --json | Yes | Yes | Yes | | Terminal UI | React + Ink | React + Ink | Basic | BubbleTea | | Language | TypeScript | TypeScript | Python | Go | | License | MIT | Proprietary | Apache 2.0 | MIT | | Price | Free (BYOK) | $20+/month | Free (BYOK) | Free (BYOK) |

Tools (17)

| Tool | Risk | Description | |------|------|-------------| | Bash | high | Execute shell commands with timeout | | Read | low | Read files with line ranges | | Write | medium | Create or overwrite files | | Edit | medium | Search-and-replace edits | | Glob | low | Find files by pattern | | Grep | low | Regex content search | | WebFetch | medium | Fetch URL content (SSRF-protected) | | WebSearch | medium | Search the web | | TaskCreate | low | Create structured tasks | | TaskUpdate | low | Update task status | | TaskList | low | List all tasks | | AskUser | low | Ask user a question with options | | Skill | low | Invoke a skill from .oh/skills/ | | Agent | medium | Spawn a sub-agent for delegation | | EnterPlanMode | low | Enter structured planning mode | | ExitPlanMode | low | Exit planning mode | | NotebookEdit | medium | Edit Jupyter notebooks |

Low-risk read-only tools auto-approve. Medium and high risk tools require confirmation in ask mode. Use --trust to skip all prompts.

Slash Commands (16)

Type these during a chat session:

| Command | Description | |---------|-------------| | /help | Show all available commands | | /clear | Clear conversation history | | /cost | Show session cost and token usage | | /status | Show model, mode, git branch, session info | | /diff | Show uncommitted git changes | | /undo | Undo last AI commit | | /commit [msg] | Create a git commit | | /log | Show recent git commits | | /files | List files in context | | /model <name> | Switch model mid-session | | /compact | Compress conversation to free context | | /export | Export conversation to markdown | | /plan | Enter plan mode | | /review | Review recent code changes | | /config | Show configuration | | /memory | View memories |

Git Integration

OpenHarness auto-commits AI edits in git repos:

oh: Edit src/app.ts                    # auto-committed with "oh:" prefix
oh: Write tests/app.test.ts
  • Every AI file change is committed automatically
  • /undo reverts the last AI commit (only OH commits, never yours)
  • /diff shows what changed
  • Your dirty files are safe — committed separately before AI edits

Headless Mode

Run a single prompt without interactive UI — perfect for CI/CD:

oh run "fix the failing tests" --model ollama/llama3 --trust
oh run "add error handling to api.ts" --json    # JSON output
oh run "explain this codebase" --model gpt-4o

Exit code 0 on success, 1 on failure.

Providers

# Local (free, no API key needed)
oh --model ollama/llama3
oh --model ollama/qwen2.5:7b-instruct

# Cloud
OPENAI_API_KEY=sk-... oh --model gpt-4o
ANTHROPIC_API_KEY=sk-ant-... oh --model claude-sonnet-4-6
OPENROUTER_API_KEY=sk-or-... oh --model openrouter/deepseek-chat

# Any OpenAI-compatible endpoint
oh --model deepseek/deepseek-chat

Project Rules

Create .oh/RULES.md in any repo (or run oh init):

- Always run tests after changes
- Use strict TypeScript
- Never commit to main directly

Rules load automatically into every session.

Install

Requires Node.js 18+.

# From npm
npm install -g @zhijiewang/openharness

# From source
git clone https://github.com/zhijiewong/openharness.git
cd openharness
npm install && npm install -g .

Development

npm install
npx tsx src/main.tsx              # run in dev mode
npx tsc --noEmit                  # type check
npm test                          # run tests

Adding a tool

Create src/tools/YourTool/index.ts implementing the Tool interface with a Zod input schema, register it in src/tools.ts.

Adding a provider

Create src/providers/yourprovider.ts implementing the Provider interface, add a case in src/providers/index.ts.

Contributing

See CONTRIBUTING.md.

License

MIT