Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
14652db
feat(setup): migrate to global ~/.claude installation
eumaninho54 May 23, 2026
cdd97ef
docs(git-workflow): add fix branch naming convention
eumaninho54 May 23, 2026
3d546cb
remove(rules): delete jsx-style guide
eumaninho54 May 23, 2026
0d1f11c
feat(skills): add grill-me skill for interactive decision grilling
eumaninho54 May 23, 2026
ffec8f5
feat(init): add interactive architecture scanner
Gabriel-Pereira1788 May 23, 2026
5664737
cleanup(rules): drop jsx-style references
eumaninho54 May 23, 2026
5dd2c05
feat(agents): restructure roster for PDCA pipeline
eumaninho54 May 23, 2026
341643b
feat(feature): expand pipeline with grill, spec, dual review
eumaninho54 May 23, 2026
7f3d566
fix(init): replace bash find with Glob tool
Gabriel-Pereira1788 May 23, 2026
fd1a1ed
fix(init): replace bash grep with Grep tool
Gabriel-Pereira1788 May 23, 2026
4596bc6
fix(init): rewrite CLAUDE.md update logic
Gabriel-Pereira1788 May 23, 2026
fae2cf5
fix(init): limit file reading performance
Gabriel-Pereira1788 May 23, 2026
195143e
fix(init): add fallback after validation failures
Gabriel-Pereira1788 May 23, 2026
8e2aa12
fix(init): clarify sequential AskUserQuestion enforcement
Gabriel-Pereira1788 May 23, 2026
bbd927b
ci(release): migrate to semantic-release
eumaninho54 May 23, 2026
e394773
fix(setup): make baseDir optional for tests
eumaninho54 May 23, 2026
723cf3a
Merge branch 'feat/global-setup' of https://github.com/Salve-Software…
eumaninho54 May 23, 2026
a65cd48
feat(cli): add update subcommand
eumaninho54 May 23, 2026
8a242f1
feat(cli): add unsetup command
eumaninho54 May 24, 2026
b9b3e63
fix(setup): install to home dir
eumaninho54 May 24, 2026
19ee31c
docs: migrate architecture docs
eumaninho54 May 24, 2026
7c0902f
cleanup: remove old architecture docs
eumaninho54 May 24, 2026
d9af5fb
refactor(skills): emphasize conversation over deep exploration
eumaninho54 May 24, 2026
837cbfd
refactor(grill-me): conversation first approach
eumaninho54 May 24, 2026
ffae544
refactor(feature): consolidate GRILL+SPEC into unified phase
eumaninho54 May 24, 2026
5642b84
docs(feature): clarify handoff protocol and file outputs
eumaninho54 May 25, 2026
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
144 changes: 0 additions & 144 deletions .github/workflows/deploy.yml

This file was deleted.

26 changes: 0 additions & 26 deletions .github/workflows/enforce-release-branch.yml

This file was deleted.

46 changes: 46 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Release

on:
workflow_dispatch:

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
release:
name: Release
runs-on: ubuntu-latest

permissions:
contents: write
issues: write
pull-requests: write
id-token: write

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
registry-url: 'https://registry.npmjs.org'

- name: Install dependencies
run: npm ci

- name: Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GIT_AUTHOR_NAME: ${{ github.actor }}
GIT_AUTHOR_EMAIL: '${{ github.actor }}@users.noreply.github.com'
GIT_COMMITTER_NAME: ${{ github.actor }}
GIT_COMMITTER_EMAIL: '${{ github.actor }}@users.noreply.github.com'
run: npm run release
16 changes: 0 additions & 16 deletions .release-it.json

This file was deleted.

1 change: 0 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
@src/rules/skills-format.md
@src/rules/git-workflow.md
@src/rules/jsx-style.md

## Using skills

Expand Down
13 changes: 11 additions & 2 deletions bin/aiworkers.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import { createRequire } from 'module';
import boxen from 'boxen';
import { banner, c } from './banner.js';
import { setup } from './commands/setup.js';
import { update } from './commands/update.js';
import { unsetup } from './commands/unsetup.js';

