Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/copilot-setup-steps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,6 @@ jobs:

- name: Install dependencies
run: npm ci

- name: Run tests
run: npm test
48 changes: 48 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Release

on:
push:
tags:
- 'v*.*.*'

jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
timeout-minutes: 15
steps:
- name: Checkout code
uses: actions/checkout@v5

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
cache: npm
registry-url: 'https://registry.npmjs.org'

- name: Verify tag matches package version
run: |
PACKAGE_VERSION="$(node -p \"require('./package.json').version\")"
EXPECTED_TAG="v${PACKAGE_VERSION}"

if [ "$GITHUB_REF_NAME" != "$EXPECTED_TAG" ]; then
echo "Expected tag $EXPECTED_TAG but got $GITHUB_REF_NAME" >&2
exit 1
fi

- name: Install dependencies
run: npm ci

- name: Run tests
run: npm test

- name: Verify package contents
run: npm pack --dry-run

- name: Publish package
run: npm publish --provenance
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
14 changes: 4 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,24 +12,18 @@
## Install the CLI

```bash
npm install -g git-tasks
npx git-tasks --help
npm install -g @atena-reply/git-tasks
npx @atena-reply/git-tasks --help
```

Until the npm package is published, install the current GitHub source with:

```bash
npm install -g github:Atena-IT/git-tasks
```

The package and skill are branded as `git-tasks`, while the GitHub repository URL remains `Atena-IT/git-tasks`.
The npm package is published as `@atena-reply/git-tasks`, while the installed command remains `git-tasks`. The GitHub repository URL remains `Atena-IT/git-tasks`.

## Install the Agent Skill

### One-command installer

```bash
npx git-tasks skill install --target all
npx @atena-reply/git-tasks skill install --target all
```

Available targets: `claude`, `copilot`, `codex`, `gemini`, `cline`, `all`.
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 13 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "git-tasks",
"name": "@atena-reply/git-tasks",
"version": "1.0.0",
"description": "AI-native GitHub issue planning via GitHub issues",
"type": "module",
Expand All @@ -8,8 +8,16 @@
},
"scripts": {
"test": "node --test test/cli.test.js",
"test:coverage": "node --test --experimental-test-coverage test/cli.test.js"
"test:coverage": "node --test --experimental-test-coverage test/cli.test.js",
"pack:dry-run": "npm pack --dry-run"
},
"files": [
"bin/",
"src/",
"skills/",
".claude-plugin/",
"README.md"
],
"repository": {
"type": "git",
"url": "git+https://github.com/Atena-IT/git-tasks.git"
Expand All @@ -29,6 +37,9 @@
"url": "https://github.com/Atena-IT/git-tasks/issues"
},
"homepage": "https://github.com/Atena-IT/git-tasks#readme",
"publishConfig": {
"access": "public"
},
"dependencies": {
"chalk": "^5.6.2",
"commander": "^14.0.3"
Expand Down
4 changes: 2 additions & 2 deletions skills/git-tasks/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: git-tasks
description: AI-native project management CLI for GitHub. Use when the user wants to inspect or update the planning hierarchy (epics, sprints, user stories), drive story lifecycle transitions (start work, ready for review, close), or integrate raw inputs such as client meeting notes or feature transcripts into the existing plan — either by updating open items or creating new ones as a diff. Do not use for reading a single issue or PR without any project-management intent; prefer standard gh commands for those one-off lookups. Triggers include "what's the current sprint status", "create a story for this feature", "move this story to in-progress", "close out the sprint", "update the plan based on today's meeting notes", or any request involving epics, sprints, or story lifecycle management.
allowed-tools: Bash(git-tasks:*), Bash(npx git-tasks:*)
allowed-tools: Bash(git-tasks:*), Bash(npx @atena-reply/git-tasks:*)
hidden: true
---

Expand All @@ -22,7 +22,7 @@ gh pr list
- Ensure `gh auth status` succeeds.
- Prefer `--short` output unless you need full issue bodies or comments.
- Start with `git-tasks overview --depth 2` before drilling into individual issues.
- Install the skill anywhere with `npx git-tasks skill install --target all`.
- Install the skill anywhere with `npx @atena-reply/git-tasks skill install --target all`.

## Recommended workflow

Expand Down
7 changes: 4 additions & 3 deletions test/cli.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -126,18 +126,19 @@ test('skill install fails for unknown targets', async () => {
}
});

test('package metadata targets git-tasks on Node.js 24+', async () => {
test('package metadata targets the scoped npm package on Node.js 24+', async () => {
const pkg = JSON.parse(fs.readFileSync(join(REPO_ROOT, 'package.json'), 'utf8'));
assert.equal(pkg.name, 'git-tasks');
assert.equal(pkg.name, '@atena-reply/git-tasks');
assert.equal(pkg.bin['git-tasks'], './bin/git-tasks.js');
assert.equal(pkg.publishConfig.access, 'public');
assert.equal(pkg.engines.node, '>=24');
});

test('agent skill is packaged in the installable repo layout', () => {
const skillPath = join(REPO_ROOT, 'skills', 'git-tasks', 'SKILL.md');
const skill = fs.readFileSync(skillPath, 'utf8');

assert.match(skill, /^---\nname: git-tasks\ndescription:/);
assert.match(skill, /^---\r?\nname: git-tasks\r?\ndescription:/);
assert.ok(skill.includes('git-tasks overview --depth 2'));
assert.ok(skill.includes('allowed-tools:'));
assert.ok(skill.includes('hidden: true'));
Expand Down
Loading