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

opencode-agora

v0.4.5

Published

Agora - The Developer's Terminal Marketplace & Community Hub for OpenCode

Readme

agora

A terminal hub for developers and the agentic AI ecosystem — discover MCP servers and AI tools, skills and harnesses, follow the news, join the conversation, access the latest tech.

agora is a standalone CLI that puts everything a developer building for the future cares about in one terminal: a curated + live marketplace of MCP servers and agent tooling, a threaded community with reputation-weighted sort, a ranked news feed with on-cache AI summarization, and first-class install consent for declared permissions. Works offline by default; opt into the backend with agora auth login.

Install

# fastest path — runs in your current project
npx opencode-agora init

# or install once, use anywhere
npm i -g opencode-agora
agora welcome

From source (requires bun):

git clone https://github.com/IrgenSlj/agora.git
cd agora && bun install && bun run build && bun link

You can also compile a self-contained standalone binary (no Node or bun runtime required at run-time):

bun run build:binary   # produces dist/agora

Experimental. The compile works, but distributing the binary needs code signing (unsigned arm64 macOS binaries are killed on launch) and, for wider reach, notarization + a Homebrew tap. That packaging is tracked for an upcoming distribution cut; for now npm/npx remains the supported path.

The binary is published as both agora and opencode-agora.

Try it

agora welcome                          # guided tour, adapts when signed in
agora today                            # last 24h: news + community + trending
agora search mcp                       # 67 curated + live GitHub/HF results
agora install mcp-github --write --yes # install + write opencode.json
agora acquire mcp-postgres --dry-run   # preview scan-gated acquisition
agora doctor --probe                   # health check + description-drift detection
agora tui                              # 5-page full-screen interface

The default agora in a TTY drops you into a persistent shell that mixes bash dispatch (ls, git status) with free LLM chat (why is this slow?). It remembers you across sessions: /recall <query> searches your past conversations and /sessions lists them. /help lists the slash commands; /abc shows the single-letter shortcuts.

Commands

Run agora help for the grouped list, or agora help <command> for any of these:

| Group | Commands | |---|---| | Daily | welcome · today · bookmarks · share · open · author | | Marketplace | search · browse · trending · similar · compare · install · scan · acquire · outdated · workflows | | Stack | installed · doctor · freeze · sync · try · capabilities | | News | news (CLI) · TUI reader with AI summarization | | Community | community · thread · post · reply · vote · flag · discuss | | Account | auth login · auth status · profile · review · reviews · publish | | Moderation | admin hide · admin log · admin recompute (operator-only) | | Setup | init · use · config show/edit/doctor · notify · completions · ping | | Utility | export · watch · chat · mcp · tui · menu · preferences · history |

Every command supports --json for scripting and --help for inline manual.

Install consent & safe capability acquisition

agora install <id> is preview-only by default. With --write, items that declare a permissions manifest require an explicit --yes:

$ agora install mcp-filesystem --write
Permissions
  fs    ./**/*

This package declares permissions. Re-run with --yes to grant and install.
$ echo $?
1

The TUI install preview flips its footer to g grant + install d details n cancel when permissions are present. The list shows a dim [fs net exec] badge on any item with a non-empty manifest.

--write also runs a pre-install scan first — repo reachability, npm existence, recency, declared-permission consistency, description-injection patterns, and community flag count — and refuses to apply if any check fails (e.g. an item flagged enough times to auto-hide, or a package that 404s on npm). Run the scan standalone with agora scan <id>, or bypass the install gate with --skip-scan.

agora acquire <id|query> composes the full pipeline — resolve by id or capability query, create an install plan, run the scan gate, and write config — into one agent-callable action. The scan gate enforces three outcomes:

  • fail blocks the write (non-zero exit). Run agora scan <id> for details.
  • warn without --accept-warnings does not write. Re-run with --accept-warnings to proceed.
  • dry-run previews everything without writing.

For agents: the acquire MCP tool (via agora mcp) provides structured output the model can act on. The agora_acquire plugin tool is preview-only (dry-run); write-to-config requires the CLI or MCP tool.

The plugin also offers opt-in capability-gap detection (suggestAcquire): when the agent reaches for a tool the user lacks, it surfaces a non-intrusive agora_acquire suggestion. Stack memory (stackMemory, on by default) injects the current MCP stack + capabilities into compaction context so the agent remembers its tools across sessions.

Agent stack manager & capability acquisition

Beyond discovery, agora manages the MCP servers your agent actually uses — across opencode, Claude Code, Cursor, and Windsurf — from one place. Think package.json / Brewfile for your agent stack.

agora installed                 # every configured MCP server across all your tools, grouped
agora doctor                    # health: command resolvable? conflicting definitions?
agora doctor --probe            # probe + description-drift detection (canonical tool-schema hashing)
agora install mcp-github --write --save   # install AND record it in agora.toml
agora acquire mcp-postgres      # resolve → scan-gate → write config (safe agent-callable gateway)
agora acquire "postgres database" --dry-run   # resolve by capability query, preview only
agora acquire mcp-github --save --accept-warnings  # accept scan warnings and record in agora.toml
agora freeze --write            # snapshot your whole stack into agora.toml
agora sync                      # dry-run: what would change to match agora.toml
agora sync --write --yes        # apply it (preserves every unrelated config key)
agora sync --from <url|path>    # apply a shared manifest — clone someone's setup
agora try mcp-filesystem        # ephemeral test-drive: handshake, list tools, discard
agora capabilities "query a database"   # which of my servers can do X?

