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-zellij-namer

v1.1.3

Published

AI-powered dynamic Zellij session naming for OpenCode

Readme

opencode-zellij-namer

AI-powered dynamic Zellij session naming for OpenCode.

Automatically renames your Zellij terminal sessions based on what you're working on — project name, task type (feat, fix, debug, etc.), and contextual tags derived from your activity.

Screenshot showing Zellij session renamed to basicsetup-feat-namer

The plugin automatically renamed this session to basicsetup-feat-namer — project directory (basicsetup), intent (feat), and contextual tag (namer).

Features

  • Automatic naming: Sessions named like myproject-feat-auth or api-debug-cache
  • AI-powered: Uses Gemini 3 Flash to generate contextual, meaningful names
  • AGENTS.md aware: Reads project-specific naming conventions from your repo's AGENTS.md
  • Custom instructions: Personal naming preferences via env var (override AGENTS.md)
  • Non-blocking: Fire-and-forget design never slows down your workflow
  • Stability-first: Debouncing and cooldowns prevent name thrashing
  • Privacy-conscious: Only sends minimal context to AI (see Privacy)
  • Fallback heuristics: Works without AI using pattern matching

Installation

# Install globally
npm install -g opencode-zellij-namer

# Or add to your OpenCode config

Add to your ~/.config/opencode/opencode.json:

{
  "plugin": ["opencode-zellij-namer"]
}

Configuration

All configuration is via environment variables:

| Variable | Default | Description | |----------|---------|-------------| | GEMINI_API_KEY | - | Google AI API key for smart naming | | OPENCODE_ZELLIJ_DEBUG | 0 | Set to 1 for debug logging | | OPENCODE_ZELLIJ_COOLDOWN_MS | 300000 | Minimum ms between renames (5 min) | | OPENCODE_ZELLIJ_DEBOUNCE_MS | 5000 | Debounce interval for checks (5 sec) | | OPENCODE_ZELLIJ_MODEL | gemini-3-flash-preview | Gemini model to use | | OPENCODE_ZELLIJ_MAX_SIGNALS | 25 | Max activity signals to retain | | OPENCODE_ZELLIJ_TIMEOUT_MS | 3000 | AI request timeout | | OPENCODE_ZN_INSTRUCTIONS | - | Custom naming instructions for AI | | OPENCODE_ZN_USE_AGENTS_MD | 1 | Set to 0 to disable AGENTS.md reading |

AGENTS.md Integration

The plugin automatically reads naming guidance from your project's AGENTS.md file. This allows you to define project-specific naming conventions that all contributors will follow.

Supported locations (checked in order):

  • ./AGENTS.md
  • ./.github/AGENTS.md
  • ./docs/AGENTS.md

Extracted sections (by priority):

  1. ## Naming or ## Session Naming — entire section content
  2. ## Guidelines — lines containing "naming", "session", "tag", or "intent"

Example AGENTS.md:

# My Project

## Session Naming

- Use team prefix "acme-" for all sessions
- Prefer ticket numbers as tags (e.g., acme-feat-jira123)
- Use "api" instead of "backend" for backend work

The plugin extracts this guidance and includes it in the AI prompt.

To disable: Set OPENCODE_ZN_USE_AGENTS_MD=0

Custom Instructions

You can provide custom instructions to guide the AI naming:

export OPENCODE_ZN_INSTRUCTIONS="Use short codenames. Prefer 'api' over 'backend'. Always include ticket numbers from todos."

This is useful for:

  • Enforcing team naming conventions
  • Using project codenames instead of directory names
  • Prioritizing certain context (e.g., ticket numbers)
  • Adjusting tag preferences

Precedence

When both AGENTS.md and custom instructions are present:

  1. AGENTS.md — Project-level guidance (shared with team)
  2. Custom Instructions — User-level overrides (personal preference)

Custom instructions take precedence over AGENTS.md when they conflict. This allows teams to define baseline conventions in AGENTS.md while individual developers can customize for their workflow.