const require = createRequire(import.meta.url);
const pkg = require('../package.json');
Expand All @@ -13,18 +15,25 @@ const command = process.argv[2];
if (command === 'setup') {
banner();
setup();
} else if (command === 'update') {
banner();
await update();
} else if (command === 'unsetup') {
banner();
unsetup();
} else if (command === '--version' || command === '-v') {
console.log(pkg.version);
} else if (!command || command === '--help' || command === '-h') {
banner();
console.log(boxen(
`${c.bold}Usage:${c.reset} aiworkers <command>\n\n` +
`${c.bold}Commands:${c.reset}\n\n` +
` ${c.cyan}setup${c.reset} Link AIWorkers into the current project's .claude/ folder\n` +
` ${c.cyan}setup${c.reset} Install AIWorkers into the global ~/.claude/ folder\n` +
` ${c.cyan}update${c.reset} Upgrade AIWorkers to the latest version on npm and re-sync\n` +
` ${c.cyan}unsetup${c.reset} Remove AIWorkers content from ~/.claude/ (keeps npm package)\n` +
` ${c.cyan}--version${c.reset} Print the installed version\n` +
` ${c.cyan}--help${c.reset} Show this help message\n\n` +
`${c.bold}Example:${c.reset}\n\n` +
` cd my-project\n` +
` aiworkers setup`,
{
padding: 1,
Expand Down
10 changes: 5 additions & 5 deletions bin/commands/setup.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import fs from 'fs';
import os from 'os';
import path from 'path';
import boxen from 'boxen';
import { c } from '../banner.js';
Expand Down Expand Up @@ -54,9 +55,8 @@ function updateClaudeMd(claudeMd, rulesDir) {
}
}

export function setup(targetDir) {
const resolvedTarget = targetDir ?? process.env.INIT_CWD ?? process.cwd();
const claudeDir = path.join(resolvedTarget, '.claude');
export function setup(baseDir = os.homedir()) {
const claudeDir = path.join(baseDir, '.claude');
const claudeMd = path.join(claudeDir, 'CLAUDE.md');

fs.mkdirSync(claudeDir, { recursive: true });
Expand All @@ -73,9 +73,9 @@ export function setup(targetDir) {
updateClaudeMd(claudeMd, path.join(AIWORKERS_DIR, 'src', 'rules'));

console.log(boxen(
`${c.green}${c.bold}Done!${c.reset} AIWorkers is ready in this project.\n\n` +
`${c.green}${c.bold}Done!${c.reset} AIWorkers is ready globally.\n\n` +
`${c.bold}What's next:${c.reset}\n` +
` ${c.cyan}1.${c.reset} Open Claude Code in this project\n` +
` ${c.cyan}1.${c.reset} Open Claude Code in any project\n` +
` ${c.cyan}2.${c.reset} Type ${c.bold}/feature${c.reset} to build a feature with the PDCA workflow\n` +
` ${c.cyan}3.${c.reset} Type ${c.bold}/rn-component${c.reset} to scaffold a React Native component\n` +
` ${c.cyan}4.${c.reset} Commit and push β€” Claude handles branching, commits, and PRs`,
Expand Down
66 changes: 66 additions & 0 deletions bin/commands/unsetup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import fs from 'fs';
import os from 'os';
import path from 'path';
import boxen from 'boxen';
import { c } from '../banner.js';

const AIWORKERS_SUBDIRS = ['commands', 'skills', 'agents', 'rules'];
const IMPORT_LINE_RE = /^@rules\/aiworkers\/[^\s]+\.md\s*$/;

function removeAiworkersDir(claudeDir, subdir) {
const target = path.join(claudeDir, subdir, 'aiworkers');
if (!fs.existsSync(target)) {
console.log(` ${c.gray}β€”${c.reset} ${subdir}/aiworkers ${c.dim}(not found)${c.reset}`);
return false;
}
fs.rmSync(target, { recursive: true, force: true });
console.log(` ${c.green}βœ“${c.reset} ${subdir}/aiworkers`);
return true;
}

function cleanClaudeMd(claudeMd) {
if (!fs.existsSync(claudeMd)) {
console.log(` ${c.gray}β€”${c.reset} CLAUDE.md ${c.dim}(not found)${c.reset}`);
return;
}
const lines = fs.readFileSync(claudeMd, 'utf8').split('\n');
const kept = lines.filter(line => !IMPORT_LINE_RE.test(line));
const removed = lines.length - kept.length;

if (removed === 0) {
console.log(` ${c.gray}β€”${c.reset} No aiworkers imports in CLAUDE.md`);
return;
}
fs.writeFileSync(claudeMd, kept.join('\n').replace(/\n{3,}$/, '\n\n').replace(/\n+$/, '\n'));
console.log(` ${c.green}βœ“${c.reset} Removed ${removed} import line(s) from CLAUDE.md`);
}

export function unsetup(baseDir = os.homedir()) {
const claudeDir = path.join(baseDir, '.claude');

if (!fs.existsSync(claudeDir)) {
console.log(`${c.dim} No ${claudeDir} found β€” nothing to remove.${c.reset}\n`);
return;
}

console.log(`${c.dim} Removing AIWorkers content from ${claudeDir}${c.reset}\n`);

console.log(` ${c.bold}Directories${c.reset}`);
for (const subdir of AIWORKERS_SUBDIRS) {
removeAiworkersDir(claudeDir, subdir);
}
console.log();

console.log(` ${c.bold}CLAUDE.md${c.reset}`);
cleanClaudeMd(path.join(claudeDir, 'CLAUDE.md'));

console.log(boxen(
`${c.green}${c.bold}Removed.${c.reset} AIWorkers content cleared from ${c.bold}~/.claude/${c.reset}`,
{
padding: 1,
margin: { top: 1, bottom: 1, left: 0, right: 0 },
borderStyle: 'round',
borderColor: 'green',
}
));
}
Loading
Loading