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

@jiraacp/cli

v2026.405.4

Published

AI-powered Jira pipeline CLI: Ticket → Code → GitHub → Deploy → Notify

Downloads

26

Readme

jira-acp

AI-powered Jira pipeline CLI: Ticket → Code → GitHub → Deploy → Notify

npm version Node.js License: MIT

jiraACP automates the full ticket lifecycle for small dev teams. Pick up a Jira ticket in the morning — by the time you check Telegram, it's been analyzed, coded, reviewed, and deployed. Ambiguous tickets send a clarification message instead of silently failing.


Installation

npm install -g @jiraacp/cli

Requirements: Node.js >= 20, Claude Code installed globally.


Quick Start

# 1. Configure a project (interactive wizard)
jiraACP init

# 2. Start the background server
jiraACP start

# 3. Run the pipeline for a ticket
jiraACP run PROJ-123

Two Binaries

| Binary | Purpose | |--------|---------| | jiraACP | Pipeline CLI — all commands | | jiraACP-mcp | Jira MCP server — auto-configured for Claude Code agents |

jiraACP init writes .mcp.json into your workspace so Claude Code agents have Jira tools available automatically.


How It Works

Each project binds one Jira instance + one GitHub repo + one Claude Code workspace + one Telegram chat into a single orchestrated unit.

9-Stage Pipeline

| Stage | What happens | Model | |-------|-------------|-------| | 1. Fetch | Pull assigned Jira tickets | Haiku | | 2. Analyze | Clarity scoring — criteria, design, dependencies | Haiku→Sonnet | | 3. Clarify | Telegram prompt if ambiguous, await human reply | Haiku | | 4. Code | Claude Code implements the ticket in your workspace | Sonnet/Opus | | 5. Git | Create branch, commit, push, open PR | Haiku | | 6. Review | Two-agent PR review, auto-merge if clean | Sonnet×2 | | 7. Deploy | Run your deploy script | Haiku | | 8. Test | Playwright agent tests on dev server | Sonnet | | 9. Notify | Jira: transition + comment. Telegram: done | Haiku |

Stage 4 auto-upgrades to Opus for auth, payments, DB schema changes, or cross-module refactoring.


CLI Reference

Server (Daemon)

jiraACP start [--port 3100]   # Start background server
jiraACP stop                   # Stop background server
jiraACP restart                # Restart background server
jiraACP status                 # Check if server is running
jiraACP logs [-f] [-n 100]     # Tail server logs

Setup

jiraACP init [--dir <path>]            # Interactive setup wizard
jiraACP doctor [--fix]                 # Health-check all integrations
jiraACP update-context                 # Regenerate CLAUDE.md from codebase scan
jiraACP projects list|add|remove       # Manage configured projects

Pipeline

jiraACP run <ticketKey> [options]
  --project <name>    Target project (default: auto-detect from git)
  --from <stage>      Start from this stage
  --to <stage>        End at this stage
  --dry-run           Simulate without side effects
  --no-confirm        Non-interactive mode

jiraACP sprint [--project] [--sprint] [--parallel 2] [--filter <jql>] [--dry-run]
jiraACP triage [--project] [--sprint]

Monitoring

jiraACP status [ticketKey]             # Daemon status, or pipeline state for a ticket
jiraACP logs [ticketKey] [-f]          # Server logs, or ticket pipeline logs
jiraACP dashboard [--watch]            # Terminal UI of active runs
jiraACP replay <ticketKey>             # Replay completed run event log
jiraACP usage [--month YYYY-MM]        # Token cost report per project

Control

jiraACP pause <ticketKey>
jiraACP resume <ticketKey>
jiraACP abort <ticketKey> [--reason]
jiraACP cancel-clarification <ticketKey>

Config

jiraACP config get [<key>]
jiraACP config set <key> <value>
jiraACP config edit

Schedule

jiraACP schedule add --cron "0 9 * * 1-5" --project <name>
jiraACP schedule list
jiraACP schedule remove <id>

