@firatcand/roster 0.1.0

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.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +272 -0
  3. package/agents/critic.md +74 -0
  4. package/agents/enricher.md +56 -0
  5. package/agents/lesson-drafter.md +64 -0
  6. package/agents/pattern-detector.md +62 -0
  7. package/agents/promotion-arbiter.md +71 -0
  8. package/agents/prospector.md +51 -0
  9. package/agents/writer.md +58 -0
  10. package/bin/roster.js +2093 -0
  11. package/lib/.gitkeep +0 -0
  12. package/package.json +68 -0
  13. package/skills/chief-of-staff/SKILL.md +218 -0
  14. package/skills/dreamer/SKILL.md +112 -0
  15. package/skills/roster-orchestrator/SKILL.md +122 -0
  16. package/skills/sdr/SKILL.md +147 -0
  17. package/templates/CLAUDE.project.template.md +45 -0
  18. package/templates/CONTEXT.template.md +51 -0
  19. package/templates/env.example +25 -0
  20. package/templates/gitignore-defaults.txt +28 -0
  21. package/templates/scaffold/.config/functions.yaml +22 -0
  22. package/templates/scaffold/chief-of-staff/README.md +86 -0
  23. package/templates/scaffold/chief-of-staff/agent.md +122 -0
  24. package/templates/scaffold/chief-of-staff/logs/.gitkeep +0 -0
  25. package/templates/scaffold/chief-of-staff/plans/add-agent-to-project.yaml +45 -0
  26. package/templates/scaffold/chief-of-staff/plans/archive-project.yaml +51 -0
  27. package/templates/scaffold/chief-of-staff/plans/audit-agent.yaml +32 -0
  28. package/templates/scaffold/chief-of-staff/plans/audit-project.yaml +34 -0
  29. package/templates/scaffold/chief-of-staff/plans/audit-repo.yaml +26 -0
  30. package/templates/scaffold/chief-of-staff/plans/create-agent.yaml +123 -0
  31. package/templates/scaffold/chief-of-staff/plans/create-function.yaml +48 -0
  32. package/templates/scaffold/chief-of-staff/plans/create-project.yaml +65 -0
  33. package/templates/scaffold/chief-of-staff/plans/remove-agent-from-project.yaml +50 -0
  34. package/templates/scaffold/chief-of-staff/plans/rename-project.yaml +62 -0
  35. package/templates/scaffold/chief-of-staff/plans/unarchive-project.yaml +41 -0
  36. package/templates/scaffold/chief-of-staff/playbook/.gitkeep +0 -0
  37. package/templates/scaffold/conventions.md +608 -0
  38. package/templates/scaffold/design/.gitkeep +0 -0
  39. package/templates/scaffold/design/EXPERT.md +68 -0
  40. package/templates/scaffold/dreamer/README.md +32 -0
  41. package/templates/scaffold/dreamer/agent.md +101 -0
  42. package/templates/scaffold/dreamer/logs/.gitkeep +0 -0
  43. package/templates/scaffold/dreamer/pending/.gitkeep +0 -0
  44. package/templates/scaffold/dreamer/plans/nightly-reflection.yaml +113 -0
  45. package/templates/scaffold/dreamer/playbook/.gitkeep +0 -0
  46. package/templates/scaffold/dreamer/state.md +13 -0
  47. package/templates/scaffold/dreamer/subagents/lesson-drafter.md +56 -0
  48. package/templates/scaffold/dreamer/subagents/pattern-detector.md +55 -0
  49. package/templates/scaffold/dreamer/subagents/promotion-arbiter.md +64 -0
  50. package/templates/scaffold/gtm/EXPERT.md +83 -0
  51. package/templates/scaffold/gtm/sdr/.claude/settings.json +3 -0
  52. package/templates/scaffold/gtm/sdr/.mcp.json +21 -0
  53. package/templates/scaffold/gtm/sdr/README.md +46 -0
  54. package/templates/scaffold/gtm/sdr/agent.md +136 -0
  55. package/templates/scaffold/gtm/sdr/plans/cold-outreach.yaml +92 -0
  56. package/templates/scaffold/gtm/sdr/playbook/.gitkeep +0 -0
  57. package/templates/scaffold/gtm/sdr/projects/_demo/asset-references.md +7 -0
  58. package/templates/scaffold/gtm/sdr/projects/_demo/config/default.yaml +69 -0
  59. package/templates/scaffold/gtm/sdr/projects/_demo/log/feedback/.gitkeep +0 -0
  60. package/templates/scaffold/gtm/sdr/projects/_demo/log/runs/.gitkeep +0 -0
  61. package/templates/scaffold/gtm/sdr/projects/_demo/playbook/.gitkeep +0 -0
  62. package/templates/scaffold/gtm/sdr/subagents/critic.md +67 -0
  63. package/templates/scaffold/gtm/sdr/subagents/enricher.md +49 -0
  64. package/templates/scaffold/gtm/sdr/subagents/prospector.md +44 -0
  65. package/templates/scaffold/gtm/sdr/subagents/writer.md +51 -0
  66. package/templates/scaffold/logs/cron/.gitkeep +0 -0
  67. package/templates/scaffold/ops/.gitkeep +0 -0
  68. package/templates/scaffold/ops/EXPERT.md +84 -0
  69. package/templates/scaffold/product/.gitkeep +0 -0
  70. package/templates/scaffold/product/EXPERT.md +87 -0
  71. package/templates/scaffold/projects/_demo/CLAUDE.md +35 -0
  72. package/templates/scaffold/projects/_demo/README.md +16 -0
  73. package/templates/scaffold/projects/_demo/assets/.gitkeep +0 -0
  74. package/templates/scaffold/projects/_demo/config/default.yaml +28 -0
  75. package/templates/scaffold/projects/_demo/guidelines/asset-links.md +15 -0
  76. package/templates/scaffold/projects/_demo/guidelines/brand-book.md +25 -0
  77. package/templates/scaffold/projects/_demo/guidelines/icps/_persona-template.md +44 -0
  78. package/templates/scaffold/projects/_demo/guidelines/messaging.md +20 -0
  79. package/templates/scaffold/projects/_demo/guidelines/voice.md +29 -0
  80. package/templates/scaffold/projects/_demo/state.md +11 -0
  81. package/templates/scaffold/scripts/lib/README.md +13 -0
  82. package/templates/scaffold/scripts/lib/functions.sh +89 -0
  83. package/templates/scaffold/scripts/new-project.sh +125 -0
