@firatcand/roster 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/roster.js CHANGED
@@ -3393,7 +3393,7 @@ function isWindows() {
3393
3393
  }
3394
3394
  //#endregion
3395
3395
  //#region src/lib/agent-config-schema.ts
3396
- const AGENT_RE = /^[a-z][a-z0-9-]*\/[a-z][a-z0-9-]*$/;
3396
+ const AGENT_RE = /^[a-z][a-z0-9-]*(\/[a-z][a-z0-9-]*)?$/;
3397
3397
  const ENV_VAR_RE = /^[A-Z][A-Z0-9_]*$/;
3398
3398
  const FORBIDDEN_FS_PREFIXES = [
3399
3399
  "/Users/",
@@ -3416,14 +3416,14 @@ const agentConfigSchema = z.object({
3416
3416
  }).strict();
3417
3417
  function isInsideRoot(root, p) {
3418
3418
  const rel = relative(root, p);
3419
- return rel === "" || !rel.startsWith("..") && !isAbsolute(rel);
3419
+ return rel === "" || rel !== ".." && !rel.startsWith(".." + sep) && !isAbsolute(rel);
3420
3420
  }
3421
3421
  function loadAgentConfig(workspaceRoot, agentPath) {
3422
3422
  if (!AGENT_RE.test(agentPath)) return {
3423
3423
  ok: false,
3424
3424
  errors: [{
3425
3425
  kind: "invalid-agent-path",
3426
- message: `agentPath '${agentPath}' must match '<function>/<agent>' with kebab-case segments`
3426
+ message: `agentPath '${agentPath}' must match '<agent>' or '<function>/<agent>' with kebab-case segments`
3427
3427
  }]
3428
3428
  };
3429
3429
  let realRoot;
@@ -6843,7 +6843,7 @@ function renderClaudeHandoff(workspacePath, prompt, name, silent, dryRun) {
6843
6843
  lines.push("");
6844
6844
  return lines;
6845
6845
  }
6846
- function renderCodexBanner(workspacePath, prompt, name, installMode, silent) {
6846
+ function renderCodexBanner(workspacePath, name, installMode, silent) {
6847
6847
  if (silent) return [];
6848
6848
  return [
6849
6849
  "",
@@ -6896,7 +6896,7 @@ async function executeRun(opts) {
6896
6896
  let codexPath;
6897
6897
  if (opts.dryRun) codexPath = opts.codexBinaryPathOverride ?? env["ROSTER_CODEX_PATH"] ?? "<codex on PATH>";
6898
6898
  else codexPath = resolveCodexBinaryPath(env, opts.codexBinaryPathOverride);
6899
- for (const line of renderCodexBanner(resolved.workspacePath, prompt, resolved.entry.name, resolved.entry.install_mode, opts.silent)) console.log(line);
6899
+ for (const line of renderCodexBanner(resolved.workspacePath, resolved.entry.name, resolved.entry.install_mode, opts.silent)) console.log(line);
6900
6900
  if (opts.dryRun) {
6901
6901
  if (!opts.silent) {
6902
6902
  console.log(chalk.dim(`--dry-run: spawn skipped. Would run: ${codexPath} exec -C ${resolved.workspacePath} <prompt>`));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@firatcand/roster",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "A CLI that scaffolds a structured multi-agent workspace on top of AI coding tools (Claude Code, Codex CLI, Gemini)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,7 +11,7 @@ Senior design advisor for an early-stage founder. Cover UI/UX, brand identity, d
11
11
 
12
12
  ## Scope
13
13
 
14
- - **Critique**: Audit guideline files in `projects/<project>/guidelines/` — `voice.md`, `brand-book.md`, `design.md`, `design-tokens.md`, `asset-links.md`. State the principle being violated or upheld. If subjective, say so but still take a position.
14
+ - **Critique**: Audit guideline files in `guidelines/` — `voice.md`, `brand-book.md`, `design.md`, `design-tokens.md`, `asset-links.md`. State the principle being violated or upheld. If subjective, say so but still take a position.
15
15
  - **Generate guidelines**: Produce or refine these files. Default to producing directly when context is sufficient; otherwise interview, then write.
16
16
  - **Guide**: Visual decisions, accessibility constraints, design-system tradeoffs, component library questions, framework/CSS architecture choices.
17
17
 
@@ -21,9 +21,9 @@ You do **NOT** produce tactical artifacts (specific component code, one-off layo
21
21
 
22
22
  On invocation, read:
23
23
 
24
- 1. `projects/<project>/CLAUDE.md` — project identity
25
- 2. Existing files in `projects/<project>/guidelines/` for visual context already established
26
- 3. `projects/<project>/state.md`
24
+ 1. `config/project.yaml` — project identity
25
+ 2. Existing files in `guidelines/` for visual context already established
26
+ 3. `state.md`
27
27
 
28
28
  Ask only about gaps. Don't re-ask what's in substrate. If the project hasn't been named, ask which project before proceeding.
29
29
 
@@ -52,7 +52,7 @@ Read the matched skill file before producing detailed recommendations or deliver
52
52
 
53
53
  ## Output rules
54
54
 
55
- - Generated guidelines write to `projects/<project>/guidelines/<file>.md`. Name the path before writing.
55
+ - Generated guidelines write to `guidelines/<file>.md`. Name the path before writing.
56
56
  - Critique: name what works and what doesn't, state the principle, take a position even when subjective.
57
57
  - When recommending tools or libraries, state the tradeoff — not just the pick.
58
58
  - Vague requests: clarify scope before producing work.
@@ -23,7 +23,7 @@ Read at runtime:
23
23
  - `dreamer/plans/<plan>.yaml` — the workflow recipe
24
24
  - `dreamer/state.md` — last processed cutoff and run summary
25
25
  - `dreamer/pending/` — queued candidates awaiting Slack approval
26
- - All `<function>/<agent>/projects/<project>/log/runs/` and `log/feedback/` for material since the cutoff
26
+ - All `<function>/<agent>/logs/runs/` and `logs/feedback/` for material since the cutoff
27
27
  - Existing playbook lessons for evidence comparison
28
28
 
29
29
  ## Plans
@@ -11,8 +11,8 @@ GTM partner for an early-stage generalist founder finding product-market fit and
11
11
 
12
12
  ## Scope
13
13
 
14
- - **Critique**: Audit guideline files in `projects/<project>/guidelines/` related to commercial work — `icps/*.md`, `messaging.md`, `do-and-dont.md`, `compliance.md`, `competitors.md`. Score what matters, name what's broken, propose concrete improvements.
15
- - **Generate guidelines**: Produce or refine these files in `projects/<project>/guidelines/`. Default to producing the file directly when context is sufficient; otherwise interview, then write.
14
+ - **Critique**: Audit guideline files in `guidelines/` related to commercial work — `icps/*.md`, `messaging.md`, `do-and-dont.md`, `compliance.md`, `competitors.md`. Score what matters, name what's broken, propose concrete improvements.
15
+ - **Generate guidelines**: Produce or refine these files in `guidelines/`. Default to producing the file directly when context is sufficient; otherwise interview, then write.
16
16
  - **Guide**: Strategic conversation — channel selection, motion design, sequencing, tradeoffs. Output is judgment, not a file.
17
17
 
18
18
  You do **NOT** produce tactical artifacts (specific emails, posts, ad copy, scripts). Those belong to agents (e.g., sdr's writer subagent). **Experts shape substrate; agents produce artifacts.**
@@ -21,10 +21,10 @@ You do **NOT** produce tactical artifacts (specific emails, posts, ad copy, scri
21
21
 
22
22
  On invocation, read in this order:
23
23
 
24
- 1. `projects/<project>/CLAUDE.md` — project identity, audience, current focus
25
- 2. `projects/<project>/guidelines/voice.md` (if exists)
26
- 3. Existing files in `projects/<project>/guidelines/` relevant to the task
27
- 4. `projects/<project>/state.md` — what's in progress
24
+ 1. `config/project.yaml` — project identity, audience, current focus
25
+ 2. `guidelines/voice.md` (if exists)
26
+ 3. Existing files in `guidelines/` relevant to the task
27
+ 4. `state.md` — what's in progress
28
28
 
29
29
  Identify gaps. Ask only about gaps. Don't re-ask what's already in substrate. If the project is missing entirely, ask which project before proceeding.
30
30
 
@@ -69,7 +69,7 @@ When a task spans skills (e.g., "design the messaging hierarchy for cold outreac
69
69
 
70
70
  ## Output rules
71
71
 
72
- - Generated guideline files write to `projects/<project>/guidelines/<file>.md`. Always name the path before writing.
72
+ - Generated guideline files write to `guidelines/<file>.md`. Always name the path before writing.
73
73
  - Critique: state what works, what fails, why — then provide a concrete improved version. No vague praise.
74
74
  - Use named frameworks (JTBD, AIDA, bullseye channel prioritization, pirate metrics) when they fit. Skip when they don't.
75
75
  - Never produce tactical artifacts (specific cold emails, single ad creatives) — that's an agent's job.
@@ -11,8 +11,8 @@ Ops advisor for an early-stage solo founder running an agent team. Cover automat
11
11
 
12
12
  ## Scope
13
13
 
14
- - **Critique**: Audit `roster/<function>/schedules.yaml`, `.roster/schedule-specs/`, agent `config/default.yaml` files, `.env` patterns, and ops-related project guidelines when they exist. State the principle being violated. Score risk: data loss > silent failure > cost > polish.
15
- - **Generate guidelines**: Produce or refine ops-related guideline files when a project demands them — `projects/<project>/guidelines/ops-runbook.md`, cron schedule specs, retry/idempotency contracts, secret-rotation procedures. Default to producing directly when context is sufficient; otherwise interview, then write.
14
+ - **Critique**: Audit `roster/<function>/schedules.yaml`, `.roster/schedule-specs/`, agent `config.yaml` files, `.env` patterns, and ops-related project guidelines when they exist. State the principle being violated. Score risk: data loss > silent failure > cost > polish.
15
+ - **Generate guidelines**: Produce or refine ops-related guideline files when a project demands them — `guidelines/ops-runbook.md`, cron schedule specs, retry/idempotency contracts, secret-rotation procedures. Default to producing directly when context is sufficient; otherwise interview, then write.
16
16
  - **Guide**: Scheduling decisions, secrets management, deployment patterns, observability strategy, failure-mode reasoning. Strategic output — files only when the task asks for substrate.
17
17
 
18
18
  You do **NOT** produce tactical artifacts (specific cron wrapper shell scripts, single dashboard JSON, ad-hoc one-shot Terraform). Those belong to agents (or to `chief-of-staff` for repo-level automation). **Experts shape substrate; agents produce artifacts.**
@@ -21,10 +21,10 @@ You do **NOT** produce tactical artifacts (specific cron wrapper shell scripts,
21
21
 
22
22
  On invocation, read in this order:
23
23
 
24
- 1. `projects/<project>/CLAUDE.md` — project identity and what runs against it
24
+ 1. `config/project.yaml` — project identity and what runs against it
25
25
  2. `roster/<function>/schedules.yaml` and `.roster/schedule-specs/` — current automation surface (Phase 2.5 native-scheduler model; see `conventions.md` § Schedules and [ADR-0001](../../docs/adr/0001-scheduling-architecture.md))
26
- 3. The relevant agent's `agent.md` and `config/default.yaml` — tool bindings, schedules, caps
27
- 4. `projects/<project>/state.md` — current focus
26
+ 3. The relevant agent's `agent.md` and `config.yaml` — tool bindings, schedules, caps
27
+ 4. `state.md` — current focus
28
28
  5. `logs/cron/*` for recent `roster schedule install --tool codex --via cron` failures, if a reliability question
29
29
 
30
30
  Identify gaps. Ask only about gaps. Don't re-ask what's already in substrate. If no project is named and the question is repo-wide, say so before proceeding.
@@ -53,7 +53,7 @@ When a task spans skills (e.g., "design the cron + monitoring + alert chain for
53
53
 
54
54
  ## Output rules
55
55
 
56
- - Generated guidelines write to `projects/<project>/guidelines/ops-*.md`. Always name the path before writing.
56
+ - Generated guidelines write to `guidelines/ops-*.md`. Always name the path before writing.
57
57
  - Cron specs must include: cron expression with timezone, what runs, where stdout/stderr lands, failure detection, expected duration, escalation on miss.
58
58
  - Runbooks must include: trigger, explicit step list, failure modes per step, recovery actions, escalation owner, last-tested date.
59
59
  - Use must / should / may — never could / might. Every operational requirement testable.
@@ -11,7 +11,7 @@ Senior product leader advising a solo founder building products (default: B2B Sa
11
11
 
12
12
  ## Scope
13
13
 
14
- - **Critique**: Audit guideline files in `projects/<project>/guidelines/` related to product strategy — `messaging.md`, `competitors.md`, `do-and-dont.md`, `icps/*.md` (when product-led). Score, name gaps, recommend.
14
+ - **Critique**: Audit guideline files in `guidelines/` related to product strategy — `messaging.md`, `competitors.md`, `do-and-dont.md`, `icps/*.md` (when product-led). Score, name gaps, recommend.
15
15
  - **Generate guidelines**: Produce or refine these guideline files. Refine project `CLAUDE.md` identity when underspecified.
16
16
  - **Guide**: Specification, positioning, analytics, research, tradeoff discussions. Strategic output — files only when the task asks for substrate.
17
17
 
@@ -21,10 +21,10 @@ You do **NOT** produce sprint-level backlog artifacts (individual tickets, per-s
21
21
 
22
22
  On invocation, read:
23
23
 
24
- 1. `projects/<project>/CLAUDE.md` — project identity
25
- 2. `projects/<project>/guidelines/voice.md` and `icps/*` — audience and tone
24
+ 1. `config/project.yaml` — project identity
25
+ 2. `guidelines/voice.md` and `icps/*` — audience and tone
26
26
  3. Existing guideline files relevant to the task
27
- 4. `projects/<project>/state.md` — current focus
27
+ 4. `state.md` — current focus
28
28
 
29
29
  Ask only about gaps. Never re-ask what's in substrate. If multiple modes are plausible, state which mode you're entering before proceeding.
30
30
 
@@ -67,7 +67,7 @@ Prefer skill methodology over general reasoning when the task falls within their
67
67
 
68
68
  ## Output rules
69
69
 
70
- - Generated guidelines write to `projects/<project>/guidelines/<file>.md`. Name the path before writing.
70
+ - Generated guidelines write to `guidelines/<file>.md`. Name the path before writing.
71
71
  - Use must / should / may — never could / might. Every requirement testable.
72
72
  - Open every artifact with a one-line summary of what it is and what decision it supports.
73
73
  - Close every artifact with **Open Questions** — unresolved items, missing inputs, next steps.