Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
c2b361e
refactor(core): run engine decomposition + context helpers [v0.3.0 — …
kokevidaurre Apr 13, 2026
4840c26
feat(run): workflow rewrite — smart skip, org cycle, wave execution […
kokevidaurre Apr 13, 2026
922934f
feat(conversation): agents talk + use tools [v0.3.0 — 3/7] (#733)
kokevidaurre Apr 13, 2026
f895b3c
feat(commands): review, credentials, goals, log + minor fixes [v0.3.0…
kokevidaurre Apr 14, 2026
6500aff
feat(init): demo agent scaffold, what's next guidance [v0.3.0 — 5/7] …
kokevidaurre Apr 14, 2026
08e646c
feat(security): PreToolUse guardrail hooks for agent sessions [v0.3.0…
kokevidaurre Apr 14, 2026
f83475b
test+docs: coverage + tier 2 docs + version bump 0.3.0 [v0.3.0 — 7/7]…
kokevidaurre Apr 14, 2026
aa09e59
fix(services): make agnostic — remove hardcoded paths [v0.3.0] (#738)
kokevidaurre Apr 14, 2026
c84aed3
fix(telemetry): restore write-only API key — broken since March 14 [v…
kokevidaurre Apr 14, 2026
5b32ab8
fix(ux): prerequisites check, no-args squad list, schedule hint [v0.3…
kokevidaurre Apr 14, 2026
426f222
ci(release): support @next dist-tag for pre-release versions
Apr 23, 2026
37cc424
fix(workflow): role-based timeouts + anti-collision rules [v0.3.0] (#…
kokevidaurre Apr 23, 2026
537d122
fix(audit): remove hardcoded values, extract prompts, parameterize co…
kokevidaurre Apr 23, 2026
3f5a1ab
feat: project-level config system — .squads/config.yml [v0.3.0] (#750)
kokevidaurre Apr 23, 2026
3a032ff
feat(templates): evaluation-first goals + add growth squad (#752)
kokevidaurre Apr 23, 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
17 changes: 16 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,29 @@ jobs:
- name: Build
run: npm run build

- name: Determine npm dist-tag
id: dist_tag
run: |
TAG="${GITHUB_REF#refs/tags/v}"
if [[ "$TAG" == *-* ]]; then
echo "npm_tag=next" >> "$GITHUB_OUTPUT"
echo "prerelease=true" >> "$GITHUB_OUTPUT"
echo "Publishing pre-release $TAG to @next"
else
echo "npm_tag=latest" >> "$GITHUB_OUTPUT"
echo "prerelease=false" >> "$GITHUB_OUTPUT"
echo "Publishing $TAG to @latest"
fi

- name: Publish to npm
run: npm publish --provenance --access public
run: npm publish --provenance --access public --tag ${{ steps.dist_tag.outputs.npm_tag }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
generate_release_notes: true
prerelease: ${{ steps.dist_tag.outputs.prerelease == 'true' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
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.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "squads-cli",
"version": "0.2.2",
"version": "0.3.0",
"description": "Your AI workforce. Every user gets an AI manager that runs their team — finance, marketing, engineering, operations — for the cost of API calls.",
"type": "module",
"bin": {
Expand Down
31 changes: 31 additions & 0 deletions src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ import { registerReleaseCommands } from './commands/release-check.js';
import { registerObservabilityCommands } from './commands/observability.js';
import { registerTierCommand } from './commands/tier.js';
import { registerServicesCommands } from './commands/services.js';
import { registerGoalsCommand } from './commands/goals.js';
import { registerCredentialsCommand } from './commands/credentials.js';
import { registerReviewCommand } from './commands/review.js';

// All other command handlers are lazy-loaded via dynamic import() inside
// action handlers. Only the invoked command's dependencies are loaded,
Expand Down Expand Up @@ -309,6 +312,9 @@ program
.option('--phased', 'Autopilot: use dependency-based phase ordering (from SQUAD.md depends_on)')
.option('--no-eval', 'Skip post-run COO evaluation')
.option('--org', 'Run all squads as a coordinated org cycle (scan → plan → execute → report)')
.option('--force', 'Force re-run squads that already completed today')
.option('--resume', 'Resume org cycle from where quota stopped it')
.option('--focus <mode>', 'Cycle focus: create, resolve, review, ship, research, cost (default: create)')
.addHelpText('after', `
Examples:
$ squads run engineering Run squad conversation (lead → scan → work → review)
Expand Down Expand Up @@ -408,6 +414,28 @@ exec.action(async (options) => {
return execListCommand(options);
});

// Log command - run history from observability JSONL
program
.command('log')
.description('Show run history with timestamps, duration, and status')
.option('-s, --squad <squad>', 'Filter by squad')
.option('-a, --agent <agent>', 'Filter by agent')
.option('-n, --limit <n>', 'Number of runs to show (default: 20)', '20')
.option('--since <date>', 'Show runs since date (e.g. 7d, 2026-04-01)')
.option('-j, --json', 'Output as JSON')
.addHelpText('after', `
Examples:
$ squads log Show last 20 runs
$ squads log --squad product Filter by squad
$ squads log --limit 50 Show last 50 runs
$ squads log --since 7d Runs in last 7 days
$ squads log --json Machine-readable output
`)
.action(async (options) => {
const { logCommand } = await import('./commands/log.js');
return logCommand({ ...options, limit: parseInt(options.limit, 10) });
});

// ─── Understand (situational awareness) ──────────────────────────────────────

// Dashboard command
Expand Down Expand Up @@ -1058,6 +1086,9 @@ registerReleaseCommands(program);
registerObservabilityCommands(program);
registerTierCommand(program);
registerServicesCommands(program);
registerGoalsCommand(program);
registerCredentialsCommand(program);
registerReviewCommand(program);

// Providers command - show LLM CLI availability for multi-LLM support
program
Expand Down
3 changes: 2 additions & 1 deletion src/commands/catalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ function noIdp(): boolean {
export function registerCatalogCommands(program: Command): void {
const catalog = program
.command('catalog')
.description('Service catalog — browse, inspect, and validate services');
.description('Service catalog — browse, inspect, and validate services')
.action(() => { catalog.outputHelp(); });

// ── catalog list ──
catalog
Expand Down
17 changes: 3 additions & 14 deletions src/commands/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -386,20 +386,9 @@ export async function contextPromptCommand(

const agentPath = `.agents/squads/${squadName}/${options.agent}.md`;

// Build the prompt for Claude
const prompt = `Execute the ${options.agent} agent from squad ${squadName}.

Read the agent definition at ${agentPath} and follow its instructions exactly.

CRITICAL INSTRUCTIONS:
- Work autonomously - do NOT ask clarifying questions
- Use Task tool to spawn sub-agents when needed
- Output findings to GitHub issues (gh issue create)
- Output code changes as PRs (gh pr create)
- Update memory files in .agents/memory/${squadName}/${options.agent}/
- Type /exit when done

Begin now.`;
// Prompt: identity + agent path only. All instructions in SYSTEM.md and agent.md.
const prompt = `You are ${options.agent} from squad ${squadName}.
Read your agent definition at ${agentPath} and your context layers. Execute your goals.`;

if (options.json) {
console.log(JSON.stringify({
Expand Down
Loading
Loading