@@ -0,0 +1,34 @@
1
+ plan: audit-project
2
+ description: |
3
+ Validate a project's completeness. Reports issues with suggested fixes;
4
+ never auto-fixes. Checks required guideline files (non-template content),
5
+ optional files (presence only), root files, agent instances, and
6
+ instance↔CLAUDE.md consistency.
7
+
8
+ inputs:
9
+ project:
10
+ required: true
11
+ description: Project slug (must exist at projects/<slug>/).
12
+
13
+ outputs:
14
+ status: string # pass | warn | fail
15
+ report_path: string
16
+
17
+ steps:
18
+ - id: execute
19
+ tool: bash
20
+ args:
21
+ command: bash scripts/audit-project.sh ${inputs.project}
22
+ description: Run the backing audit script.
23
+
24
+ - id: report
25
+ description: |
26
+ Print the condensed summary to stdout. Reference the full report at
27
+ chief-of-staff/logs/<YYYY-MM>/audit-${inputs.project}-<YYYY-MM-DD-HHMM>.md.
28
+ Severity rules:
29
+ - Failure: required file missing/template, instance config invalid YAML,
30
+ instance project field mismatches folder name.
31
+ - Warning: optional file missing, instance not listed in CLAUDE.md,
32
+ last run > 30 days old.
33
+
34
+ approval_channel: session
@@ -0,0 +1,26 @@
1
+ plan: audit-repo
2
+ description: |
3
+ Full-repo audit. Runs project audits for every live project and agent
4
+ audits for every live agent. Aggregates into one report. Also checks
5
+ universal .mcp.json, universal .claude/settings.json, root CLAUDE.md /
6
+ conventions.md / README.md, and orphaned instances.
7
+
8
+ inputs: {}
9
+
10
+ outputs:
11
+ status: string # pass | warn | fail
12
+ report_path: string
13
+
14
+ steps:
15
+ - id: execute
16
+ tool: bash
17
+ args:
18
+ command: bash scripts/audit-repo.sh
19
+ description: Run the backing aggregator script.
20
+
21
+ - id: report
22
+ description: |
23
+ Print top-level summary. Reference the full report at
24
+ chief-of-staff/logs/<YYYY-MM>/audit-repo-<YYYY-MM-DD-HHMM>.md.
25
+
26
+ approval_channel: session
@@ -0,0 +1,123 @@
1
+ plan: create-agent
2
+ description: |
3
+ Create a new global agent under a registered function. Runs in one of two
4
+ modes:
5
+
6
+ - **stub** — byte-identical to `bash scripts/new-agent.sh`. Drops empty
7
+ placeholder files (purpose `<one paragraph...>`, plan stubs, etc.) and
8
+ exits. Headless / CI / legacy escape hatch.
9
+ - **guided** — runs the Guided Agent Creation dialogue defined in
10
+ `skills/chief-of-staff/SKILL.md` § "Guided Agent Creation" (see P4-T02).
11
+ Produces the same on-disk layout as stub mode, but with agent.md
12
+ sections filled in from the dialogue answers.
13
+
14
+ Either mode optionally instances the resulting agent into existing
15
+ projects (or prompts the caller to pick).
16
+
17
+ inputs:
18
+ function:
19
+ required: true
20
+ description: Function slug (must be registered in `.config/functions.yaml`).
21
+ agent:
22
+ required: true
23
+ description: Agent slug (lowercase, kebab-case, starts with letter).
24
+ mode:
25
+ required: false
26
+ description: |
27
+ Explicit branch override: `stub` or `guided`. If omitted, `resolve_mode`
28
+ picks based on env + TTY (see that step).
29
+ add-to-projects:
30
+ required: false
31
+ description: List of project slugs to instance into. If omitted, the cross-link prompt runs.
32
+
33
+ outputs:
34
+ agent_path: string
35
+ instance_paths: list
36
+ mode_used: string # "stub" or "guided" — which branch executed.
37
+ files_written: list # absolute paths of every file the plan created or modified.
38
+
39
+ steps:
40
+ - id: validate
41
+ description: |
42
+ Confirm ${inputs.function} is registered. Validate ${inputs.agent} slug
43
+ against `^[a-z][a-z0-9-]*$`. Confirm `${inputs.function}/${inputs.agent}/`
44
+ does not already exist. If ${inputs.mode} is provided, validate it is
45
+ one of {stub, guided}. If ${inputs.add-to-projects} provided, validate
46
+ each project exists at `projects/<slug>/`. If any are missing, abort.
47
+
48
+ - id: resolve_mode
49
+ description: |
50
+ Pick the scaffold branch by priority — first match wins:
51
+ 1. `${inputs.mode}` (if non-empty).
52
+ 2. `AGENT_TEAM_NO_CONFIRM=1` in env → `stub`. (Headless / CI signal.)
53
+ 3. TTY detection: stdin is a TTY → `guided`; otherwise → `stub`.
54
+
55
+ Store the result in `${resolved_mode}` and surface it later as
56
+ `${outputs.mode_used}`. Print the resolved mode + the rule that won
57
+ (e.g., `mode=guided (TTY detected)`) so the caller can see why.
58
+
59
+ - id: scaffold_stub
60
+ when: ${resolved_mode} == "stub"
61
+ tool: bash
62
+ args:
63
+ command: bash scripts/new-agent.sh ${inputs.function} ${inputs.agent}
64
+ description: |
65
+ Delegate to `scripts/new-agent.sh` unchanged. Output must remain
66
+ byte-identical to invoking the script directly — this is the legacy /
67
+ headless escape hatch and any drift breaks reproducibility for
68
+ callers that already script against the stub layout. Append every
69
+ path the script reports as "Created:" to `${files_written}`.
70
+
71
+ - id: guided_dialogue
72
+ when: ${resolved_mode} == "guided"
73
+ description: |
74
+ Run the Guided Agent Creation dialogue defined in
75
+ `skills/chief-of-staff/SKILL.md` § "Guided Agent Creation" (P4-T02).
76
+ That contract owns the prompt sequence, the structured-output schema,
77
+ validation rules, and the on-disk write list. It produces the same
78
+ directory layout as `scaffold_stub` (same paths, same `.gitkeep`s),
79
+ but with `agent.md` sections filled in from the dialogue answers and
80
+ a real description in `.claude/commands/<agent>.md` instead of the
81
+ `TODO: fill in description` placeholder. Append every file touched
82
+ to `${files_written}`.
83
+
84
+ - id: resolve_projects
85
+ description: |
86
+ Branch on whether ${inputs.add-to-projects} was provided.
87
+ - If provided: use the list directly.
88
+ - If omitted: discover all live projects (every dir under `projects/`
89
+ that is not `_template` and does not start with `_`). If empty,
90
+ skip instancing and report "no live projects yet."
91
+ Otherwise present a multi-select via AskUserQuestion with options
92
+ [All projects, ...each project, None — agent stays global-only]
93
+ and `multiSelect: true`.
94
+
95
+ - id: instance_into_projects
96
+ tool: bash
97
+ args:
98
+ command: |
99
+ for proj in ${resolved_projects}; do
100
+ bash scripts/new-agent-instance.sh "$proj" ${inputs.function} ${inputs.agent}
101
+ done
102
+ description: |
103
+ For each resolved project, run `new-agent-instance.sh` and append the
104
+ instance line to `projects/<project>/CLAUDE.md` under
105
+ `## Active agent instances`. Append every created instance path to
106
+ `${files_written}`.
107
+
108
+ - id: report
109
+ description: |
110
+ Print `${outputs.mode_used}`, the global agent path, every instance
111
+ path, and the full `${files_written}` list.
112
+
113
+ In **stub** mode, surface the script's "Next steps" output verbatim
114
+ (fill `agent.md`, add subagents, configure MCPs, add at least one
115
+ plan, edit the slash command description) — the placeholders are
116
+ still empty and the caller has to finish them.
117
+
118
+ In **guided** mode, those next steps are mostly already done. Print
119
+ only the residual ones: wire MCPs in `.mcp.json`, write the first
120
+ plan in `plans/`, and review the generated `agent.md` for any
121
+ dialogue answers that should be refined.
122
+
123
+ approval_channel: session
@@ -0,0 +1,48 @@
1
+ plan: create-function
2
+ description: |
3
+ Add a new function category to the registry. Scaffolds the folder, stub
4
+ README, and optionally an EXPERT.md stub. Surfaces a soft proliferation
5
+ reminder before scaffolding.
6
+
7
+ inputs:
8
+ function:
9
+ required: true
10
+ description: Function slug (lowercase, kebab-case, must not exist as a folder or in .config/functions.yaml).
11
+ description:
12
+ required: false
13
+ description: Free-text description of the function. If omitted, prompted.
14
+ has_expert:
15
+ required: false
16
+ description: Whether to scaffold an EXPERT.md stub. If omitted, prompted.
17
+
18
+ outputs:
19
+ function_path: string
20
+
21
+ steps:
22
+ - id: validate
23
+ description: |
24
+ Validate slug. Confirm not registered in .config/functions.yaml and no
25
+ top-level folder collision. Resolve ${inputs.description} and
26
+ ${inputs.has_expert} (prompt if absent).
27
+
28
+ - id: proliferation_reminder
29
+ description: |
30
+ Soft prompt: "Will you have 2-3 agents in this function in ~90 days?"
31
+ Require keypress to continue. The script's own prompt counts as the
32
+ confirmation gate — chief-of-staff just surfaces what the script will do.
33
+ approval: session
34
+
35
+ - id: execute
36
+ tool: bash
37
+ args:
38
+ command: bash scripts/create-function.sh ${inputs.function} --description "${inputs.description}" ${inputs.has_expert:+--with-expert}
39
+ description: Run the backing script.
40
+
41
+ - id: report
42
+ description: |
43
+ Print scaffolded paths. Surface post-creation reminders the script
44
+ prints: create #<slug> Slack channel, add SLACK_HITL_CHANNEL_<SLUG> to
45
+ .env, fill EXPERT.md stub if applicable, add the first agent via
46
+ new-agent.sh.
47
+
48
+ approval_channel: session
@@ -0,0 +1,65 @@
1
+ plan: create-project
2
+ description: |
3
+ Scaffold a new project at projects/<slug>/ and optionally instance a list of
4
+ agents into it. If no agent list is provided, prompt the user with a
5
+ multi-select of all globally-discovered agents.
6
+
7
+ inputs:
8
+ project:
9
+ required: true
10
+ description: Project slug (lowercase, kebab-case, starts with letter, must not collide live or in _archive).
11
+ agents:
12
+ required: false
13
+ description: List of <function>/<agent> to instance immediately. If omitted, the cross-link prompt runs.
14
+
15
+ outputs:
16
+ project_path: string
17
+ instance_paths: list
18
+
19
+ steps:
20
+ - id: validate
21
+ description: |
22
+ Confirm cwd is repo root. Validate ${inputs.project} slug. Confirm
23
+ projects/${inputs.project}/ does not exist live or in _archive/projects/.
24
+ If ${inputs.agents} provided, validate every <function>/<agent>/ exists globally.
25
+ If any are missing, abort and tell the user to run create-agent first.
26
+
27
+ - id: scaffold_project
28
+ tool: bash
29
+ args:
30
+ command: bash scripts/new-project.sh ${inputs.project}
31
+ description: Create projects/<project>/ with template files.
32
+
33
+ - id: resolve_agents
34
+ description: |
35
+ Branch on whether ${inputs.agents} was provided.
36
+ - If provided: use the list directly.
37
+ - If omitted: discover all <function>/<agent>/ folders containing agent.md
38
+ across functions registered in .config/functions.yaml. If empty, skip
39
+ instancing and report "no agents exist yet — run create-agent first."
40
+ Otherwise present a multi-select via AskUserQuestion with options
41
+ [All agents, ...each discovered <function>/<agent>, None — leave project bare]
42
+ and multiSelect: true. Resolve "All agents" to the full list,
43
+ "None" or empty to an empty list.
44
+
45
+ - id: instance_agents
46
+ tool: bash
47
+ args:
48
+ command: |
49
+ for entry in ${resolved_agents}; do
50
+ fn="${entry%/*}"; agent="${entry#*/}"
51
+ bash scripts/new-agent-instance.sh ${inputs.project} "$fn" "$agent"
52
+ done
53
+ description: |
54
+ For each resolved agent, run new-agent-instance.sh. Script prompts
55
+ interactively for tool bindings declared in the agent's
56
+ ## Tools and bindings section. Skip with Enter or "skip" to leave
57
+ placeholders. After each instance, append a line to
58
+ projects/${inputs.project}/CLAUDE.md under ## Active agent instances.
59
+
60
+ - id: report
61
+ description: |
62
+ Print all paths created — project root + every instance — and surface
63
+ the instance count.
64
+
65
+ approval_channel: session
@@ -0,0 +1,50 @@
1
+ plan: remove-agent-from-project
2
+ description: |
3
+ Remove an agent instance from a project. Always archives (no hard delete).
4
+ For permanent deletion, the user can manually rm -rf the archived copy.
5
+ Run history and project-scoped lessons live inside the instance — deletion
6
+ destroys evidence the dreamer needs.
7
+
8
+ inputs:
9
+ project:
10
+ required: true
11
+ description: Project slug.
12
+ function:
13
+ required: true
14
+ description: Function slug.
15
+ agent:
16
+ required: true
17
+ description: Agent slug.
18
+
19
+ outputs:
20
+ archive_path: string
21
+
22
+ steps:
23
+ - id: validate
24
+ description: |
25
+ Confirm instance exists at
26
+ ${inputs.function}/${inputs.agent}/projects/${inputs.project}/.
27
+
28
+ - id: confirmation
29
+ description: |
30
+ Show the planned move and CLAUDE.md update:
31
+
32
+ Will move:
33
+ ${inputs.function}/${inputs.agent}/projects/${inputs.project}/ → _archive/${inputs.function}/${inputs.agent}/projects/${inputs.project}-<date>/
34
+ And update:
35
+ projects/${inputs.project}/CLAUDE.md (remove instance from ## Active agent instances)
36
+ Proceed?
37
+
38
+ Wait for "proceed", "yes", "y". Abort cleanly if denied.
39
+ approval: session
40
+
41
+ - id: execute
42
+ tool: bash
43
+ args:
44
+ command: bash scripts/remove-agent-from-project.sh ${inputs.project} ${inputs.function} ${inputs.agent}
45
+ description: Run the backing script.
46
+
47
+ - id: report
48
+ description: Print the archive path and the operation log entry.
49
+
50
+ approval_channel: session
@@ -0,0 +1,62 @@
1
+ plan: rename-project
2
+ description: |
3
+ Rename a project everywhere it appears: project root, every agent instance
4
+ folder, and content references in CLAUDE.md / GUIDANCE.md / config files /
5
+ asset-references. Does NOT auto-update lesson, run, or feedback bodies —
6
+ those are historical evidence reviewed manually.
7
+
8
+ inputs:
9
+ old:
10
+ required: true
11
+ description: Current project slug (must exist at projects/<old>/).
12
+ new:
13
+ required: true
14
+ description: New slug (lowercase, kebab-case, must not exist live or in _archive).
15
+
16
+ outputs:
17
+ paths_renamed: list
18
+ unauto_updated_files: list
19
+
20
+ steps:
21
+ - id: validate
22
+ description: |
23
+ Confirm projects/${inputs.old}/ exists. Validate ${inputs.new} slug.
24
+ Confirm no collision live or archived. Find all instances at
25
+ <function>/<agent>/projects/${inputs.old}/ across the repo.
26
+
27
+ - id: confirmation
28
+ description: |
29
+ Show full list of folder moves AND in-file content updates:
30
+
31
+ Will rename folders:
32
+ projects/${inputs.old}/ → projects/${inputs.new}/
33
+ <function>/<agent>/projects/${inputs.old}/ → <function>/<agent>/projects/${inputs.new}/
34
+
35
+ Will replace project name in:
36
+ projects/${inputs.new}/CLAUDE.md
37
+ projects/${inputs.new}/GUIDANCE.md
38
+ <function>/*/projects/${inputs.new}/config/default.yaml (project: ${inputs.new})
39
+ <function>/*/projects/${inputs.new}/asset-references.md
40
+
41
+ WILL NOT auto-update:
42
+ - lesson frontmatter project: fields (review manually)
43
+ - run/feedback frontmatter project: fields
44
+ - text references inside lesson, run, or feedback bodies
45
+
46
+ Proceed?
47
+
48
+ Wait for "proceed", "yes", "y". Abort cleanly if denied.
49
+ approval: session
50
+
51
+ - id: execute
52
+ tool: bash
53
+ args:
54
+ command: bash scripts/rename-project.sh ${inputs.old} ${inputs.new}
55
+ description: Run the backing script.
56
+
57
+ - id: report
58
+ description: |
59
+ Print renamed paths. Surface the list of files that mention ${inputs.old}
60
+ in their content but were NOT auto-updated, for manual review.
61
+
62
+ approval_channel: session
@@ -0,0 +1,41 @@
1
+ plan: unarchive-project
2
+ description: |
3
+ Restore an archived project from _archive/ back to the live tree.
4
+
5
+ inputs:
6
+ project:
7
+ required: true
8
+ description: Project slug to restore.
9
+ archive_suffix:
10
+ required: false
11
+ description: Date/disambiguator suffix when multiple archives exist (e.g., 2026-04-26-2).
12
+
13
+ outputs:
14
+ restored_paths: list
15
+
16
+ steps:
17
+ - id: locate
18
+ description: |
19
+ Search _archive/projects/${inputs.project}-* for matches. If multiple,
20
+ list them and ask which to restore (use ${inputs.archive_suffix} if
21
+ provided to disambiguate).
22
+
23
+ - id: validate
24
+ description: |
25
+ Confirm no naming collision with currently-live projects/instances.
26
+
27
+ - id: confirmation
28
+ description: |
29
+ Show what will move and where. Wait for "proceed", "yes", "y".
30
+ approval: session
31
+
32
+ - id: execute
33
+ tool: bash
34
+ args:
35
+ command: bash scripts/unarchive-project.sh ${inputs.project} ${inputs.archive_suffix}
36
+ description: Run the backing script.
37
+
38
+ - id: report
39
+ description: Print restored paths and operation log entry.
40
+
41
+ approval_channel: session