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

devtask-radar

v0.1.4

Published

Local AI coding task radar: collect Claude Code / Codex / OpenCode events, run project-scoped analysis sessions, and project the result into a calendar-first daily task view.

Readme

DevTask Radar

DevTask Radar collects AI coding-agent events, groups them into conversation turns, runs project-scoped Claude Code analysis sessions, and projects the resulting task patches into a calendar-first daily task view.

Install & Run

Requires Node.js ≥ 24.

# Global install (recommended for personal use)
npm install -g devtask-radar
devtask-radar
# Starts in the background and opens http://127.0.0.1:8787

Or as a local dependency in a project:

npm install devtask-radar
npx devtask-radar

The global command runs like a small local service. Closing the terminal window does not stop DevTask Radar; use the CLI commands below:

devtask-radar status
devtask-radar stop
devtask-radar --fg              # foreground mode for development/debugging
devtask-radar --no-open         # start without opening the browser
devtask-radar --port 8790       # choose a port; default auto-fallback is 8787-8806
devtask-radar --host 0.0.0.0    # bind to all interfaces

On first start DevTask Radar will auto-install Claude Code / Codex hooks into your user-level CLI config so events flow in. To opt out:

DEV_TASK_RADAR_AUTO_INSTALL_CLI=0 devtask-radar              # macOS / Linux
$env:DEV_TASK_RADAR_AUTO_INSTALL_CLI = "0"; devtask-radar   # PowerShell

Default URLs after start:

  • Worker and calendar UI: http://127.0.0.1:8787
  • Health check: http://127.0.0.1:8787/api/health
  • SSE stream: http://127.0.0.1:8787/stream

Useful environment variables

| Var | Default | Purpose | |---|---|---| | DEV_TASK_RADAR_HOST | 127.0.0.1 | Listen host | | DEV_TASK_RADAR_PORT | 8787 | Listen port | | DEV_TASK_RADAR_PID_FILE | OS temp dir .devtask-radar.pid | Background CLI PID file | | DEV_TASK_RADAR_DATA_DIR | Windows: %LOCALAPPDATA%\DevTask Radar; macOS: ~/Library/Application Support/DevTask Radar; Linux: ~/.local/share/devtask-radar | SQLite + settings location | | DEV_TASK_RADAR_ANALYSIS_DATA_DIR | <data>/analysis-runtime | AI profiles + Claude session history | | DEV_TASK_RADAR_AUTO_INSTALL_CLI | 1 | Auto-install Claude/Codex hooks on startup | | DEV_TASK_RADAR_ANALYSIS_WORKER | 1 | Spawn analyzer child process; set to 0 to disable | | DEV_TASK_RADAR_INLINE_ANALYSIS | 0 | Run analyzer inside the web process | | DEV_TASK_RADAR_ANALYSIS_POLL_MS | 2000 | Analyzer polling interval |

Develop from source

Clone the repo and run from the project root:

git clone https://github.com/SanQianX/devtask-radar.git
cd devtask-radar
npm install
npm start

npm start boots both the web server and the analyzer worker. Run only the analyzer with npm run analyzer, only the smoke tests with npm run smoke, or auto-reload on file changes with npm run dev.

Product Rule

  • Today shows all unfinished tasks plus tasks completed today.
  • Past dates show only tasks completed on that date.
  • Future dates are not clickable and are rejected by the API.
  • Unfinished tasks do not stay on past dates; they keep flowing forward to today.

The main API for the frontend is:

GET /api/days/:yyyy-mm-dd/tasks
GET /api/calendar/month?month=yyyy-mm

Claude Code Analysis

The worker uses the embedded Claude Agent SDK runner in apps/worker/src/lib/claude-cli-runner.js. It does not proxy or require any external AI module.

AI profiles, project bindings, and Claude terminal session records are stored in DevTask Radar's analysis data directory. By default that is:

%LOCALAPPDATA%\DevTask Radar\analysis-runtime

Override it with:

$env:DEV_TASK_RADAR_DATA_DIR = "$env:LOCALAPPDATA\DevTask Radar"
$env:DEV_TASK_RADAR_ANALYSIS_DATA_DIR = "$env:LOCALAPPDATA\DevTask Radar\analysis-runtime"

Each imported project gets its own work directory under the configured workspace root, using the project slug plus the -task suffix. Claude Code terminal sessions run in that project work directory, so switching projects in the analysis panel switches to that project's own Claude terminal history and cwd.

AI CLI Integration

On startup, DevTask Radar automatically detects supported local AI CLI settings and installs the matching hooks once. The UI has an AI CLI Integration view so you can see what was installed, repair missing hooks, or remove an integration later.

Claude Code and Codex are currently supported.

Claude Code hooks are merged into:

%USERPROFILE%\.claude\settings.json

Existing settings such as claude-mem enabled plugins are kept intact. If you remove the DevTask Radar hook from the UI, the worker remembers that choice and will not reinstall it on the next startup. Set this environment variable to disable startup auto-install:

$env:DEV_TASK_RADAR_AUTO_INSTALL_CLI = "0"

The generated hook config lives here:

connectors\claude-code\hooks.json

The hook scripts are fire-and-forget and post to http://127.0.0.1:8787/api/ingest/claude-code. The integration page also shows pushed hook events and recent conversation turns, so you can see prompts arrive while chatting in Claude Code.

Codex is installed through its notify command in:

%USERPROFILE%\.codex\config.toml

DevTask Radar preserves the original Codex notify command, adds connectors\codex\notify-hook.js in front of it, and reads the latest Codex session JSONL from %USERPROFILE%\.codex\sessions. User prompts and assistant replies are posted to http://127.0.0.1:8787/api/ingest/codex.

The activity feed has three display modes:

  • Normal user: only user prompts and AI replies.
  • Admin: user prompts, AI replies, and important file-changing tools such as Write, Edit, and MultiEdit.
  • Debug: every raw hook event, including reads, searches, lifecycle events, and all tool results.

Analysis Worker

DevTask Radar runs task extraction as a background worker. The web process receives CLI events and writes conversation turns into SQLite; the analyzer process continuously polls analysis_jobs, starts a project-scoped Claude Code analysis session with the configured DevTask Radar AI profile, and projects the AI output into the task list.

npm start starts both the web server and the analyzer worker by default. You can run only the analyzer with:

npm run analyzer

Useful switches:

$env:DEV_TASK_RADAR_ANALYSIS_WORKER = "0"      # do not auto-start the analyzer child process
$env:DEV_TASK_RADAR_INLINE_ANALYSIS = "1"      # analyze inside the web process instead
$env:DEV_TASK_RADAR_ANALYSIS_POLL_MS = "2000"  # analyzer polling interval