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

@tumnel/codex

v0.1.5

Published

Secure outbound bridge between the Codex CLI agent and Tumnel web clients

Downloads

110

Readme

@tumnel/codex

Standalone connector that bridges the Codex CLI agent to Tumnel web clients. It spawns the same codex binary used by ChatGPT and Codex Desktop (@openai/codex-sdk over stdio), exposes it through the Tumnel bridge protocol, and lets Tumnel web clients build and control Codex threads with the same experience as the OpenCode connector: sessions, streaming turns, tools, and pairing.

Install and run the connector

The standard setup command prepares the host identity and starts the connector:

npx @tumnel/[email protected] install

connect remains available as an explicit alias:

npx @tumnel/[email protected] connect

The connector starts the Codex agent bridge and keeps it connected to the Tumnel relay until interrupted:

npx @tumnel/codex --model gpt-5-mini --sandbox workspace-write --approval-policy on-request

If --model (or CODEX_MODEL) is omitted, the web model picker still exposes a Codex default option and the SDK resolves the model from the local Codex configuration.

It binds a pairing-only endpoint to 127.0.0.1:43817 (use --port to override). It accepts approved OpenBridge origins, returns short-lived signed proofs, and never exposes Codex API keys or model credentials over localhost.

The host identity is an Ed25519 key pair stored at ~/.config/tumnel/identity.json. When OpenCode was installed first, Codex adopts its existing identity so the computer remains one paired Tumnel host. Codex still has an isolated connector channel, project/session state, events, and preferences. Legacy Codex identities are migrated automatically when no shared or OpenCode identity exists.

Configuration

| Flag | Environment | Default | | --- | --- | --- | | --relay-url | TUMNEL_RELAY_URL | https://openbridge.jlfloressanchez01.workers.dev | | --port | TUMNEL_LOCAL_PORT | 43817 | | --model | CODEX_MODEL | Codex default | | --sandbox | CODEX_SANDBOX | workspace-write | | --approval-policy | CODEX_APPROVAL_POLICY | on-request | | — | CODEX_REASONING_EFFORT | — | | — | CODEX_WEB_SEARCH | — | | — | CODEX_NETWORK_ACCESS | false | | — | CODEX_SKIP_GIT_REPO_CHECK | false | | — | CODEX_HOME | ~/.codex |

Architecture

  • buildUserMessage/itemPart map Codex thread items (agent_message, reasoning, command_execution, file_change, mcp_tool_call, web_search) to the frontend message/part shape used by the OpenCode connector.
  • A turn (session.prompt) runs thread.runStreamed(input, { signal }); every thread event is relayed as a session.status / message.updated / message.part.updated / session.idle bridge event, and the observed messages are served back through session.messages.
  • Projects and threads are discovered from the Codex desktop catalog (~/.codex/.codex-global-state.json and ~/.codex/session_index.jsonl) plus the persisted rollout files under ~/.codex/sessions/**/rollout-*.jsonl. This keeps project names/order and session titles aligned with the local Codex app while still allowing older rollouts to be reconstructed and resumed.

Known limitations

  • session.fork is not supported (the Codex SDK has no fork API).
  • Permission prompts are configured through CODEX_APPROVAL_POLICY; codex exec is non-interactive, so permission.list returns no pending approvals and the web approval cards are not shown for this connector.
  • session.messages reconstructs the visible history for discovered sessions from Codex rollout JSONL files, including user/assistant text and supported tool call output.
  • Only text and local file parts are forwarded; other attachment types are skipped.