Example

export GEMINI_API_KEY="your-api-key"
export OPENCODE_ZELLIJ_DEBUG=1
export OPENCODE_ZELLIJ_COOLDOWN_MS=600000  # 10 minutes

How It Works

Naming Format

project-intent[-tag]
  • project: From package.json name, git repo, or directory (max 20 chars)
  • intent: One of feat, fix, debug, refactor, test, doc, ops, review, spike
  • tag: Optional context like auth, api, cache (max 15 chars)

Examples

| Activity | Generated Name | |----------|---------------| | Working on new feature | myapp-feat | | Debugging auth issues | myapp-debug-auth | | Writing tests | api-test | | Refactoring database code | backend-refactor-db | | Reviewing PR | frontend-review |

Trigger Events

The plugin listens to these OpenCode events:

  • session.idle — After each AI turn completes
  • file.edited — When you edit files
  • command.executed — When you run commands
  • todo.updated — When todos change

Stability Mechanisms

  • Debounce: 5-second minimum between checks
  • Cooldown: 5-minute minimum between actual renames
  • Signal accumulation: Builds context over time for better naming

Uniqueness

While Zellij allows duplicate session names, this plugin attempts to generate unique names to help you distinguish between multiple sessions working on the same project.

Disambiguation strategy:

  1. Branch name: If on feat/user-auth, adds -auth tag
  2. Directory context: Working in src/payments/ adds -payments tag
  3. Task keywords: Todo mentioning "caching" adds -cache tag
  4. Time-based: Falls back to -am/-pm/-eve based on time of day
  5. Numeric suffix: Last resort adds -2, -3, etc.

Example scenario:

| Session | Context | Generated Name | |---------|---------|----------------| | Terminal 1 | Working on auth | myapp-feat-auth | | Terminal 2 | Same project, payments | myapp-feat-payments | | Terminal 3 | Same project, morning | myapp-feat-am |

This ensures you can identify which terminal is which at a glance, even with multiple sessions on the same project.

Privacy

When AI naming is enabled, the following data is sent to Google's Gemini API:

| Data | Example | Purpose | |------|---------|---------| | Project name | myapp | Anchor for session name | | Recent file paths | src/auth/login.ts | Infer working area | | Command names | npm test | Infer task type | | Todo summaries | fix login bug | Infer intent | | Conversation snippets | debug the auth flow | Contextual naming |

What is NOT sent:

  • File contents
  • Command output
  • Full conversation history
  • Environment variables
  • System information

To disable AI: Simply don't set GEMINI_API_KEY. The plugin falls back to heuristic naming.

Requirements

  • OpenCode v0.1.0+
  • Zellij terminal multiplexer
  • Node.js 18+
  • (Optional) Google AI API key for smart naming

Troubleshooting

Plugin not loading

Check OpenCode logs for errors. Enable debug mode:

export OPENCODE_ZELLIJ_DEBUG=1

Session not renaming

  1. Verify you're inside a Zellij session: echo $ZELLIJ_SESSION_NAME
  2. Check Zellij is in PATH: which zellij
  3. Wait for cooldown period (default 5 min)

AI naming not working

  1. Verify API key: echo $GEMINI_API_KEY
  2. Check network connectivity
  3. Enable debug logging to see AI responses

Development

Fork & Clone

  1. Fork this repo on GitHub
  2. Clone your fork:
git clone https://github.com/YOUR_USERNAME/opencode-zellij-namer
cd opencode-zellij-namer
  1. Update package.json with your fork's URL:
# Replace YOUR_USERNAME with your GitHub username
sed -i 's/24601/YOUR_USERNAME/g' package.json

Build & Test

npm install
npm run build
npm test

Local Development

To test your changes with OpenCode, update your config to point to your local build:

{
  "plugin": ["/path/to/your/opencode-zellij-namer"]
}

License

MIT — see LICENSE

Contributing

See CONTRIBUTING.md