Skip to content
Open
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
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