kushi-agents 3.4.1

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 (111) hide show
  1. package/.github/config/m365-auth.json.example +56 -0
  2. package/.github/config/m365-mutable.json.example +11 -0
  3. package/LICENSE +201 -0
  4. package/README.md +159 -0
  5. package/bin/cli.mjs +75 -0
  6. package/package.json +35 -0
  7. package/plugin/agents/kushi.agent.md +147 -0
  8. package/plugin/instructions/answer-from-evidence.instructions.md +73 -0
  9. package/plugin/instructions/auth-and-retry.instructions.md +116 -0
  10. package/plugin/instructions/az-auth-conditional.instructions.md +39 -0
  11. package/plugin/instructions/azure-auth-patterns.instructions.md +226 -0
  12. package/plugin/instructions/citation-ledger.instructions.md +52 -0
  13. package/plugin/instructions/engagement-root-resolution.instructions.md +82 -0
  14. package/plugin/instructions/evidence-thoroughness.instructions.md +62 -0
  15. package/plugin/instructions/side-by-side-config.instructions.md +56 -0
  16. package/plugin/instructions/snapshot-vs-stream.instructions.md +87 -0
  17. package/plugin/instructions/thoroughness-detector.instructions.md +105 -0
  18. package/plugin/instructions/workiq-first.instructions.md +47 -0
  19. package/plugin/plugin.json +96 -0
  20. package/plugin/prompts/aggregate.prompt.md +24 -0
  21. package/plugin/prompts/ask.prompt.md +16 -0
  22. package/plugin/prompts/bootstrap.prompt.md +23 -0
  23. package/plugin/prompts/consolidate.prompt.md +21 -0
  24. package/plugin/prompts/fde-intake.prompt.md +41 -0
  25. package/plugin/prompts/fde-report.prompt.md +46 -0
  26. package/plugin/prompts/fde-triage.prompt.md +46 -0
  27. package/plugin/prompts/refresh.prompt.md +17 -0
  28. package/plugin/prompts/state.prompt.md +17 -0
  29. package/plugin/prompts/status.prompt.md +17 -0
  30. package/plugin/reference-packs/README.md +74 -0
  31. package/plugin/reference-packs/fde/README.md +62 -0
  32. package/plugin/reference-packs/fde/core-fde-reference.md +427 -0
  33. package/plugin/reference-packs/fde/intake-questions.md +168 -0
  34. package/plugin/reference-packs/fde/report-doctrine.md +189 -0
  35. package/plugin/skills/aggregate-project/SKILL.md +72 -0
  36. package/plugin/skills/ask-project/SKILL.md +162 -0
  37. package/plugin/skills/bootstrap-project/SKILL.md +129 -0
  38. package/plugin/skills/build-state/SKILL.md +69 -0
  39. package/plugin/skills/consolidate-evidence/SKILL.md +47 -0
  40. package/plugin/skills/fde-intake/SKILL.md +147 -0
  41. package/plugin/skills/fde-report/SKILL.md +159 -0
  42. package/plugin/skills/fde-triage/SKILL.md +114 -0
  43. package/plugin/skills/intro/SKILL.md +449 -0
  44. package/plugin/skills/project-status/SKILL.md +61 -0
  45. package/plugin/skills/pull-ado/SKILL.md +77 -0
  46. package/plugin/skills/pull-crm/SKILL.md +75 -0
  47. package/plugin/skills/pull-email/SKILL.md +75 -0
  48. package/plugin/skills/pull-meetings/SKILL.md +77 -0
  49. package/plugin/skills/pull-onenote/SKILL.md +82 -0
  50. package/plugin/skills/pull-sharepoint/SKILL.md +85 -0
  51. package/plugin/skills/pull-teams/SKILL.md +75 -0
  52. package/plugin/skills/refresh-project/SKILL.md +89 -0
  53. package/plugin/skills/self-check/SKILL.md +166 -0
  54. package/plugin/skills/self-check/run.ps1 +517 -0
  55. package/plugin/skills/self-check/run.sh +33 -0
  56. package/plugin/templates/fde/intake.md +114 -0
  57. package/plugin/templates/fde/report-fitness.md +151 -0
  58. package/plugin/templates/fde/report-long.md +109 -0
  59. package/plugin/templates/fde/report-short.md +45 -0
  60. package/plugin/templates/fde/report-stage-readiness.md +70 -0
  61. package/plugin/templates/fde/report-weekly.md +73 -0
  62. package/plugin/templates/fde/triage-00-fde-analysis.md +78 -0
  63. package/plugin/templates/fde/triage-02-risk-analysis.md +76 -0
  64. package/plugin/templates/fde/triage-03-6Q.md +40 -0
  65. package/plugin/templates/fde/triage-04-readiness-checklist.md +82 -0
  66. package/plugin/templates/fde/triage-05-executive-consolidated.md +78 -0
  67. package/plugin/templates/fde/triage-06-global-opportunity.md +70 -0
  68. package/plugin/templates/fde/triage-07-validation-warnings.md +60 -0
  69. package/plugin/templates/init/ado-config.template.yml +21 -0
  70. package/plugin/templates/init/crm-config.template.yml +16 -0
  71. package/plugin/templates/init/kushi-projects.template.json +14 -0
  72. package/plugin/templates/init/m365-auth.template.json +67 -0
  73. package/plugin/templates/init/m365-mutable.template.json +19 -0
  74. package/plugin/templates/init/project-contributors.template.yml +27 -0
  75. package/plugin/templates/init/project-evidence.template.yml +32 -0
  76. package/plugin/templates/init/project-integrations.template.yml +34 -0
  77. package/plugin/templates/init/project-user-settings.template.yml +71 -0
  78. package/plugin/templates/paste-prompt.md +35 -0
  79. package/plugin/templates/snapshot/ado-item.template.md +45 -0
  80. package/plugin/templates/snapshot/crm-record.template.md +34 -0
  81. package/plugin/templates/snapshot/meetings-series-index.template.md +32 -0
  82. package/plugin/templates/snapshot/onenote-page.template.md +28 -0
  83. package/plugin/templates/snapshot/sharepoint-file.template.md +31 -0
  84. package/plugin/templates/snapshot/sharepoint-tree.template.md +39 -0
  85. package/plugin/templates/snapshot/teams-roster.template.md +27 -0
  86. package/plugin/templates/state/00_overview.template.md +44 -0
  87. package/plugin/templates/state/01_decisions.template.md +41 -0
  88. package/plugin/templates/state/02_stakeholders.template.md +48 -0
  89. package/plugin/templates/state/03_architecture-and-solution.template.md +56 -0
  90. package/plugin/templates/state/04_workshops-and-key-meetings.template.md +43 -0
  91. package/plugin/templates/state/05_action-items.template.md +29 -0
  92. package/plugin/templates/state/06_risks-and-issues.template.md +43 -0
  93. package/plugin/templates/state/07_timeline-and-milestones.template.md +45 -0
  94. package/plugin/templates/state/08_artifacts-and-deliverables.template.md +55 -0
  95. package/plugin/templates/state/09_open-questions.template.md +62 -0
  96. package/plugin/templates/state/README.md +41 -0
  97. package/plugin/templates/weekly/ado-stream.template.md +71 -0
  98. package/plugin/templates/weekly/consolidated.template.md +98 -0
  99. package/plugin/templates/weekly/crm-stream.template.md +74 -0
  100. package/plugin/templates/weekly/email-stream.template.md +103 -0
  101. package/plugin/templates/weekly/meetings-stream.template.md +182 -0
  102. package/plugin/templates/weekly/onenote-stream.template.md +106 -0
  103. package/plugin/templates/weekly/run-log.template.md +88 -0
  104. package/plugin/templates/weekly/sharepoint-stream.template.md +121 -0
  105. package/plugin/templates/weekly/teams-stream.template.md +121 -0
  106. package/src/constants.mjs +49 -0
  107. package/src/copy-assets.mjs +183 -0
  108. package/src/main.mjs +262 -0
  109. package/src/profile-resolver.mjs +168 -0
  110. package/src/prompt.mjs +42 -0
  111. package/src/settings.mjs +77 -0