agora.toml is a portable, declarative manifest — commit it to a repo so anyone can reproduce your agent setup with agora sync --from <url>. sync is dry-run by default and never touches config keys it doesn't own. doctor --probe, try, and capabilities share a local cache of each server's discovered tool schemas — the local foundation for capability search. doctor --probe also computes a canonical descriptionDigest (SHA-256 of tool names + descriptions + input schemas) and detects DRIFT when re-probing shows a different digest.

Configuration

| Env | Meaning | |---|---| | AGORA_HOME | Override the data dir (default ~/.config/agora) | | AGORA_API_URL | Backend URL for --api reads, all writes, and agora ping | | AGORA_TOKEN | Bearer token (alternatively persisted by agora auth login) | | AGORA_LIVE_HUBS | 1 to merge live GitHub + HuggingFace into the marketplace | | AGORA_GITHUB_TOKEN | Raises the unauth 60 req/hr GitHub limit to 5000 | | AGORA_ADMIN_USER_IDS | Comma-separated user ids granted moderator commands | | EDITOR / VISUAL | Used by agora config edit | | NO_COLOR | Respect standard no-color convention |

Per-user state lives under ~/.config/agora/state.json (saves + auth), settings.toml (preferences), news-cache.jsonl, news-meta.json (bookmarks), hubs-cache.jsonl. All files holding user data are written 0o600 and atomically (.tmp + rename) so a crash mid-flush leaves the previous version intact.

OpenCode plugin

agora init registers the package as an OpenCode plugin, drops a .opencode/command/agora.md slash command, and enables:

  • 12 explicit named tools: agora_search, agora_today, agora_browse, agora_browse_category, agora_install, agora_scan, agora_acquire, agora_trending, agora_tutorial, agora_chat, agora_config, agora_news, agora_info
  • Lifecycle hooks: opt-in capability-gap detection (tool.execute.before) and stack memory injection on compaction (experimental.session.compacting)
  • SDK-preferring chat: uses client.session.prompt() when available, falls back to CLI spawn
  • Windows-compatible binary resolution: proper PATHEXT-aware lookup and .cmd/.bat spawning

agora_* tools are also reachable from any MCP client via agora mcp — add {"mcp": {"agora": {"command": ["agora", "mcp"]}}} to your opencode.json.

Architecture

src/cli/              command handlers, dispatch, shell, prompter, TUI
src/cli/pages/        five full-screen TUI pages (home, marketplace,
                      community, news, settings) + shared helpers
src/marketplace.ts    curated catalog + live hub merge + install planner
src/search/           offline BM25 catalog-search index
src/acquire.ts        capability-acquisition gateway (match → scan-gate → write)
src/opencode-exec.ts  unified opencode binary resolver (win32-safe) + spawn helper
src/curator/          AI curator (GitHub/HF discovery + verify, scheduled-safe)
src/stack/            cross-tool agent stack manager (opencode/claude/cursor/…)
src/stack/capability-cache.ts  tool-schema cache + description-drift detection
src/plugin/           OpenCode plugin (tools, hooks, SDK chat transport)
src/hubs/             GitHub + HuggingFace connectors + AI enrichment
src/community/        backend client + types
src/news/             scoring, cache, per-source adapters
src/state.ts          local state, saves, auth (atomic 0o600 writes)
src/scan.ts           pre-install safety scan (repo, npm, description-injection)
backend/src/index.ts  Cloudflare Workers + D1 (Hono router)
test/                 1155 tests, 51 files

agora is, at its core, a marketplace + community hub for agentic coding. On top of that it's grown a daily-driver layer — a cross-tool agent stack manager (agora installed / doctor, then agora.toml + sync) and a safe capability-acquisition gateway (agora acquire — resolve by id/query → scan gate → write config). The OpenCode plugin deepens integration with lifecycle hooks, SDK-preferring chat, and 12 explicit marketplace tools. See the roadmap for the plan.

See docs/ARCHITECTURE.md for the why-this-shape writeup and ROADMAP.md for what's next.

Development

bun test            # 805 cases, ~3.5s
bun run typecheck   # CLI + backend (typecheck:cli / typecheck:backend run both)
bun run build       # tsc + chmod +x dist/cli.js
bun src/cli.ts <cmd>  # run from source without building

cd backend && bun run dev          # local backend on wrangler
cd backend && bun run typecheck    # backend has its own tsconfig

PRs welcome — see CONTRIBUTING.md and COMMUNITY_GUIDELINES.md. The catalog accepts entries via PR; see src/data.ts for the shape.

A scripts/demo.tape is included for regenerating the README hero gif with VHS (brew install vhs && vhs scripts/demo.tapedocs/demo.gif).

License

MIT — © IrgenSlj.