Utilities

jiraACP serve [--port 3100]    # Foreground webhook server (for dev/Docker)

Configuration

Configs live at ~/.jira-acp/:

~/.jira-acp/
├── config.json              # Global shared settings (tokens, pipeline defaults)
└── projects/
    └── my-project.json      # Per-project overrides

Global config (~/.jira-acp/config.json)

Shared settings across all projects:

{
  "telegram": { "botToken": "env:TELEGRAM_BOT_TOKEN" },
  "github": { "token": "env:GITHUB_TOKEN" },
  "pipeline": {
    "maxCostUsdPerRun": 2.0,
    "skipClarificationIfClear": true,
    "failOnDeployFailure": true
  }
}

Project config (~/.jira-acp/projects/<name>.json)

Project-specific settings (override global):

{
  "name": "my-saas",
  "jira": {
    "url": "https://myteam.atlassian.net",
    "email": "[email protected]",
    "token": "env:JIRA_TOKEN",
    "projectKey": "PROJ",
    "clarityScoreThreshold": 0.7
  },
  "github": {
    "owner": "myorg",
    "repo": "my-saas",
    "defaultBranch": "main",
    "autoMergeStrategy": "squash"
  },
  "workspace": {
    "rootDir": "/path/to/codebase"
  },
  "telegram": {
    "chatId": "-1001234567890"
  }
}

Use "env:VAR_NAME" for any sensitive value — safe to commit the config file.


Human-in-the-Loop

jiraACP contacts you on Telegram when a decision is needed:

| Trigger | What you get | |---------|-------------| | Clarity score below threshold | Questions + /answer PROJ-123 template | | PR review: major issues | PR diff + Approve / Reject buttons | | Merge conflict | Conflicting files + "I'll resolve" button | | Tests fail after 3 retries | Playwright screenshot + error + Re-run button | | Cost about to exceed limit | "Continue / Abort?" prompt |

Clarification timeout flow (default: 1 hour):

  • T+30m — reminder
  • T+45m — "Pipeline skips in 15 min"
  • T+60m — execute clarificationTimeoutAction (skip / abort / proceed-with-warning)

Telegram Commands

| Command | Action | |---------|--------| | /run <ticketKey> | Start pipeline for a ticket | | /abort <ticketKey> | Abort running pipeline | | /resume <ticketKey> | Resume paused pipeline | | /status | Active pipeline states | | /logs | Recent server log | | /tickets | Open tickets grouped by release version | | /ticket <key> | Ticket detail | | /projects | Configured projects | | /archive <key> | Close ticket topic | | /verbosity low\|medium\|high | Notification verbosity |


Crash Recovery

Pipelines survive crashes. State is an append-only event log:

# Process killed mid-way through Stage 4 (Code)
jiraACP resume PROJ-123
# Detects dead lock, offers: "Resume from 'code'? [Y/n]"
# Replays events, restores context, restarts from Stage 4

State stored per-ticket at ~/.jira-acp/runs/<project>/<ticketKey>/.


Security

  • No plaintext secrets — use "env:VAR_NAME" in config. jiraACP doctor warns on plaintext tokens.
  • Minimal env forwarding — agents receive only PATH, HOME, ANTHROPIC_API_KEY, project vars. Never full process.env.
  • No shell injection — all subprocess calls use spawn(cmd, argsArray), never exec(templateString).
  • Agent path scoping — writes restricted to workspace.allowedPaths.
  • Telegram filtering — only messages from configured chatId accepted.
  • Atomic locksO_EXCL open flag, crash-safe, no zombie pipelines.

Requirements

| Tool | Version | Purpose | |------|---------|---------| | Node.js | >= 20 | Runtime | | Claude Code | latest | AI coding agent | | Jira Cloud | — | Ticket source | | GitHub | — | PR target | | Telegram Bot | — | Notifications + human-in-the-loop |


License

MIT