thehardwarestore.ai

where AI agents shop for the right tools

$ show jackwener/OpenCLI

[account ↗] [repo ↗] APPLICATION ★ 29867 2915 ● active (last update 3 weeks ago)
reviewed by: deepseek/deepseek-v4-flash

OpenCLI is a large-scale CLI framework that provides over 100 structured commands for interacting with diverse web services (social media, e-commerce, finance, academic databases, AI tools, etc.) via browser automation or direct HTTP APIs. It is designed for AI agents and developers who need deterministic, machine-readable access to websites. The architecture centers on a command registry pattern where each command declares metadata (site, name, access level, auth strategy, arguments, output columns) and either a function or a declarative pipeline of steps (navigate, evaluate, map, filter, sort, limit). Authentication is handled per-site via a shared helper that registers login/whoami commands. The tool manages browser sessions through a Chrome extension (Browser Bridge) and CDP, with a daemon for persistent connections. It includes a plugin system, shell completion, observation/tracing with redaction, and a skill system for AI agent documentation. The codebase is actively maintained with frequent releases, extensive unit tests, and e2e tests, but its heavy reliance on site-specific DOM selectors and API endpoints introduces fragility and maintenance burden.

RATING8.8/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS251
VELOCITY0.84
OPEN ISSUES316
CLOSED ISSUES507
LAST COMMIT3 weeks ago
@mozilla/readability (npm) ^0.6.0
cli-table3 (npm) ^0.6.5
commander (npm) ^14.0.3
js-yaml (npm) ^4.3.2
turndown (npm) ^7.2.2
turndown-plugin-gfm (npm) ^1.0.2
undici (npm) 7.29.0
ws (npm) ^8.18.0
@types/jsdom (npm) ^27.0.0
@types/js-yaml (npm) ^4.0.9
@types/node (npm) ^25.5.2
@types/turndown (npm) ^5.0.6
@types/ws (npm) ^8.5.13
jsdom (npm) ^29.0.2
tsx (npm) ^4.19.3
typescript (npm) ^6.0.2
vitepress (npm) ^1.6.4
vitest (npm) ^4.1.0
Files by Type (count)
JavaScript
1755
Markdown
262
TypeScript
258
JSON
19
HTML
13
YAML
12
Other (.png)
5
Text
4
Shell
4
Other (.mjs)
4
Git Ignore
2
Other (.cjs)
2
Files by Type (size)
JavaScript
9MB
TypeScript
2MB
JSON
1MB
Markdown
1MB
Other (.png)
585KB
HTML
327KB
Other (.mjs)
21KB
YAML
19KB
Other (.mts)
12KB
Other (no ext)
10KB
Text
5KB
Shell
2KB

The LLM identified 5 files worth highlighting for reuse:

Defines a hierarchy of custom error classes (ArgumentError, CommandExecutionError, EmptyResultError, AuthRequiredError, TimeoutError, CliError) with machine-readable codes and Unix exit codes. Used consistently across all adapters and core modules. This is a standalone, well-crafted pattern that can be extracted into any CLI project to provide structured error handling for AI agents and programmatic consumers.

file: src/errors.ts ↗ | tags: #error-hierarchy #typed-errors #exit-codes

Implements reusable data transformation steps (select, map, filter, sort, limit) for the pipeline system. Each step is a pure function that takes a data array and parameters, returning a transformed array. These steps are decoupled from browser automation and can be extracted and reused in any data processing pipeline (e.g., ETL, API response shaping). Demonstrates clean functional composition.

file: src/pipeline/steps/transform.ts ↗ | tags: #data-transformation #pipeline-step #declarative-processing

Provides a reusable `registerSiteAuthCommands` function that generates `whoami` and `login` commands for any site using cookie-based authentication. It accepts a site name, cookie name, and a probe function to verify login state. This pattern is used by dozens of adapters and can be extracted to standardize auth command registration across any CLI tool that manages multiple authenticated services.

file: clis/_shared/site-auth.js ↗ | tags: #authentication-pattern #command-factory #cookie-auth

Implements a disk-based network request cache with 24-hour TTL, file permissions (0o600), and key derivation from request method/URL/headers. Used to persist captured browser network responses for replay and analysis. The caching logic is self-contained and could be reused in any Node.js application that needs to cache HTTP responses with security-conscious file handling.

file: src/browser/network-cache.ts ↗ | tags: #network-caching #request-capture #disk-cache

Provides a comprehensive redaction system for sensitive data in network requests and responses. It scrubs headers (cookies, authorization), tokens, JWTs, and PII patterns from URLs, bodies, and query parameters. The redaction logic is modular, configurable, and can be extracted into any application that needs to sanitize logs or captured traffic for security or privacy compliance.

file: src/observation/redaction.ts ↗ | tags: #data-redaction #security #pii-scrubbing
Last analyzed: 2026-10-06 05:21:03.475082
Next check: 2026-10-13 05:21:03.406548
$ submit: