@jenga-ai/agent 1.0.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 (177) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +340 -0
  3. package/agents/ai_engineer.md +113 -0
  4. package/agents/developer.md +236 -0
  5. package/agents/scrum-master.md +349 -0
  6. package/agents/scrutiny-agent.md +137 -0
  7. package/agents/solution-assessor.md +185 -0
  8. package/agents/tester.md +339 -0
  9. package/bin/jenga.js +70 -0
  10. package/hooks/copilot_session_end.sh +29 -0
  11. package/hooks/on_session_end.sh +238 -0
  12. package/hooks/prompt_router.sh +11 -0
  13. package/hooks/prompt_router_helper.js +52 -0
  14. package/hooks/session_end_helper.js +29 -0
  15. package/hooks/session_end_watcher.sh +24 -0
  16. package/lib/commands/attach.js +47 -0
  17. package/lib/commands/init.js +207 -0
  18. package/lib/commands/start.js +16 -0
  19. package/lib/commands/status.js +53 -0
  20. package/lib/config-schema.js +72 -0
  21. package/lib/inject-settings.js +61 -0
  22. package/lib/mirror.js +244 -0
  23. package/lib/resolve-project-dir.sh +47 -0
  24. package/mcp/execute-ticket/index.js +10 -0
  25. package/mcp/execute-ticket/package.json +5 -0
  26. package/mcp/help/index.js +79 -0
  27. package/mcp/help/package.json +14 -0
  28. package/mcp/router/README.md +19 -0
  29. package/mcp/router/embedder.js +23 -0
  30. package/mcp/router/index.js +204 -0
  31. package/mcp/router/matcher.js +87 -0
  32. package/mcp/router/package-lock.json +1048 -0
  33. package/mcp/router/package.json +11 -0
  34. package/mcp/router/skill-index.js +104 -0
  35. package/package.json +47 -0
  36. package/scripts/board_resolver.sh +46 -0
  37. package/scripts/e25_s01_extract_board_graph.py +292 -0
  38. package/scripts/e25_s01_generate_synthetic_board.py +90 -0
  39. package/scripts/measurement-10x.json +50 -0
  40. package/scripts/measurement-10x.txt +4 -0
  41. package/scripts/measurement-real.json +50 -0
  42. package/scripts/measurement-real.txt +4 -0
  43. package/scripts/postinstall.js +165 -0
  44. package/scripts/todo_cleanup.sh +22 -0
  45. package/scripts/todo_manager.sh +86 -0
  46. package/scripts/validate-board.sh +190 -0
  47. package/scripts/validate-story-format.sh +53 -0
  48. package/skills/brainstorm/SKILL.md +47 -0
  49. package/skills/btw/SKILL.md +42 -0
  50. package/skills/commit/SKILL.md +29 -0
  51. package/skills/commit/assets/user_instructions_template.md +22 -0
  52. package/skills/continue/SKILL.md +29 -0
  53. package/skills/convert/SKILL.md +124 -0
  54. package/skills/convert/convert_cli.py +235 -0
  55. package/skills/convert/tests/sample.csv +4 -0
  56. package/skills/convert/tests/sample.json +5 -0
  57. package/skills/convert/tests/sample.jsonl +3 -0
  58. package/skills/convert/tests/sample.yaml +18 -0
  59. package/skills/convert/tests/sample_obj.csv +2 -0
  60. package/skills/convert/tests/sample_obj.json +9 -0
  61. package/skills/deep-dive/SKILL.md +167 -0
  62. package/skills/do/SKILL.md +88 -0
  63. package/skills/do/assets/sender_template.json +12 -0
  64. package/skills/doc/SKILL.md +314 -0
  65. package/skills/doc/assets/path-objectives.yaml +38 -0
  66. package/skills/doc-sync/SKILL.md +167 -0
  67. package/skills/doc-sync/assets/default_excludes.txt +21 -0
  68. package/skills/doc-sync/assets/doc_targets.md +14 -0
  69. package/skills/dooo/SKILL.md +60 -0
  70. package/skills/error/SKILL.md +29 -0
  71. package/skills/evaluate/SKILL.md +45 -0
  72. package/skills/evaluate/assets/evaluation_invokation_template.yml +3 -0
  73. package/skills/evaluate/assets/evaluation_rapport_template.md +24 -0
  74. package/skills/examplify/SKILL.md +42 -0
  75. package/skills/help/SKILL.md +36 -0
  76. package/skills/improve/SKILL.md +55 -0
  77. package/skills/index/scripts/board-index +4 -0
  78. package/skills/index/scripts/board_index.py +615 -0
  79. package/skills/index/scripts/smoke_test.sh +86 -0
  80. package/skills/init/SKILL.md +44 -0
  81. package/skills/init/assets/.gitignore_template +15 -0
  82. package/skills/init/assets/PROJECT_SUMMARY_template.md +13 -0
  83. package/skills/init/assets/directory_structure.txt +13 -0
  84. package/skills/init/assets/test-config_template.json +4 -0
  85. package/skills/init/assets/workflow_template.json +30 -0
  86. package/skills/init/scripts/init.sh +48 -0
  87. package/skills/jbp/SKILL.md +25 -0
  88. package/skills/jenga/SKILL.md +68 -0
  89. package/skills/lgtm/SKILL.md +21 -0
  90. package/skills/mirror-public/SKILL.md +237 -0
  91. package/skills/mirror-public/assets/config.json +5 -0
  92. package/skills/mirror-public/scripts/mirror.sh +374 -0
  93. package/skills/pi-plan/SKILL.md +62 -0
  94. package/skills/pi-plan/assets/epic.json +7 -0
  95. package/skills/pi-plan/assets/story_template.md +18 -0
  96. package/skills/proceed/SKILL.md +29 -0
  97. package/skills/publish/SKILL.md +351 -0
  98. package/skills/publish/adapters/droplet.md +200 -0
  99. package/skills/publish/adapters/mobile-ios.md +114 -0
  100. package/skills/publish/adapters/npm-ci.md +223 -0
  101. package/skills/publish/adapters/npm.md +121 -0
  102. package/skills/publish/assets/ExportOptions.plist.template +19 -0
  103. package/skills/publish/assets/ci-contract.md +111 -0
  104. package/skills/publish/assets/ownership-matrix.md +17 -0
  105. package/skills/publish/assets/publish.example.json +85 -0
  106. package/skills/publish/assets/publish.example.npm-ci.json +40 -0
  107. package/skills/publish/assets/publish.example.npm.json +41 -0
  108. package/skills/publish/assets/secrets-guide.md +104 -0
  109. package/skills/publish/schemas/fixtures/npm-ci-minimal.json +17 -0
  110. package/skills/publish/schemas/fixtures/npm-ci-with-empty-secrets.json +18 -0
  111. package/skills/publish/schemas/fixtures/npm-ci-with-workflow-path.json +18 -0
  112. package/skills/publish/schemas/publish.schema.json +428 -0
  113. package/skills/publish/scripts/check_target_config.sh +96 -0
  114. package/skills/publish/scripts/droplet_pipeline.sh +208 -0
  115. package/skills/publish/scripts/generate_release_notes.sh +200 -0
  116. package/skills/publish/scripts/ios_pipeline.sh +486 -0
  117. package/skills/publish/scripts/npm_ci_pipeline.sh +225 -0
  118. package/skills/publish/scripts/npm_pipeline.sh +249 -0
  119. package/skills/publish/scripts/publish_common.sh +253 -0
  120. package/skills/publish/scripts/publish_deploy.sh +538 -0
  121. package/skills/publish/scripts/reconcile_tags.sh +135 -0
  122. package/skills/publish/scripts/run_gates.sh +616 -0
  123. package/skills/publish/scripts/setup_wizard.sh +394 -0
  124. package/skills/publish/scripts/show_history.sh +95 -0
  125. package/skills/publish/scripts/suggest_semver_bump.sh +105 -0
  126. package/skills/publish/scripts/validate_config.sh +163 -0
  127. package/skills/publish/scripts/validate_droplet_env.sh +45 -0
  128. package/skills/publish/scripts/validate_ios_env.sh +68 -0
  129. package/skills/publish/scripts/validate_npm_ci_env.sh +71 -0
  130. package/skills/publish/scripts/validate_npm_env.sh +22 -0
  131. package/skills/publish/scripts/write_ledger_entry.sh +126 -0
  132. package/skills/publish/wizards/droplet.md +275 -0
  133. package/skills/publish/wizards/mobile-ios.md +157 -0
  134. package/skills/publish/wizards/npm-ci.md +240 -0
  135. package/skills/publish/wizards/npm.md +224 -0
  136. package/skills/reconcile/SKILL.md +93 -0
  137. package/skills/reconcile/assets/report_format.md +44 -0
  138. package/skills/reconcile-origin/SKILL.md +75 -0
  139. package/skills/reconcile-origin/scripts/reconcile-origin.sh +372 -0
  140. package/skills/redo/SKILL.md +70 -0
  141. package/skills/route/SKILL.md +180 -0
  142. package/skills/self-sync/SKILL.md +73 -0
  143. package/skills/self-sync/scripts/run.js +136 -0
  144. package/skills/skillify/SKILL.md +68 -0
  145. package/skills/skillify/assets/init-new/SKILL.md +35 -0
  146. package/skills/skillify/assets/init-new/assets/.gitignore_template +15 -0
  147. package/skills/skillify/assets/init-new/assets/PROJECT_SUMMARY_template.md +13 -0
  148. package/skills/skillify/assets/init-new/assets/directory_structure.txt +10 -0
  149. package/skills/skillify/assets/init-new/assets/test-config_template.json +4 -0
  150. package/skills/skillify/assets/init-new/assets/workflow_template.json +17 -0
  151. package/skills/skillify/assets/init-new/scripts/init.sh +48 -0
  152. package/skills/skillify/assets/init-old/SKILL.md +124 -0
  153. package/skills/spinoff/SKILL.md +48 -0
  154. package/skills/status/SKILL.md +33 -0
  155. package/skills/status/assets/output_format.md +41 -0
  156. package/skills/todo/SKILL.md +46 -0
  157. package/skills/todo/assets/todo_handoff_template.md +22 -0
  158. package/skills/todo/assets/todo_template.md +3 -0
  159. package/skills/train/SKILL.md +116 -0
  160. package/skills/train/assets/dashboard-templates/classifiers.html +106 -0
  161. package/skills/train/assets/dashboard-templates/nlp.html +102 -0
  162. package/skills/train/assets/dashboard-templates/transformers.html +98 -0
  163. package/skills/train/assets/results-parsers/__init__.py +9 -0
  164. package/skills/train/assets/results-parsers/classifiers.py +84 -0
  165. package/skills/train/assets/results-parsers/nlp.py +88 -0
  166. package/skills/train/assets/results-parsers/reporter.py +154 -0
  167. package/skills/train/assets/results-parsers/transformers.py +120 -0
  168. package/skills/train/train_cli.py +786 -0
  169. package/templates/EXECUTION_PLAN_TEMPLATE.md +43 -0
  170. package/templates/EXECUTION_SUMMARY_TEMPLATE.md +50 -0
  171. package/templates/JENGA_CONFIG_TEMPLATE.json +23 -0
  172. package/templates/PROBLEM_RAPPORT_TEMPLATE.md +88 -0
  173. package/templates/SCRUM_BOARD_SCHEMA.md +311 -0
  174. package/templates/SKILL.md +16 -0
  175. package/templates/SKILL_TEMPLATE.md +28 -0
  176. package/templates/USER_INSTRUCTIONS_TEMPLATE.md +22 -0
  177. package/templates/copilot-instructions.md.tpl +55 -0
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: dooo
3
+ description: Parallel execution orchestrator. Calls /do to start implementations via sub-agents, then loops back to the board to identify and offer parallelisable tasks until the user selects "Done".
4
+ keywords:
5
+ - dooo
6
+ - parallel
7
+ - batch
8
+ - multiple tasks
9
+ - orchestrate
10
+ examples:
11
+ - "run all pending tasks in parallel"
12
+ - "execute multiple tasks at once"
13
+ metadata:
14
+ prefered_agent: scrum-master
15
+ ---
16
+
17
+ # Dooo — Parallel Execution Orchestrator
18
+
19
+ ## Instructions
20
+
21
+ ### 1. Invoke `/do`
22
+ Call the `/do` skill to let the user select and start an implementation. `/do` will launch a background sub-agent to handle the implementation. Once the sub-agent is launched, `/do` returns control here.
23
+
24
+ After `/do` hands back control, mark the story/task that was just started as **Running** in its board file (update the `status:` field in the YAML front-matter).
25
+
26
+ ### 2. Return to the board — identify parallelisable tasks
27
+
28
+ Collect candidates from two sources:
29
+
30
+ 1. **Stories** — read all files from `project/board/stories/`.
31
+ 2. **Tasks derived from stories** — read all files from `project/board/tasks/`. A task is considered in-scope if its parent story (`story_id` in the task's front-matter) is listed in `project/todo.md`, even if the task itself is not directly listed there.
32
+
33
+ A story or task is **eligible** to be presented as a parallel candidate if ALL of the following are true:
34
+ - Its status is `Pending` (not `Running`, `In Progress`, `Passed`, etc.)
35
+ - It has no unresolved dependencies (all blocking stories/tasks are at least `Running` or `Passed`)
36
+ - It is directly listed in `project/todo.md`, **OR** its parent story is listed in `project/todo.md`
37
+
38
+ ### 3. Present choices to the user
39
+
40
+ Build a numbered list of eligible story titles (use `ask_user` with `choices`). **Always append "Done" as the last option.**
41
+
42
+ Example:
43
+ ```
44
+ Which task would you like to start next?
45
+ 1. Create /spinoff skill (E02_S02)
46
+ 2. Training Skill Assets & Templates (E01_S06)
47
+ 3. Done
48
+ ```
49
+
50
+ If there are **no eligible tasks** (all remaining todos are blocked or already running), skip straight to step 4.
51
+
52
+ ### 4. Branch on user selection
53
+
54
+ - If the user selects **"Done"** — exit the loop and inform the user that no more implementations will be started in this session.
55
+ - If the user selects a task — go back to step 1 (invoke `/do` for the selected task, then loop).
56
+
57
+ ### 5. Loop termination
58
+ The loop ends when:
59
+ - The user selects "Done", OR
60
+ - There are no more eligible parallel tasks to offer
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: error
3
+ description: Guided troubleshooting flow that gathers context about an error — where it occurs, what was attempted, what went wrong, and what was expected.
4
+ keywords:
5
+ - error
6
+ - bug
7
+ - fix
8
+ - troubleshoot
9
+ - debug
10
+ - broken
11
+ examples:
12
+ - "I'm getting an error"
13
+ - "help me fix this bug"
14
+ metadata:
15
+ prefered_agent: tester
16
+ ---
17
+
18
+ # Error — Guided Troubleshooting
19
+
20
+ ## Instructions
21
+
22
+ Ask the following questions to understand the background of the error:
23
+
24
+ 1. Where does the error occur?
25
+ 2. What are you trying to do?
26
+ 3. What went wrong?
27
+ 4. What was the expected outcome?
28
+
29
+ Then use the answers to investigate and resolve the issue by creating a issue using the /todo skill.
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: evaluate
3
+ description: Analyzes example files against a target goal and produces a structured evaluation rapport.
4
+ ---
5
+
6
+ # Evaluate
7
+
8
+ ## Input
9
+
10
+ Expects a filled `eval_invokation_template.yml` with:
11
+ - `goal`: the confirmed target goal
12
+ - `paths`: list of example files from `/examplify` to analyze
13
+
14
+ ## Steps
15
+
16
+ ### 1. Read Input
17
+ Parse the provided YAML file. If `goal` is empty or `paths` is empty/missing,
18
+ stop and ask the user to fill in the missing fields before proceeding.
19
+
20
+ ### 2. Read Example Files
21
+ Load each file listed under `paths`. These are outputs from `/examplify` and
22
+ represent real observed behavior in the codebase.
23
+
24
+ ### 3. Analyze Against Goal
25
+ For each example file, evaluate:
26
+ - **Qualitative observations**: What is the current behavior? How does it relate
27
+ to the goal?
28
+ - **Gaps and issues**: What is missing, broken, or misaligned relative to the goal?
29
+ - **Score**: How well does the current behavior satisfy the goal?
30
+ Use a simple 1–5 scale with a one-line justification.
31
+
32
+ ### 4. Synthesize
33
+ Across all examples, identify:
34
+ - Recurring patterns or systemic issues
35
+ - The most critical gaps blocking the goal
36
+ - Any areas that are already well-aligned
37
+
38
+ ### 5. Write Rapport
39
+ Copy `evaluation_rapport_template.md`. Derive the rapport filename from the goal in kebab-case:
40
+ `<target-goal-in-kebab-case>-eval.md`
41
+
42
+ Fill in the rapport based on the template structure and save to `project/rapports/analysis/` with this structure.
43
+
44
+ ### 6. Return
45
+ Return the rapport filename to the caller (e.g. `/improve`).
@@ -0,0 +1,3 @@
1
+ goal: "" # The confirmed target goal (e.g. "improve checkout performance")
2
+ paths: # One or more paths to example files produced by /examplify
3
+ - ""
@@ -0,0 +1,24 @@
1
+ # Evaluation Rapport: <target-goal-in-kebab-case>
2
+
3
+ ## Goal
4
+ <!-- The confirmed target goal -->
5
+
6
+ ## References
7
+ <!-- Comma-separated list of example files analyzed -->
8
+
9
+ ## Observations
10
+ <!-- Qualitative prose per example file, grouped by file -->
11
+ ### `<file-name>`
12
+ <!-- What does this example reveal about current behavior? -->
13
+
14
+ ## Gaps & Issues
15
+ <!-- Bulleted list, most critical first -->
16
+ -
17
+
18
+ ## Score
19
+ <!-- 1–5 with one-line justification -->
20
+ **Score**: /5
21
+ **Justification**:
22
+
23
+ ## Summary
24
+ <!-- 2–3 sentences synthesizing the most important findings -->
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: examplify
3
+ description: Explains concepts, features, use cases, and patterns based on provided context — a description, scenario, code snippet, or file. Use when the user wants to understand what something is, how it works, when to use it, or wants a concrete example.
4
+ keywords:
5
+ - examplify
6
+ - explain
7
+ - example
8
+ - how does
9
+ - understand
10
+ examples:
11
+ - "explain how this works"
12
+ - "give me an example of X"
13
+ ---
14
+
15
+ # Concept Explainer
16
+
17
+ ## Instructions
18
+
19
+ If the context is unclear or too broad, ask one focused clarifying question before proceeding. Otherwise, infer and proceed.
20
+
21
+ Explain the concept by covering:
22
+
23
+ 1. **What it is** — a plain-language definition
24
+ 2. **Why it exists** — the problem it solves
25
+ 3. **How it works** — core mechanics
26
+ 4. **When to use it** — and when not to
27
+ 5. **Example(s)** — grounded in the user's context; show a before/after when relevant
28
+
29
+ After delivering the explanation, save a copy to:
30
+ `project/documentation/examples/<concept_and_context>.md`
31
+
32
+ Derive the filename from the concept + context (lowercased, hyphenated). Tell the user where the file was saved.
33
+
34
+ ## Follow-up
35
+
36
+ If further discussion reveals new information about the topic — a new use case, correction, or better example — ask the user:
37
+
38
+ > "That adds something new to what we covered — want me to update the saved file?"
39
+ 1. Yes
40
+ 2. No
41
+
42
+ If yes, append the new content under an `## Additional Notes` section. Do not overwrite the original.
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: help
3
+ description: List all available skills with a short description of what each one does. Also use this skill when the user wants to know what commands or skills are available in the project.
4
+ keywords:
5
+ - help
6
+ - skills
7
+ - commands
8
+ - what can you do
9
+ - list skills
10
+ examples:
11
+ - "what skills are available?"
12
+ - "show me all commands"
13
+ ---
14
+
15
+ # Help — List Available Skills
16
+
17
+ ## Instructions
18
+
19
+ List all available skills (from the current skill list) with a short description of what each one does. Format the output as a table with columns for the slash command and its description.
20
+
21
+ ## MCP Tool (Dynamic Discovery)
22
+
23
+ An MCP server ships inside the `jenga-agent` package at `mcp/help/` that dynamically discovers skills at runtime.
24
+
25
+ To install and run (from a consumer project that has `jenga-agent` installed):
26
+ ```bash
27
+ cd node_modules/jenga-agent/mcp/help && npm install
28
+ node index.js
29
+ ```
30
+
31
+ Or wire it as an MCP server in `.claude/settings.json` — `jenga attach` does this automatically for the router; the help server can be added the same way, pointing `args` at `node_modules/jenga-agent/mcp/help/index.js`.
32
+
33
+ The `help` tool accepts an optional `path` argument (defaults to `cwd`) and:
34
+ 1. Looks for a `.claude/skills` directory at that path, falling back to `.agents/skills`.
35
+ 2. If found, returns a list of all folder names inside it.
36
+ 3. If neither exists, returns a clear message listing the paths it checked.
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: improve
3
+ description: A skill for analyzing a codebase and producing a structured improvement plan toward a defined goal.
4
+ ---
5
+
6
+ # Improve
7
+
8
+ ## Instructions
9
+
10
+ Before doing anything, check the attached description for an explicit or implicit goal.
11
+
12
+ - **Explicit goal**: clearly stated (e.g. "improve login performance")
13
+ - **Implicit goal**: inferable from context (e.g. "the checkout flow feels slow" → goal: improve checkout performance)
14
+
15
+ If no goal can be determined, ask:
16
+ > "What's the outcome you're trying to achieve with this improvement?"
17
+
18
+ Do not proceed until a goal is confirmed.
19
+
20
+ ---
21
+
22
+ ## Steps
23
+
24
+ ### 1. Search the Codebase
25
+ Search for files and flows relevant to the target goal. Look for:
26
+ - Entry points, handlers, or controllers related to the feature
27
+ - Shared utilities or services it depends on
28
+ - Recent changes in the area (if git history is accessible)
29
+
30
+ ### 2. Check Project Documentation
31
+ Look in `project/documentation/` for `.md` files that offer insight into:
32
+ - Architecture decisions
33
+ - Known limitations
34
+ - Intended behavior of the relevant area
35
+
36
+ ### 3. Evaluate Insight Sufficiency
37
+ Assess whether you have enough context to evaluate current behavior against the goal.
38
+
39
+ - If yes: proceed to step 5.
40
+ - If no: proceed to step 4.
41
+
42
+ ### 4. Run `/examplify`
43
+ Invoke the `/examplify` skill. Specify clearly what you want it to find out — e.g. which code paths are exercised, what inputs/outputs look like, or what edge cases exist.
44
+
45
+ ### 5. Run `/evaluate`
46
+ Copy `.agents/skills/evaluate/assets/evaluation_invokation_template.yml` and fill in:
47
+ - `paths`: path(s) to the relevant example files
48
+ - `goal`: the confirmed target goal
49
+
50
+ This generates `<target-goal-in-kebab-case>-eval.md` inside `project/rapports/analysis/`.
51
+
52
+ ### 6. Invoke `/todo`
53
+ Call `/todo` with the following message:
54
+
55
+ "invoke /brainstorm <path-to-evaluation-rapport>".
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ python3 "$(dirname "$0")/board_index.py" "$@"