@@ -0,0 +1,82 @@
1
+ # 04 · Mobilization Readiness Checklist — {{project_name}}
2
+
3
+ > **Bundle file 04 of 07.** Gating view for **mobilization readiness** — can the crew start on day 0 once approval is given?
4
+ >
5
+ > **NOT the same as stage-readiness.** Stage-readiness (separate `fde-report stage-readiness` shape) asks "should we advance the stage?" — mobilization readiness asks "if we got approval today, could the crew actually start?"
6
+ >
7
+ > **Generated by:** Kushi `fde-triage` v{{kushi_version}} on {{generated_at}}.
8
+
9
+ {{freshness_warning_block}}
10
+
11
+ ## Overall verdict
12
+
13
+ **{{mobilization_verdict}}**
14
+
15
+ | Verdict | Meaning |
16
+ |---|---|
17
+ | READY-TO-MOBILIZE | All Hard items ✅ + ≥ 80% of Soft items ✅. Crew can start on day 0. |
18
+ | MOBILIZE-WITH-CAVEATS | All Hard items ✅, but some Soft items ⚠️ or ❓. Document caveats. |
19
+ | BLOCKED | ≥ 1 Hard item ❌ or ❓. Cannot mobilize until resolved. |
20
+
21
+ This engagement: **Hard items {{hard_pass}}/{{hard_total}}** · **Soft items {{soft_pass}}/{{soft_total}}**.
22
+
23
+ ## Hard items (all required for mobilization)
24
+
25
+ | # | Item | Status | Evidence | Owner | Source |
26
+ |---|---|---|---|---|---|
27
+ | 1 | Executive sponsor identified and committed | {{h1_status}} | {{h1_evidence}} | {{h1_owner}} | {{h1_source}} |
28
+ | 2 | Customer dev team named (≥ 1 dev, ≥ 1 PM) | {{h2_status}} | {{h2_evidence}} | {{h2_owner}} | {{h2_source}} |
29
+ | 3 | Outcome hypothesis written and agreed | {{h3_status}} | {{h3_evidence}} | {{h3_owner}} | {{h3_source}} |
30
+ | 4 | Quantified success criteria (≥ 2 KPIs with numeric targets + baseline) | {{h4_status}} | {{h4_evidence}} | {{h4_owner}} | {{h4_source}} |
31
+ | 5 | Funding model agreed (MACC / ECIF / billable — line of sight to $) | {{h5_status}} | {{h5_evidence}} | {{h5_owner}} | {{h5_source}} |
32
+ | 6 | CWAA / contracting in place or path to in-place < 30 days | {{h6_status}} | {{h6_evidence}} | {{h6_owner}} | {{h6_source}} |
33
+ | 7 | Catcher team identified (who owns outcome after FDE leaves) | {{h7_status}} | {{h7_evidence}} | {{h7_owner}} | {{h7_source}} |
34
+ | 8 | Azure / MS platform commitment confirmed | {{h8_status}} | {{h8_evidence}} | {{h8_owner}} | {{h8_source}} |
35
+
36
+ ## Soft items (preferred but not blocking)
37
+
38
+ | # | Item | Status | Evidence | Source |
39
+ |---|---|---|---|---|
40
+ | 1 | Azure landing zone provisioned | {{s1_status}} | {{s1_evidence}} | {{s1_source}} |
41
+ | 2 | Data access path identified (lake / Fabric / pipelines) | {{s2_status}} | {{s2_evidence}} | {{s2_source}} |
42
+ | 3 | Existing PoC or pre-work that informs scope | {{s3_status}} | {{s3_evidence}} | {{s3_source}} |
43
+ | 4 | Industry team alignment confirmed | {{s4_status}} | {{s4_evidence}} | {{s4_source}} |
44
+ | 5 | PG / product team aware (if relevant) | {{s5_status}} | {{s5_evidence}} | {{s5_source}} |
45
+ | 6 | Customer's own ROI estimate documented | {{s6_status}} | {{s6_evidence}} | {{s6_source}} |
46
+ | 7 | Value realization plan with checkpoints (30/60/90 day) | {{s7_status}} | {{s7_evidence}} | {{s7_source}} |
47
+ | 8 | Reusable-pattern flag set (industry-defining / frontier) | {{s8_status}} | {{s8_evidence}} | {{s8_source}} |
48
+
49
+ ## Legend
50
+
51
+ - ✅ Met — evidence supports
52
+ - ⚠️ Partial — evidence supports some not all
53
+ - ❌ Not met — evidence does NOT support
54
+ - ❓ Unknown — evidence does not address
55
+
56
+ ## Blockers to mobilization
57
+
58
+ (Sorted by Hard items first.)
59
+
60
+ {{blockers_block}}
61
+
62
+ ## Required actions to reach READY-TO-MOBILIZE
63
+
64
+ | # | Action | Owner | By when | Hard/Soft |
65
+ |---|---|---|---|---|
66
+ {{required_actions_rows}}
67
+
68
+ ## Open questions
69
+
70
+ {{open_questions_block}}
71
+
72
+ ## Validation warnings (this file only)
73
+
74
+ {{validation_warnings_block}}
75
+
76
+ ## Source coverage
77
+
78
+ {{source_coverage_block}}
79
+
80
+ ---
81
+
82
+ > _For "should we advance to the next FDE stage?" use the `stage-readiness` report shape instead — different question._
@@ -0,0 +1,78 @@
1
+ # 05 · Executive Consolidated Report — {{project_name}}
2
+
3
+ > **Bundle file 05 of 07.** Leadership-friendly combined readout. The single file an exec should read if they only read one.
4
+ > **Generated by:** Kushi `fde-triage` v{{kushi_version}} on {{generated_at}}.
5
+
6
+ {{freshness_warning_block}}
7
+
8
+ ## Executive Summary
9
+
10
+ {{executive_summary_paragraph}}
11
+
12
+ ### Key decisions requested from leadership
13
+
14
+ {{decisions_requested_list}}
15
+
16
+ ### Recommendation
17
+
18
+ **{{overall_recommendation}}** — {{recommendation_one_liner}}
19
+
20
+ ---
21
+
22
+ ## At a glance
23
+
24
+ <table>
25
+ <tbody>
26
+ <tr><th>Customer</th><td>{{customer_name}}</td><th>Engagement</th><td>{{engagement_title}}</td></tr>
27
+ <tr><th>FDE stage</th><td>{{current_stage}}</td><th>FDE fit</th><td>{{fit_overall}}</td></tr>
28
+ <tr><th>Mobilization readiness</th><td>{{mobilization_verdict}}</td><th>Top risk</th><td>{{top_risk_short}}</td></tr>
29
+ <tr><th>Customer ROI / yr</th><td>{{customer_roi}}</td><th>Expected MS ACR</th><td>{{acr_expected}}</td></tr>
30
+ <tr><th>MACC</th><td>{{macc_summary}}</td><th>Catcher team</th><td>{{catcher_team}}</td></tr>
31
+ </tbody>
32
+ </table>
33
+
34
+ ## What FDE is being asked to do
35
+
36
+ {{ask_summary}}
37
+
38
+ ## The outcome hypothesis
39
+
40
+ > {{outcome_hypothesis}}
41
+
42
+ ## Why FDE here, and not <alternative>
43
+
44
+ {{why_fde_vs_alternative}}
45
+
46
+ ## Top 3 strengths of this engagement
47
+
48
+ 1. {{strength_1}}
49
+ 2. {{strength_2}}
50
+ 3. {{strength_3}}
51
+
52
+ ## Top 3 risks / concerns
53
+
54
+ 1. {{risk_1}}
55
+ 2. {{risk_2}}
56
+ 3. {{risk_3}}
57
+
58
+ ## Asks of leadership
59
+
60
+ {{leadership_asks}}
61
+
62
+ ## Companion files in this bundle
63
+
64
+ - `00-fde-analysis.md` — full analysis
65
+ - `01-fde-fitness.md` — 10-criterion scorecard
66
+ - `02-risk-analysis.md` — full risk view
67
+ - `03-6Q.md` — engagement framing
68
+ - `04-readiness-checklist.md` — mobilization readiness
69
+ - `06-global-opportunity-and-reuse.md` — repeatability lens
70
+ - `07-validation-warnings-checklist.md` — open warnings tracker
71
+
72
+ ## Validation warnings (this file only — full list in `07-`)
73
+
74
+ {{validation_warnings_block}}
75
+
76
+ ## Source coverage
77
+
78
+ {{source_coverage_block}}
@@ -0,0 +1,70 @@
1
+ # 06 · Global Opportunity & Reuse — {{project_name}}
2
+
3
+ > **Bundle file 06 of 07.** Repeatability, reuse, and commercialization view. Grounded in project Evidence plus public context where the broader-opportunity lens applies.
4
+ > **Generated by:** Kushi `fde-triage` v{{kushi_version}} on {{generated_at}}.
5
+
6
+ {{freshness_warning_block}}
7
+
8
+ ## Is this engagement pattern reusable?
9
+
10
+ **{{reusability_verdict}}** — {{reusability_one_liner}}
11
+
12
+ | Verdict | Meaning |
13
+ |---|---|
14
+ | HIGH-REUSE | Pattern repeats across ≥ 5 known customers in same industry / use case. Strong PG accelerator candidate. |
15
+ | MEDIUM-REUSE | Pattern likely repeats across 2–4 customers. Worth a reusable accelerator after this engagement. |
16
+ | LOW-REUSE | Custom to this one customer. Unlikely to inform a broader pattern. |
17
+ | UNKNOWN | Insufficient evidence to assess. |
18
+
19
+ ## Industry / segment lens
20
+
21
+ | Field | Value | Source |
22
+ |---|---|---|
23
+ | Industry | {{industry}} | {{industry_source}} |
24
+ | Sub-segment | {{sub_segment}} | {{sub_segment_source}} |
25
+ | Customer size (revenue / employees) | {{customer_size}} | {{customer_size_source}} |
26
+ | Geography | {{geography}} | {{geography_source}} |
27
+
28
+ ## Pattern description
29
+
30
+ {{pattern_paragraph}}
31
+
32
+ ## Similar customers / similar problems we know of
33
+
34
+ | Customer | How similar | Status (FDE / partner / un-engaged) | Source |
35
+ |---|---|---|---|
36
+ {{similar_customers_rows}}
37
+
38
+ (If from public context, cite the public source URL.)
39
+
40
+ ## Reusable artifacts this engagement could produce
41
+
42
+ | Artifact | Reuse target | Description |
43
+ |---|---|---|
44
+ {{reusable_artifacts_rows}}
45
+
46
+ ## Commercial opportunity at scale
47
+
48
+ If this pattern repeats across N similar customers:
49
+
50
+ - Estimated TAM (Microsoft ACR uplift): {{tam_acr}}
51
+ - Estimated number of similar customers: {{n_similar}}
52
+ - Source for sizing: {{tam_source}}
53
+
54
+ ## PG / accelerator handoff candidates
55
+
56
+ | PG team / accelerator | Why this engagement is relevant | Source |
57
+ |---|---|---|
58
+ {{pg_handoff_rows}}
59
+
60
+ ## Risks to reuse
61
+
62
+ {{reuse_risks_block}}
63
+
64
+ ## Validation warnings (this file only)
65
+
66
+ {{validation_warnings_block}}
67
+
68
+ ## Source coverage
69
+
70
+ {{source_coverage_block}}
@@ -0,0 +1,60 @@
1
+ # 07 · Validation Warnings Checklist — {{project_name}}
2
+
3
+ > **Bundle file 07 of 07.** Central tracker of every validation warning across the triage bundle.
4
+ > Warnings are mirrored here verbatim from companion files; updates to status (open / resolved / not-applicable) live here.
5
+ >
6
+ > **Generated by:** Kushi `fde-triage` v{{kushi_version}} on {{generated_at}}.
7
+
8
+ ## Summary
9
+
10
+ | Status | Count |
11
+ |---|---|
12
+ | 🔴 Open | {{count_open}} |
13
+ | 🟢 Resolved | {{count_resolved}} |
14
+ | ⚪ Not applicable | {{count_na}} |
15
+
16
+ **Total warnings across bundle:** {{count_total}}
17
+
18
+ ## Open warnings (blockers / action-needed)
19
+
20
+ | # | Bundle file | Rule | Description | Status | Owner | Action |
21
+ |---|---|---|---|---|---|---|
22
+ {{open_warnings_rows}}
23
+
24
+ ## Resolved warnings
25
+
26
+ | # | Bundle file | Rule | Description | Resolved on | Resolution note |
27
+ |---|---|---|---|---|---|
28
+ {{resolved_warnings_rows}}
29
+
30
+ ## Not-applicable warnings
31
+
32
+ | # | Bundle file | Rule | Description | Justification for NA |
33
+ |---|---|---|---|---|
34
+ {{na_warnings_rows}}
35
+
36
+ ## Rule reference
37
+
38
+ [Source: reference-packs/fde/report-doctrine.md · packaged]
39
+
40
+ | Rule | Title |
41
+ |---|---|
42
+ | Rule 1.1 | Source resolution gate skipped for a required path |
43
+ | Rule 1.2 | Source attempted-failed for a path material to a claim |
44
+ | Rule 2.1 | Recency precedence violated (newer source ignored, older quoted) |
45
+ | Rule 3.1 | CRM field value reported as confirmed fact without customer cross-check |
46
+ | Rule 3.2 | CRM disagrees with latest customer-facing source |
47
+ | Rule 4.1 | Required role (ATU rep, Industry rep) missing |
48
+ | Rule 4.2 | Required commercial fact missing |
49
+ | Rule 4.3 | Required outcome metric (KPI, baseline, target) missing |
50
+ | Rule 5.1 | Stage claim not supported by stage gate / exit criteria |
51
+ | Rule 5.2 | FDE fit claim not grounded against the 10-row fitness checklist |
52
+ | Rule 6.1 | Customer engagement legal posture (CWAA / EMA / contract) absent |
53
+ | Rule 8.1 | Paragraph lacks inline `[source: …]` citation |
54
+ | Rule 9.1 | Other unresolved gap (free-text) |
55
+
56
+ ## How to update this file
57
+
58
+ This file is **regenerated** every time `@Kushi fde-triage <project>` runs. To preserve status changes (open → resolved, NA justifications), edit and re-save **before** re-running triage — `fde-triage` merges existing status when found.
59
+
60
+ Or update individual warnings inline in the source bundle file (00 — 06) and re-run.
@@ -0,0 +1,21 @@
1
+ # Azure DevOps connection — per-user filled. Lives at:
2
+ # <engagement-root>/.project-evidence/ado/config.yml
3
+ # NOT in repo. NOT in `.kushi/`.
4
+
5
+ tenantId: "72f988bf-86f1-41af-91ab-2d7cd011db47" # Microsoft tenant
6
+ organization: "https://dev.azure.com/<your-org>"
7
+ defaultProject: "<your-default-ado-project>"
8
+ apiVersion: "7.1"
9
+
10
+ # ADO scope GUID — fixed across tenants
11
+ azDevOpsResourceId: "499b84ac-1321-427f-aa17-267ca6975798"
12
+
13
+ # Saved queries / area paths can be overridden per project in
14
+ # <engagement-root>/<project>/integrations.yml under `ado:`
15
+ defaults:
16
+ queryId: ""
17
+ areaPath: ""
18
+ iterationPath: ""
19
+
20
+ auth:
21
+ strategy: "az-cli"
@@ -0,0 +1,16 @@
1
+ # CRM (Dataverse) connection — per-user filled. Lives at:
2
+ # <engagement-root>/.project-evidence/crm/config.yml
3
+ # NOT in repo. NOT in `.kushi/`.
4
+
5
+ tenantId: "72f988bf-86f1-41af-91ab-2d7cd011db47" # Microsoft tenant
6
+ environmentUrl: "https://<your-org>.crm.dynamics.com"
7
+ apiVersion: "9.2"
8
+
9
+ # Default entity to query. Override per project in
10
+ # <engagement-root>/<project>/integrations.yml
11
+ defaultEntitySet: "msdyn_engagements"
12
+
13
+ # Authentication strategy. Currently only "az-cli" supported.
14
+ # kushi will run: az account get-access-token --resource <environmentUrl> --tenant <tenantId>
15
+ auth:
16
+ strategy: "az-cli"
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "https://kushi.dev/schemas/projects.v2.json",
3
+ "_comment": "Project list consumed by the Clawpilot automation 'Kushi weekly refresh'. Copy this template to ~/.copilot/kushi-projects.json and edit `projects[]`. Per project: set `force_refresh: true` to force a full re-pull on the NEXT run (ignores the run-log watermark) — the automation flips it back to false after a successful run. Set `mode: \"aggregate\"` for Evidence-only (pull + consolidate, no State/ rebuild) or `\"refresh\"` (default; pull + consolidate + build-state). The `aggregate` mode requires Kushi installed with the `core` profile or higher. To trigger on demand, set the flag(s) and tell Clawpilot 'kushi run again now' — it will call m_run_automation_now on the weekly automation.",
4
+ "version": 2,
5
+ "defaults": {
6
+ "force_refresh": false,
7
+ "window_days": 7,
8
+ "mode": "refresh"
9
+ },
10
+ "projects": [
11
+ { "name": "<ProjectA>", "mode": "refresh", "force_refresh": false },
12
+ { "name": "<ProjectB>", "mode": "aggregate", "force_refresh": false }
13
+ ]
14
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "_meta": {
3
+ "owner": "<alias>@microsoft.com",
4
+ "purpose": "STABLE per-user M365 defaults for Microsoft consultants. Tenant is Microsoft corp by default. Edit by hand only when defaults change. NOT auto-overwritten by skill runs.",
5
+ "consumers": ["project-evidence skill", "any future M365-context skill"],
6
+ "audience": "Microsoft internal — Industry Solutions Engineering and adjacent teams",
7
+ "schema_version": "1.0",
8
+ "last_reviewed": "<YYYY-MM-DD>"
9
+ },
10
+ "m365Auth": {
11
+ "defaultTenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
12
+ "resources": {
13
+ "graph": "https://graph.microsoft.com",
14
+ "sharePoint": "https://microsoft-my.sharepoint.com",
15
+ "dataverse": "https://iscrm.crm.dynamics.com"
16
+ },
17
+ "oneNote": {
18
+ "defaultNotebookName": "",
19
+ "defaultNotebookId": "",
20
+ "defaultSectionResolverUrl": "",
21
+ "defaultNotebookRootLink": "",
22
+ "defaultLinkOwner": ""
23
+ },
24
+ "emailContext": {
25
+ "enabled": true,
26
+ "dateFloor": "",
27
+ "folders": [],
28
+ "includeSubfolders": true,
29
+ "sourceCoverageLabel": "",
30
+ "matchingPolicy": {
31
+ "mode": "hybrid",
32
+ "rankingOrder": ["exact", "prefix", "contains"],
33
+ "minConfidenceForFolderScopedSearch": "high",
34
+ "fallbackToFullRootScanWhenAmbiguous": true,
35
+ "alwaysFuzzy": true
36
+ }
37
+ },
38
+ "teamsChatContext": {
39
+ "enabled": true,
40
+ "dateFloor": "",
41
+ "scope": { "includeChats": true, "includeChannels": true },
42
+ "matchingPolicy": {
43
+ "mode": "thread-first",
44
+ "rankingOrder": ["exact", "prefix", "contains"],
45
+ "fallbackToBroaderSearchWhenAmbiguous": true,
46
+ "alwaysFuzzy": true
47
+ }
48
+ },
49
+ "calendarContext": {
50
+ "enabled": true,
51
+ "matchingPolicy": {
52
+ "mode": "subject-and-body-keywords",
53
+ "rankingOrder": ["exact", "prefix", "contains"],
54
+ "alwaysFuzzy": true
55
+ }
56
+ },
57
+ "sharePointContext": {
58
+ "enabled": true,
59
+ "localProjectsRoot": "",
60
+ "matchingPolicy": {
61
+ "mode": "fuzzy-folder-name",
62
+ "rankingOrder": ["exact", "prefix", "contains"],
63
+ "alwaysFuzzy": true
64
+ }
65
+ }
66
+ }
67
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "_meta": {
3
+ "owner": "<alias>@microsoft.com",
4
+ "purpose": "MUTABLE per-project operational mappings (Microsoft internal). Auto-updated by the project-evidence skill at the end of every weekly run when high-confidence hints are discovered. Safe to hand-edit. New project entries are added under m365Mutable.knownSections during B2 bootstrap and populated incrementally as the skill discovers folders, sections, chats, etc.",
5
+ "audience": "Microsoft internal",
6
+ "matching": "case-insensitive on project key (exact > prefix > contains); fuzzy match always on",
7
+ "schema_version": "1.0",
8
+ "last_updated": "<YYYY-MM-DD>"
9
+ },
10
+ "m365Mutable": {
11
+ "metadata": {
12
+ "description": "Mutable M365 operational mappings used to speed and stabilize context retrieval.",
13
+ "defaultNotebookRef": "../m365/m365-auth.json -> m365Auth.oneNote.defaultNotebookId",
14
+ "matching": "case-insensitive by project key (exact/prefix/contains)",
15
+ "source": "Derived from project folder names, mailbox/Teams/OneNote discovery during bootstrap/refresh/retry runs."
16
+ },
17
+ "knownSections": {}
18
+ }
19
+ }
@@ -0,0 +1,27 @@
1
+ # Contributors to the {{PROJECT_NAME}} project Evidence folder.
2
+ # Each contributor owns a subfolder named after their alias and is responsible for
3
+ # their own per-source extracts (Email, Teams-Chats, OneNote, Meetings).
4
+ # SharePoint extracts can be produced by any contributor (folder is shared).
5
+
6
+ project: {{PROJECT_NAME}}
7
+ project_folder: {{PROJECT_FOLDER_PATH}}
8
+ week_definition: Monday-Sunday
9
+
10
+ contributors:
11
+ - alias: {{alias}}
12
+ name: {{Full Name}}
13
+ email: {{email@domain.com}}
14
+ role: {{role}}
15
+ sources_owned: [Email, Teams-Chats, OneNote, SharePoint, Meetings]
16
+ last_run: null
17
+ notes: ""
18
+
19
+ consolidation:
20
+ output_folder: _Consolidated
21
+ cadence: weekly
22
+ owner: {{alias}} # the person who runs the merge step
23
+ rules:
24
+ - Union decisions, action items, open questions; de-duplicate by semantic match.
25
+ - Tag every fact with [source: <alias>/<source-folder>] for provenance.
26
+ - Surface conflicts in a "Conflicts / Discrepancies" section rather than silently picking one.
27
+ - Do NOT include other contributors' raw mailbox/chat content the consolidator can't see; rely on their summaries.
@@ -0,0 +1,32 @@
1
+ # Personal config for Kushi.
2
+ # Copy to: ~/.copilot/project-evidence.yml (Linux/macOS)
3
+ # %USERPROFILE%\.copilot\project-evidence.yml (Windows)
4
+ #
5
+ # Each team member maintains their own copy. Nothing in here is a secret,
6
+ # but it IS personal — never commit a filled copy to a shared repo.
7
+
8
+ # Short id used as your evidence subfolder name (e.g. "alex", "jordan").
9
+ alias: <your-alias>
10
+
11
+ display_name: <Your Full Name>
12
+ email: your.email@example.com
13
+
14
+ # Where your engagement-root lives — i.e. the parent folder that contains
15
+ # one subfolder per project (typically synced from a team SharePoint library).
16
+ # Examples:
17
+ # Windows : 'C:\Users\<you>\OneDrive - <Tenant>\<Team>\Engagement Assets'
18
+ # macOS : '/Users/<you>/OneDrive - <Tenant>/<Team>/Engagement Assets'
19
+ projects_root: '<engagement-root>'
20
+
21
+ # Default OneNote notebook to scan for project pages.
22
+ default_onenote_notebook: <Your Notebook Name>
23
+
24
+ # Projects you actively work on. Kushi scans only these unless you ask otherwise.
25
+ # Match is fuzzy against subfolder names under projects_root.
26
+ active_projects:
27
+ - <ProjectA>
28
+ # - <ProjectB>
29
+ # - <add more here>
30
+
31
+ # (Optional) where the global integrations live, if not the default.
32
+ # integrations_root: '<USER_HOME>/.copilot/integrations'
@@ -0,0 +1,34 @@
1
+ # Per-project integration filter. Lives at: <project>\integrations.yml
2
+ # Tells the skill how to find THIS project's records in the (global) CRM and ADO.
3
+ # Connection / auth / field mappings are NOT here — those are global.
4
+
5
+ project: '{{PROJECT_NAME}}'
6
+
7
+ crm:
8
+ # Provide ONE of these:
9
+ record_id: '' # e.g. 00000000-0000-0000-0000-000000000000 (preferred)
10
+ request_id: '' # e.g. REQ-12345
11
+ title_contains: '{{PROJECT_NAME}}' # last-resort fuzzy
12
+ # Optional: override default app context
13
+ # app_id: 833534b8-5db0-4036-a029-4e4e4d7d4315
14
+
15
+ ado:
16
+ # Provide ONE primary locator (more specific = better):
17
+ engagement_id: 0 # ADO Engagement work item ID (preferred)
18
+ area_path: '' # e.g. 'IS Engagements\\<Project>'
19
+ tag: '' # e.g. 'noridian'
20
+ title_filter: '{{PROJECT_NAME}}' # used by items_changed_between WIQL
21
+ # Optional: ADO query you've saved
22
+ # query_id: ''
23
+
24
+ sharepoint:
25
+ # Optional online SharePoint site for this project (in addition to / instead of a local synced folder).
26
+ # If set, the SharePoint source pulls file metadata + activity via Graph (drives/items/lastModifiedDateTime)
27
+ # instead of (or in addition to) walking the local sync folder.
28
+ # Add via bootstrap, OR later by saying "add sharepoint <URL> to <project>".
29
+ sites:
30
+ # - url: 'https://contoso.sharepoint.com/sites/MyProject' # full site URL
31
+ # library: 'Documents' # document library name (default: Documents)
32
+ # folder: '' # optional sub-folder path inside the library
33
+ # include_subfolders: true
34
+ # recurse_depth: 5
@@ -0,0 +1,71 @@
1
+ # Per-(project × user) settings.
2
+ # Lives at: <project>\Evidence\<alias>\.settings.yml
3
+ # Created and maintained by the bootstrap step (BOOTSTRAP.md).
4
+ # Anything left blank below will trigger a prompt next time the skill runs for this (project × user) pair.
5
+ # Nothing in here is secret — it's per-user query parameters and run state, not credentials.
6
+
7
+ project: '{{PROJECT_NAME}}'
8
+ alias: '{{ALIAS}}'
9
+ display_name: '{{FULL_NAME}}'
10
+ email: '{{EMAIL}}'
11
+
12
+ # ── Per-user query scope (your data only) ─────────────────────────────────────
13
+ mailbox:
14
+ folder: 'inbox' # well-known folder name or custom folder name
15
+ search_keywords: [] # extra search terms to OR with project name (e.g. ['MPXe','policy comments'])
16
+
17
+ teams_chats:
18
+ # Specific Teams chat IDs known to be project-relevant for THIS user.
19
+ # Leave empty to fall back to keyword search across recent chats.
20
+ chat_ids: [] # e.g. ['19:meeting_abc...@thread.v2']
21
+ search_keywords: []
22
+
23
+ onenote:
24
+ notebook: '{{ONENOTE_NOTEBOOK}}' # default from ~\.copilot\project-evidence.yml
25
+ section: '{{ONENOTE_SECTION}}' # e.g. 'Noridian.one'
26
+ page_filter: '' # optional substring filter
27
+
28
+ calendar:
29
+ organizer_filter: '' # optional — restrict to meetings organized by these emails
30
+ subject_keywords: [] # extra subject search terms beyond project name
31
+
32
+ sharepoint:
33
+ # Per-user filter on top of the project-shared sites in <project>\integrations.yml.
34
+ # Leave empty to include everything from the project's configured sites.
35
+ author_filter: [] # restrict to files authored/last-modified-by these emails (e.g. ['{{EMAIL}}'])
36
+ path_includes: [] # restrict to paths containing any of these substrings
37
+ path_excludes: ['_Archive', 'Old'] # skip paths containing these substrings
38
+ snapshot:
39
+ # Snapshot pass body-extraction depth. Tree.md ALWAYS captures full hierarchy.
40
+ # These knobs only control which files get a /snapshot/files/<path>.md body summary.
41
+ recent_n: 25 # capture body summaries for the top-N most-recently-modified files; 0 disables
42
+ always_include: [] # additional relative paths or substrings to always extract (e.g. ['Architecture/', 'SOW.docx'])
43
+
44
+ # ── Q&A behavior (ask-project skill) ──────────────────────────────────────────
45
+ chat:
46
+ freshness_warn_days: 14 # warn before answering if relevant source last-pulled > N days ago; never auto-refreshes
47
+ default_state_file: 'State/00_overview.md' # fallback file when question doesn't map to a specific State topic
48
+ redact_attendee_emails_in_answers: true # strip raw emails from chat answers (names OK)
49
+ max_files_per_answer: 8 # hard cap on files loaded per answer to keep responses focused
50
+ offer_refresh_on_stale: true # if stale, offer @Kushi refresh — but never auto-execute it
51
+
52
+ # ── Per-user privacy / outbound ───────────────────────────────────────────────
53
+ outbound:
54
+ allow_proactive_send: false # HARD DEFAULT: never send anything without explicit per-turn approval
55
+ notify_on_finding: false # if true, suggest (but do not send) outbound notifications when conflicts surface
56
+ preferred_review_doc: 'State/09_open-questions.md'
57
+
58
+ # ── Per-user run state ────────────────────────────────────────────────────────
59
+ last_runs: # populated by the skill after each run
60
+ email: null
61
+ teams_chats: null
62
+ onenote: null
63
+ sharepoint: null
64
+ meetings: null
65
+ crm: null
66
+ ado: null
67
+
68
+ # ── Per-user role on this project (optional) ──────────────────────────────────
69
+ role: '' # e.g. 'engagement lead', 'ISE engineer', 'observer'
70
+ sources_owned: [Email, Teams-Chats, OneNote, SharePoint, Meetings]
71
+ notes: ''
@@ -0,0 +1,35 @@
1
+ <!--
2
+ Paste-prompt template — emitted by pull-* skills when WorkIQ + retry both fail to produce
3
+ a thoroughness-compliant evidence file. The skill MUST customize the bracketed fields and
4
+ present this block verbatim to the user, then wait for paste.
5
+ -->
6
+
7
+ ⚠️ **Thoroughness check failed for `<evidence-file-path>`**
8
+
9
+ WorkIQ returned thin content for this source even after a deeper-query retry. To meet the evidence thoroughness bar (full bodies, not just metadata), I need you to paste the source content directly.
10
+
11
+ **Failing checks:**
12
+ - `<check-id-1>` — `<one-line reason>`
13
+ - `<check-id-2>` — `<one-line reason>`
14
+
15
+ **What to paste**
16
+
17
+ For `<source>` (`<entity-name>`), open the source in `<Outlook / Teams / OneNote / SharePoint / CRM / ADO>` and paste:
18
+
19
+ - `<source-specific item 1, e.g. "Full email body of the 5 threads listed above">`
20
+ - `<source-specific item 2, e.g. "Reply chain for each thread, oldest → newest">`
21
+ - `<source-specific item 3, e.g. "Any attachments referenced">`
22
+
23
+ **Where to paste**
24
+
25
+ Paste between the markers below. I'll incorporate it into `<evidence-file-path>` and re-run the detector.
26
+
27
+ ```
28
+ <<< PASTE START
29
+ ... your paste here ...
30
+ PASTE END >>>
31
+ ```
32
+
33
+ **Skip this entity?**
34
+
35
+ If this content genuinely isn't retrievable (deleted, permission-blocked, out of scope), reply `skip <entity-name>` and I'll mark the entry `[tree-only]` with a coverage note.