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

@otto-assistant/bridge

v0.7.14

Published

<div align='center'> <br/> <br/> <h3>otto</h3> <p>Iron Man's Jarvis for coding agents, inside Discord</p> <br/> <br/> </div>

Downloads

1,352

Readme

Otto is a Discord bot that lets you control OpenCode coding sessions from Discord. Send a message in a Discord channel, an AI agent edits code on your machine.

Quick Start

npx -y @otto-assistant/bridge@latest

The CLI walks you through everything. Setup takes about 1 minute — you install the Otto bot to your Discord server with one click, pick your projects, and you're done.

What is Otto?

Otto connects Discord to OpenCode, a coding agent similar to Claude Code. Each Discord channel is linked to a project directory on your machine. When you send a message in that channel, Otto creates a thread and starts an OpenCode session that can:

  • Read and edit files
  • Run terminal commands
  • Search your codebase
  • Use any tools you've configured

Think of it as texting your codebase. You describe what you want, the AI does it.

┌─────────────┐         ┌─────────────────────────────────────────┐
│   Discord   │         │  Your Machine                           │
│             │         │                                         │
│  You send a │─────────▶  Otto CLI ──▶ OpenCode Server ──▶ AI   │
│  message in │         │                    │                    │
│  a channel  │◀────────│     responses      ▼                    │
│             │         │              Reads, edits, and          │
└─────────────┘         │              runs commands in           │
                        │              your project directory     │
                        └─────────────────────────────────────────┘

Setup

Run the CLI and follow the interactive prompts:

npx -y @otto-assistant/bridge@latest

The setup wizard gives you two options:

  • Gateway mode (default) — Uses Otto's pre-built Discord bot. No Discord Developer Portal setup needed. You click one install link, authorize the bot in your server, and you're running. This is the recommended path.
  • Self-hosted mode — You create your own Discord bot at discord.com/developers. Takes 5-10 minutes. Useful if you want full control over the bot identity.

Both modes work identically after setup. Keep the CLI running — it's the bridge between Discord and your machine.

Features

Text messages — Send any message in a channel linked to a project. Otto creates a thread and starts an OpenCode session.

File attachments — Attach images, code files, or any other files to your message. Otto includes them in the session context.

Voice messages — Record a voice message in Discord. Otto transcribes it using Google's Gemini API and processes it as text. The transcription uses your project's file tree for accuracy, recognizing function names and file paths you mention. Requires a Gemini API key (prompted during setup).

Session management — Resume sessions where you left off, fork from any message, or generate public URLs to share your session.

Message queue — Use /queue <message> to queue a follow-up while the AI is still responding. It sends automatically when the current response finishes. You can also end any message with . queue for the same behavior.

Memory — Otto reads a MEMORY.md file from your project root at session start. The AI can update this file to store learnings, decisions, and context worth preserving across sessions.

Tool permissions — When the AI tries to run something that needs approval (like shell commands or accessing files outside the project), Otto shows Accept / Accept Always / Deny buttons in the thread. Customize defaults in your project's opencode.json. See OpenCode Permissions docs.

Commands

Slash Commands

| Command | Description | |---|---| | /session <prompt> | Start a new session with an initial prompt | | /resume <session> | Resume a previous session (with autocomplete) | | /abort | Stop the current running session | | /add-project <project> | Create channels for an existing OpenCode project | | /create-new-project <name> | Create a new project folder and start a session | | /new-worktree <name> | Create a git worktree and start a session | | /merge-worktree | Merge worktree branch into default branch | | /model | Change the AI model for this channel or session | | /agent | Change the agent for this channel or session | | /share | Generate a public URL to share the current session | | /fork | Fork the session from a previous message | | /queue <message> | Queue a message to send after current response finishes | | /clear-queue | Clear all queued messages in this thread | | /undo | Undo the last assistant message (revert file changes) | | /redo | Redo the last undone message | | /screenshare | Share your screen via VNC tunnel (auto-stops after 1h) | | /screenshare-stop | Stop screen sharing | | /upgrade-and-restart | Upgrade otto to latest and restart the bot |

Otto also registers project-specific slash commands from OpenCode: commands become /name-cmd, skills become /name-skill, and MCP prompts become /name-cmd.

CLI

# Start the bot (interactive setup on first run)
npx -y @otto-assistant/bridge@latest

# Add a project directory as a Discord channel
npx -y @otto-assistant/bridge project add [directory]

# Start a session programmatically
npx -y @otto-assistant/bridge send --channel <channel-id> --prompt "your prompt"

# Upgrade otto and restart
npx -y @otto-assistant/bridge upgrade

See CI & Automation docs for the full send command reference, GitHub Actions examples, and scheduled tasks.

Access Control

Otto checks Discord permissions before processing any message. Users need one of:

  • Server Owner
  • Manage Server permission
  • Administrator permission
  • "otto" role — create a role with this name (case-insensitive) and assign it to trusted users

The "otto" role is the recommended approach for team access. Messages from users without any of these are ignored.

Blocking access — Create a role named "no-otto" (case-insensitive) to block specific users, even server owners. Useful for preventing accidental bot triggers in shared servers.

Multi-agent orchestration — Other Discord bots are ignored by default. Assign the "otto" role to another bot to let it trigger Otto sessions.

Model & Agent Configuration

Set the AI model in your project's opencode.json:

{
  "model": "anthropic/claude-sonnet-4-20250514"
}

Format: provider/model-name. Examples: anthropic/claude-opus-4-20250514, openai/gpt-4o, google/gemini-2.5-pro.

Or use /model and /agent slash commands to change settings per channel or session.

Best Practices

Create a dedicated Discord server for your agents. This keeps coding sessions separate from other servers and gives you full control over permissions.

Use the "otto" role for team access. Assign it to users who should be able to trigger sessions.

Send long prompts as file attachments. Discord has character limits. Tap the plus icon and use "Send message as file" for longer prompts. Otto reads file attachments as your message.

Advanced Topics

  • Advanced Setup — Running multiple instances, multiple Discord servers, architecture details
  • CI & Automation — Programmatic sessions, GitHub Actions, scheduled tasks, per-session permissions
  • Screen Sharing — Share your screen via browser link (macOS & Linux setup)
  • Internals — How Otto works under the hood (SQLite, lock port, channel metadata, voice processing)