dreamcontext 0.9.1 → 0.10.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 (148) hide show
  1. package/README.md +61 -19
  2. package/agents/curator-auditor.md +6 -1
  3. package/agents/curator-worker.md +1 -1
  4. package/agents/dreamcontext-explore.md +10 -0
  5. package/agents/sleep-product.md +15 -6
  6. package/agents/sleep-state.md +2 -0
  7. package/agents/sleep-tasks.md +11 -0
  8. package/dist/agents/curator-auditor.md +6 -1
  9. package/dist/agents/curator-worker.md +1 -1
  10. package/dist/agents/dreamcontext-explore.md +10 -0
  11. package/dist/agents/sleep-product.md +15 -6
  12. package/dist/agents/sleep-state.md +2 -0
  13. package/dist/agents/sleep-tasks.md +11 -0
  14. package/dist/dashboard/assets/{BrainCanvas3D-BvuUW-Ij.js → BrainCanvas3D-DPHKVW49.js} +1 -1
  15. package/dist/dashboard/assets/{_baseUniq-BNAWiBFl.js → _baseUniq-CHd2laKt.js} +1 -1
  16. package/dist/dashboard/assets/{ar-SA-G6X2FPQ2-rNEb6-jN.js → ar-SA-G6X2FPQ2-CJm41yHw.js} +1 -1
  17. package/dist/dashboard/assets/{arc-DDLjNpXk.js → arc-DUqUK5I0.js} +1 -1
  18. package/dist/dashboard/assets/{architectureDiagram-Q4EWVU46-P208qO4N.js → architectureDiagram-Q4EWVU46-CRDXKDvE.js} +1 -1
  19. package/dist/dashboard/assets/{az-AZ-76LH7QW2-Dwql62JX.js → az-AZ-76LH7QW2-BvugTMBT.js} +1 -1
  20. package/dist/dashboard/assets/{bg-BG-XCXSNQG7-BgteTNp8.js → bg-BG-XCXSNQG7-CLr0Fn-e.js} +1 -1
  21. package/dist/dashboard/assets/{blockDiagram-DXYQGD6D-BDSceoPt.js → blockDiagram-DXYQGD6D-B8exO_lL.js} +1 -1
  22. package/dist/dashboard/assets/{bn-BD-2XOGV67Q-BYJ6_efF.js → bn-BD-2XOGV67Q-D0vwADrS.js} +1 -1
  23. package/dist/dashboard/assets/{c4Diagram-AHTNJAMY-CRbiwdrM.js → c4Diagram-AHTNJAMY-Cejeoprm.js} +1 -1
  24. package/dist/dashboard/assets/{ca-ES-6MX7JW3Y-CtFrXfas.js → ca-ES-6MX7JW3Y-CxqyG_0S.js} +1 -1
  25. package/dist/dashboard/assets/channel-44TauaoC.js +1 -0
  26. package/dist/dashboard/assets/{chunk-4BX2VUAB-kqN0Cg_r.js → chunk-4BX2VUAB-BKe2HbO0.js} +1 -1
  27. package/dist/dashboard/assets/{chunk-4TB4RGXK-CpwYPUdR.js → chunk-4TB4RGXK-BYd5xUfH.js} +1 -1
  28. package/dist/dashboard/assets/{chunk-55IACEB6-CQ_4M3g4.js → chunk-55IACEB6-BRmdVuF4.js} +1 -1
  29. package/dist/dashboard/assets/{chunk-EDXVE4YY--HdVil0f.js → chunk-EDXVE4YY-B-pwoibO.js} +1 -1
  30. package/dist/dashboard/assets/{chunk-FMBD7UC4-CrbfOH-q.js → chunk-FMBD7UC4-LC1eQ6Bn.js} +1 -1
  31. package/dist/dashboard/assets/{chunk-OYMX7WX6-BrcCZnqx.js → chunk-OYMX7WX6-w2Fbw2qj.js} +1 -1
  32. package/dist/dashboard/assets/{chunk-QZHKN3VN-Cby58gGN.js → chunk-QZHKN3VN-BCWG4fy9.js} +1 -1
  33. package/dist/dashboard/assets/{chunk-YZCP3GAM-tvOjDART.js → chunk-YZCP3GAM-CrKe7Bc4.js} +1 -1
  34. package/dist/dashboard/assets/classDiagram-6PBFFD2Q-DvAbYAqz.js +1 -0
  35. package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-DvAbYAqz.js +1 -0
  36. package/dist/dashboard/assets/clone-C56fm_aT.js +1 -0
  37. package/dist/dashboard/assets/{cose-bilkent-S5V4N54A-CuwbWQzD.js → cose-bilkent-S5V4N54A-Csw9QUYq.js} +1 -1
  38. package/dist/dashboard/assets/{cs-CZ-2BRQDIVT-DfVAwqqU.js → cs-CZ-2BRQDIVT-CogQs_1l.js} +1 -1
  39. package/dist/dashboard/assets/{da-DK-5WZEPLOC-D1QJqNxG.js → da-DK-5WZEPLOC-CLE1k6n-.js} +1 -1
  40. package/dist/dashboard/assets/{dagre-KV5264BT-Bbf-wMho.js → dagre-KV5264BT-CYO4L2oQ.js} +1 -1
  41. package/dist/dashboard/assets/{de-DE-XR44H4JA-CbCdH8Mp.js → de-DE-XR44H4JA-Cyk4pAkD.js} +1 -1
  42. package/dist/dashboard/assets/{diagram-5BDNPKRD-CvMJJUvv.js → diagram-5BDNPKRD-_l3m-Gzf.js} +1 -1
  43. package/dist/dashboard/assets/{diagram-G4DWMVQ6-BBz7ebE8.js → diagram-G4DWMVQ6-ComC4npi.js} +1 -1
  44. package/dist/dashboard/assets/{diagram-MMDJMWI5-U7IcL5ZQ.js → diagram-MMDJMWI5-xZ9cT0uu.js} +1 -1
  45. package/dist/dashboard/assets/{diagram-TYMM5635-BfTLwlSm.js → diagram-TYMM5635-Dnq3s1v5.js} +1 -1
  46. package/dist/dashboard/assets/{el-GR-BZB4AONW-DvGrscY6.js → el-GR-BZB4AONW-BFImbdQn.js} +1 -1
  47. package/dist/dashboard/assets/{erDiagram-SMLLAGMA-C1ncTn9B.js → erDiagram-SMLLAGMA-kcbabKJD.js} +1 -1
  48. package/dist/dashboard/assets/{es-ES-U4NZUMDT-BlawPkmw.js → es-ES-U4NZUMDT-jGtxZhYt.js} +1 -1
  49. package/dist/dashboard/assets/{eu-ES-A7QVB2H4-p5lXDFKY.js → eu-ES-A7QVB2H4-Bzz2d8CD.js} +1 -1
  50. package/dist/dashboard/assets/event-BbvoZQ5o.js +1 -0
  51. package/dist/dashboard/assets/{fa-IR-HGAKTJCU-DbY6Wzu9.js → fa-IR-HGAKTJCU-63k-G3tN.js} +1 -1
  52. package/dist/dashboard/assets/{fi-FI-Z5N7JZ37-HyRJneut.js → fi-FI-Z5N7JZ37-ezHcIK6s.js} +1 -1
  53. package/dist/dashboard/assets/{flowDiagram-DWJPFMVM-tySa4G4z.js → flowDiagram-DWJPFMVM-B1Uy8SMX.js} +1 -1
  54. package/dist/dashboard/assets/{fr-FR-RHASNOE6-C0ElnhzM.js → fr-FR-RHASNOE6-C6Pe7vKj.js} +1 -1
  55. package/dist/dashboard/assets/{ganttDiagram-T4ZO3ILL-BQsJPxAU.js → ganttDiagram-T4ZO3ILL-CABaaerr.js} +1 -1
  56. package/dist/dashboard/assets/{gitGraphDiagram-UUTBAWPF-B2jHjMzI.js → gitGraphDiagram-UUTBAWPF-CcyLIbFK.js} +1 -1
  57. package/dist/dashboard/assets/{gl-ES-HMX3MZ6V-D5qSPU7d.js → gl-ES-HMX3MZ6V-sdrg75Ty.js} +1 -1
  58. package/dist/dashboard/assets/{graph-deVQIt7H.js → graph-XfL-ygDi.js} +1 -1
  59. package/dist/dashboard/assets/{he-IL-6SHJWFNN-CNsRxzJL.js → he-IL-6SHJWFNN-C9y7ygPP.js} +1 -1
  60. package/dist/dashboard/assets/{hi-IN-IWLTKZ5I-CCLXIBWK.js → hi-IN-IWLTKZ5I-Bf7GXs-7.js} +1 -1
  61. package/dist/dashboard/assets/{hu-HU-A5ZG7DT2-Dq17BfYB.js → hu-HU-A5ZG7DT2-SU6SehRg.js} +1 -1
  62. package/dist/dashboard/assets/{id-ID-SAP4L64H-CRL19WJa.js → id-ID-SAP4L64H-DVtmANJA.js} +1 -1
  63. package/dist/dashboard/assets/{index-BO_pjfQA.js → index-C64a-kHY.js} +1 -1
  64. package/dist/dashboard/assets/index-CC4bLFLV.js +579 -0
  65. package/dist/dashboard/assets/index-DZ3FBso3.css +32 -0
  66. package/dist/dashboard/assets/{infoDiagram-42DDH7IO-DKXhFQx1.js → infoDiagram-42DDH7IO-DfBeu9Gz.js} +1 -1
  67. package/dist/dashboard/assets/{ishikawaDiagram-UXIWVN3A-ixuXBV9q.js → ishikawaDiagram-UXIWVN3A-CbBN1lYP.js} +1 -1
  68. package/dist/dashboard/assets/{it-IT-JPQ66NNP-B-3gnXYZ.js → it-IT-JPQ66NNP-BbmyFH6C.js} +1 -1
  69. package/dist/dashboard/assets/{ja-JP-DBVTYXUO-GCqLTdC-.js → ja-JP-DBVTYXUO-Cbhk39-5.js} +1 -1
  70. package/dist/dashboard/assets/{journeyDiagram-VCZTEJTY-Cda6rfE1.js → journeyDiagram-VCZTEJTY-BW4WNn5U.js} +1 -1
  71. package/dist/dashboard/assets/{kaa-6HZHGXH3-DUr4YiJc.js → kaa-6HZHGXH3-Cm-Swgc1.js} +1 -1
  72. package/dist/dashboard/assets/{kab-KAB-ZGHBKWFO-DGcoDq7_.js → kab-KAB-ZGHBKWFO-BX9BAQyv.js} +1 -1
  73. package/dist/dashboard/assets/{kanban-definition-6JOO6SKY-8II0TptL.js → kanban-definition-6JOO6SKY-D6dnUpyA.js} +1 -1
  74. package/dist/dashboard/assets/{kk-KZ-P5N5QNE5-OnQ3fZQr.js → kk-KZ-P5N5QNE5-MHpPSoz0.js} +1 -1
  75. package/dist/dashboard/assets/{km-KH-HSX4SM5Z-BgLH2RAX.js → km-KH-HSX4SM5Z-BU3ECFbO.js} +1 -1
  76. package/dist/dashboard/assets/{ko-KR-MTYHY66A-BFRlVzp3.js → ko-KR-MTYHY66A-DqT3JGwF.js} +1 -1
  77. package/dist/dashboard/assets/{ku-TR-6OUDTVRD-KXxCpHg7.js → ku-TR-6OUDTVRD-DN2-3fDm.js} +1 -1
  78. package/dist/dashboard/assets/{layout-Bk1_SQxF.js → layout-BZ4MGsUu.js} +1 -1
  79. package/dist/dashboard/assets/{linear-NBVeSfQr.js → linear-C0etayOa.js} +1 -1
  80. package/dist/dashboard/assets/{lt-LT-XHIRWOB4-zYih94tH.js → lt-LT-XHIRWOB4-DQVwHiLl.js} +1 -1
  81. package/dist/dashboard/assets/{lv-LV-5QDEKY6T-BfR2lGJU.js → lv-LV-5QDEKY6T-Dad8CoSF.js} +1 -1
  82. package/dist/dashboard/assets/{min-Czsp1-lf.js → min-Bl_tJyDg.js} +1 -1
  83. package/dist/dashboard/assets/{mindmap-definition-QFDTVHPH-B7iHNGK3.js → mindmap-definition-QFDTVHPH-BNw0aQbU.js} +1 -1
  84. package/dist/dashboard/assets/{mr-IN-CRQNXWMA-CbecgcF-.js → mr-IN-CRQNXWMA-BbxiQT_Z.js} +1 -1
  85. package/dist/dashboard/assets/{my-MM-5M5IBNSE-CsdHXw4v.js → my-MM-5M5IBNSE-UoAgrIPq.js} +1 -1
  86. package/dist/dashboard/assets/{nb-NO-T6EIAALU-r8FpCRvQ.js → nb-NO-T6EIAALU-CImkOb7l.js} +1 -1
  87. package/dist/dashboard/assets/{nl-NL-IS3SIHDZ-Dp3Z4P6_.js → nl-NL-IS3SIHDZ-vfeVTewJ.js} +1 -1
  88. package/dist/dashboard/assets/{nn-NO-6E72VCQL-CQcuUlUa.js → nn-NO-6E72VCQL-DUCB91yA.js} +1 -1
  89. package/dist/dashboard/assets/{oc-FR-POXYY2M6-Dz9rwf28.js → oc-FR-POXYY2M6-BkXl0YMF.js} +1 -1
  90. package/dist/dashboard/assets/{pa-IN-N4M65BXN-AuAonL3w.js → pa-IN-N4M65BXN-CWiVQtSk.js} +1 -1
  91. package/dist/dashboard/assets/{percentages-BXMCSKIN-D9EnbREi.js → percentages-BXMCSKIN-BGA-Ex2O.js} +31 -31
  92. package/dist/dashboard/assets/{pica---loOZLP.js → pica-B8XEUChK.js} +1 -1
  93. package/dist/dashboard/assets/{pieDiagram-DEJITSTG-CiDTXifX.js → pieDiagram-DEJITSTG-Dic1EjdC.js} +1 -1
  94. package/dist/dashboard/assets/{pl-PL-T2D74RX3-4k9qJgDf.js → pl-PL-T2D74RX3-g55_1Rbd.js} +1 -1
  95. package/dist/dashboard/assets/{pt-BR-5N22H2LF-DvKuT6kK.js → pt-BR-5N22H2LF-DQeCXlLm.js} +1 -1
  96. package/dist/dashboard/assets/{pt-PT-UZXXM6DQ-ijbr_1VI.js → pt-PT-UZXXM6DQ-CHvZqZyF.js} +1 -1
  97. package/dist/dashboard/assets/{quadrantDiagram-34T5L4WZ-Bu9Comci.js → quadrantDiagram-34T5L4WZ-CP7lQiIi.js} +1 -1
  98. package/dist/dashboard/assets/{requirementDiagram-MS252O5E-D62TW6xA.js → requirementDiagram-MS252O5E-BWtUEAf6.js} +1 -1
  99. package/dist/dashboard/assets/{ro-RO-JPDTUUEW-C0llzWmG.js → ro-RO-JPDTUUEW-EwDfeMZo.js} +1 -1
  100. package/dist/dashboard/assets/{ru-RU-B4JR7IUQ-BeSwVB2r.js → ru-RU-B4JR7IUQ-CD2Zj2l8.js} +1 -1
  101. package/dist/dashboard/assets/{sankeyDiagram-XADWPNL6-TlSEi12K.js → sankeyDiagram-XADWPNL6-DwvQDD5y.js} +1 -1
  102. package/dist/dashboard/assets/{sequenceDiagram-FGHM5R23-ScKG2Xsm.js → sequenceDiagram-FGHM5R23-BRglyRtb.js} +1 -1
  103. package/dist/dashboard/assets/{si-LK-N5RQ5JYF-DWeue3dw.js → si-LK-N5RQ5JYF-BY5MM9Vd.js} +1 -1
  104. package/dist/dashboard/assets/{sk-SK-C5VTKIMK-C2sh3w4f.js → sk-SK-C5VTKIMK-5GG4lqoV.js} +1 -1
  105. package/dist/dashboard/assets/{sl-SI-NN7IZMDC-CeXk9ucf.js → sl-SI-NN7IZMDC-DX6b0Bj8.js} +1 -1
  106. package/dist/dashboard/assets/{stateDiagram-FHFEXIEX-BB1JoyXM.js → stateDiagram-FHFEXIEX-Dl3yCEGL.js} +1 -1
  107. package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-Q3JaGk-b.js +1 -0
  108. package/dist/dashboard/assets/{subset-shared.chunk-CWvpWWsn.js → subset-shared.chunk-CmSgs0wP.js} +1 -1
  109. package/dist/dashboard/assets/{subset-worker.chunk-D7Ec71V-.js → subset-worker.chunk-gyKmbtyq.js} +1 -1
  110. package/dist/dashboard/assets/{sv-SE-XGPEYMSR-8YPrynz7.js → sv-SE-XGPEYMSR-Cf_qIZ2K.js} +1 -1
  111. package/dist/dashboard/assets/{ta-IN-2NMHFXQM-CmMKeEZv.js → ta-IN-2NMHFXQM-zwatd37w.js} +1 -1
  112. package/dist/dashboard/assets/{th-TH-HPSO5L25-BIxym374.js → th-TH-HPSO5L25-Cw3uejzD.js} +1 -1
  113. package/dist/dashboard/assets/{timeline-definition-GMOUNBTQ-Cx1z6jhx.js → timeline-definition-GMOUNBTQ-C7YbVDU1.js} +1 -1
  114. package/dist/dashboard/assets/{tr-TR-DEFEU3FU-BZUk--nT.js → tr-TR-DEFEU3FU-C15eSVKk.js} +1 -1
  115. package/dist/dashboard/assets/{uk-UA-QMV73CPH-DKP6R9nZ.js → uk-UA-QMV73CPH-DtjXD0R5.js} +1 -1
  116. package/dist/dashboard/assets/{vennDiagram-DHZGUBPP-CHrTxlSz.js → vennDiagram-DHZGUBPP-CM3qRaPy.js} +1 -1
  117. package/dist/dashboard/assets/{vi-VN-M7AON7JQ-D1tkx3Op.js → vi-VN-M7AON7JQ-TYc9r2ul.js} +1 -1
  118. package/dist/dashboard/assets/{wardley-RL74JXVD-DuzpwUu5.js → wardley-RL74JXVD-hKHpsv-V.js} +1 -1
  119. package/dist/dashboard/assets/{wardleyDiagram-NUSXRM2D-x03tOVd0.js → wardleyDiagram-NUSXRM2D-By2VWEm6.js} +1 -1
  120. package/dist/dashboard/assets/webviewWindow-BbG9Cr7f.js +1 -0
  121. package/dist/dashboard/assets/window-DmNpeJAL.js +1 -0
  122. package/dist/dashboard/assets/{xychartDiagram-5P7HB3ND-CufD9zuW.js → xychartDiagram-5P7HB3ND-B_jwEdiv.js} +1 -1
  123. package/dist/dashboard/assets/{zh-CN-LNUGB5OW-CpicUYEV.js → zh-CN-LNUGB5OW-BMLBhdOl.js} +1 -1
  124. package/dist/dashboard/assets/{zh-HK-E62DVLB3-DyNkpg-N.js → zh-HK-E62DVLB3-B3F6zPCV.js} +1 -1
  125. package/dist/dashboard/assets/{zh-TW-RAJ6MFWO-Cg30MEjI.js → zh-TW-RAJ6MFWO-BtvvFKFv.js} +1 -1
  126. package/dist/dashboard/favicon.svg +14 -9
  127. package/dist/dashboard/index.html +5 -4
  128. package/dist/dashboard/logo.png +0 -0
  129. package/dist/index.js +7470 -1411
  130. package/dist/skill-packs/goal-skill/SKILL.md +5 -0
  131. package/package.json +8 -2
  132. package/skill/SKILL.md +10 -4
  133. package/skill/references/cli-reference.md +10 -6
  134. package/skill/references/integrations.md +17 -8
  135. package/skill/references/knowledge-and-recall.md +8 -0
  136. package/skill/references/sleep.md +1 -1
  137. package/skill/references/tasks-and-features.md +60 -4
  138. package/skill-deep-research/SKILL.md +179 -0
  139. package/skill-packs/goal-skill/SKILL.md +5 -0
  140. package/dist/dashboard/assets/channel-CJWWthUO.js +0 -1
  141. package/dist/dashboard/assets/classDiagram-6PBFFD2Q-D8yKg5c-.js +0 -1
  142. package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-D8yKg5c-.js +0 -1
  143. package/dist/dashboard/assets/clone-DkTWs9rv.js +0 -1
  144. package/dist/dashboard/assets/index-CQkBs_Vm.js +0 -484
  145. package/dist/dashboard/assets/index-aCkhI_aO.css +0 -1
  146. package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-BqR3Ofhf.js +0 -1
  147. package/dist/dashboard/assets/webviewWindow-Dlc9MvRw.js +0 -1
  148. package/dist/dashboard/assets/window-D0tFurhp.js +0 -1
@@ -122,6 +122,11 @@ dreamcontext tasks status <slug> in_progress "plan validated; implementing"
122
122
 
123
123
  If `<slug>` already exists, de-collide (append a short suffix) rather than clobbering.
124
124
 
125
+ If the project declares **custom task fields** (`_dream_context/overrides/task.md`), `tasks create`
126
+ hard-fails (exit 1) on an unset `required` field — set each with `--field key=value` on create. For
127
+ any field marked `ask: true`, ask the user for the value back in Phase 0 (it's a human judgment) rather
128
+ than fabricating it. The SubagentStart briefing lists the active fields and their prompts.
129
+
125
130
  ### Phase 4 — IMPLEMENT
126
131
 
127
132
  Dispatch **one** `goal-implementer` (sonnet; escalate to opus for genuinely hard goals)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dreamcontext",
3
- "version": "0.9.1",
3
+ "version": "0.10.0",
4
4
  "description": "dreamcontext — the persistent brain for your AI agents. Remembers what you built, knows how your project works.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,6 +11,7 @@
11
11
  "skill",
12
12
  "skill-initializer",
13
13
  "skill-curator",
14
+ "skill-deep-research",
14
15
  "skill-packs",
15
16
  "agents",
16
17
  "README.md",
@@ -51,14 +52,19 @@
51
52
  "commander": "^13.1.0",
52
53
  "fast-glob": "^3.3.3",
53
54
  "gray-matter": "^4.0.3",
54
- "nanoid": "^5.1.2"
55
+ "nanoid": "^5.1.2",
56
+ "ws": "^8.21.0"
55
57
  },
56
58
  "devDependencies": {
57
59
  "@playwright/test": "^1.60.0",
58
60
  "@types/node": "^22.13.4",
61
+ "@types/ws": "^8.18.1",
59
62
  "sharp": "^0.34.5",
60
63
  "tsup": "^8.4.0",
61
64
  "typescript": "^5.7.3",
62
65
  "vitest": "^3.0.6"
66
+ },
67
+ "optionalDependencies": {
68
+ "node-pty": "^1.1.0"
63
69
  }
64
70
  }
package/skill/SKILL.md CHANGED
@@ -75,7 +75,7 @@ dreamcontext is **more than memory files**. Every capability below is real and s
75
75
  | Capability | What it is | Reference |
76
76
  |---|---|---|
77
77
  | **Structured memory** | soul/user/memory + knowledge + tasks, auto-loaded each session | this file |
78
- | **Tasks** | Working documents with changelog, RICE, due dates, status lifecycle, assignees | [tasks-and-features.md](references/tasks-and-features.md) |
78
+ | **Tasks** | Working documents with changelog, RICE, status lifecycle, start/due date ranges, resolved assignees, and project-declared custom fields (`overrides/task.md`) | [tasks-and-features.md](references/tasks-and-features.md) |
79
79
  | **Features (PRDs)** | Retrospective product docs, updated only during sleep | [tasks-and-features.md](references/tasks-and-features.md) |
80
80
  | **Knowledge** | Tagged deep docs, pinning, staleness, Excalidraw diagrams | [knowledge-and-recall.md](references/knowledge-and-recall.md) |
81
81
  | **Memory recall** | Haiku/BM25 search over the whole corpus; auto-injected on prompts | [knowledge-and-recall.md](references/knowledge-and-recall.md) |
@@ -196,7 +196,7 @@ When in doubt about a command or flag, open [cli-reference.md](references/cli-re
196
196
 
197
197
  10. **Use `dreamcontext-explore`, not `Explore`.** The default Explore agent is blocked via a PreToolUse hook. `dreamcontext-explore` checks curated context first, saving thousands of tokens.
198
198
 
199
- 11. **Tag before you create.** Before tagging a task/feature/knowledge, consult `dreamcontext taxonomy vocab` and reuse canonical faceted tags (`topic:recall`, `domain:security`) before inventing new ones. Fragmenting tags degrades recall.
199
+ 11. **Tag before you create.** Before tagging a task/feature/knowledge, consult `dreamcontext taxonomy vocab` and reuse canonical faceted tags (`topic:recall`, `domain:security`) before inventing new ones. Fragmenting tags degrades recall. To heal accumulated drift in one shot, run `dreamcontext taxonomy audit --fix` (bulk-normalizes alias/normalizable tags to canonical across the corpus — safe, idempotent, `--dry-run` to preview; orphans are reported, never guessed).
200
200
 
201
201
  12. **Be surgical.** Only touch what changed. ~150-line soft limit on context files — extract detail to knowledge, keep a summary + reference. LIFO inserts go at the top (CHANGELOG, task changelog, constraint sections).
202
202
 
@@ -280,6 +280,8 @@ dreamcontext tasks complete <name> "summary" # done
280
280
 
281
281
  Status: `todo → in_progress → in_review → completed`. Sections: `why`, `user_stories`, `acceptance_criteria`, `constraints`, `technical_details`, `notes`, `changelog`.
282
282
 
283
+ **Custom fields (if this project declares them).** When `_dream_context/overrides/task.md` exists, every task carries project-defined custom fields. Their **values are surfaced to you inline** — in the snapshot's Active Tasks block and in `dreamcontext tasks list --long` — so you can see them without opening the file; unset **required** fields show as `⚠ UNSET (required)`. When you create or reconcile a task, **set every declared field** (`dreamcontext tasks field <slug> <key> <value>` or `tasks create --field key=value`). **REQUIRED fields are mandatory — never create or complete a task with a required field left empty.** Fields marked **[ASK THE USER]** (`ask: true`) capture a human judgment (e.g. a time estimate) — **ask the user for the value when creating the task instead of guessing it.** The full schema + sync behavior → [tasks-and-features.md](references/tasks-and-features.md).
284
+
283
285
  **RICE, due dates, tags/people, the Workflow flowchart, versioning, and multi-product** → [tasks-and-features.md](references/tasks-and-features.md).
284
286
  **Syncing tasks to a cloud backend (ClickUp _or_ GitHub — one at a time)** → [integrations.md](references/integrations.md).
285
287
 
@@ -299,7 +301,8 @@ Status: `todo → in_progress → in_review → completed`. Sections: `why`, `us
299
301
 
300
302
  ## Sub-Agents
301
303
 
302
- - **`dreamcontext-explore`** — context-accelerated codebase exploration. Use for ALL exploration (default Explore is blocked). Uses the SubagentStart briefing to narrow searches.
304
+ - **`dreamcontext-explore`** — context-accelerated codebase exploration. Use for ALL exploration (default Explore is blocked). Uses the SubagentStart briefing to narrow searches. It is the **fast, single-pass** searcher — one agent, tight budget, one answer.
305
+ - **`dreamcontext-deep-research` skill** — the **iterative, sub-agent-driven corpus-synthesis** orchestrator: the heavy counterpart to `dreamcontext-explore`. Invoke it via the `Skill` tool (or `/dreamcontext-deep-research`) when a question needs **synthesis across a large or multi-project / federated corpus** and one explore pass comes back thin or fragmented — "synthesize/reconcile everything we know about X across my vaults", "deep dive and cite it", "explore is too shallow for this". It fans out parallel `dreamcontext-explore` searchers over the whole curated corpus **and connected peer vaults**, adversarially verifies the load-bearing claims, and returns a **synthesized, cited** report — not raw hits. Read-only. **Escalation rule:** start with `dreamcontext-explore`; escalate to deep-research when one pass and one answer leave a cross-corpus question half-answered. Don't fan out a 10-agent research run at a tiny single-project brain.
303
306
  - **`initializer` skill** — the **interactive, sub-agent-driven brain bootstrap**. Invoke it via the `Skill` tool when this project has **no `_dream_context/`** or a **sparse** one (empty `knowledge/`, zero features, untouched template stubs). It orchestrates scout → confirm-hierarchy → progressive ingest → verify, migrating whatever material the user has into the proper knowledge/feature/task hierarchy. It drives its own sub-agents (`initializer-scout`, `initializer-ingestor`, `initializer-verifier`) and handles codebase-only repos too (a light scout + ingest pass) — there is no separate bootstrap agent.
304
307
  - **Sleep specialists** (`sleep-tasks`, `sleep-state`, `sleep-product`, `sleep-migration`) — dispatched by the main agent during the sleep flow only.
305
308
 
@@ -343,9 +346,12 @@ _dream_context/
343
346
  │ │ └── <title>/<title>.excalidraw.md ← diagrams live INSIDE their context folder
344
347
  │ ├── data-structures/{default,<product>}.md ← schemas (recall-indexed; ```sql body)
345
348
  │ └── products/<product>.md ← per-product knowledge (multi-product)
349
+ ├── overrides/
350
+ │ └── task.md ← OPTIONAL: project task template + custom_fields schema (briefed to agents)
346
351
  ├── state/
347
- │ ├── <task>.md ← Active tasks (frontmatter may include product:)
352
+ │ ├── <task>.md ← Active tasks (frontmatter may include product:, start_date, due_date, custom_fields)
348
353
  │ ├── .config.json ← platforms, packs, multiProduct, taskBackend, people…
354
+ │ ├── .active-version.json ← current sprint (active planning version)
349
355
  │ ├── .sleep.json .secrets.json (gitignored) .active-task
350
356
  ```
351
357
 
@@ -36,19 +36,22 @@ Every command and flag, grouped. All commands are prefixed with `dreamcontext`.
36
36
  |---|---|
37
37
  | `tasks list` | List/filter/group tasks (excludes completed by default). Flags: `-s/--status`, `-a/--all`, `--tag <t>` (repeatable, AND), `--any-tag <t>` (repeatable, OR), `--version <id>`, `--priority <level>`, `--feature <slug>`, `-g/--group-by tag\|version\|priority\|status`, `--long`, `--tags`, `--json`. Filters compose (AND), case-insensitive. |
38
38
  | `tasks tags` | Distinct task tags with counts. `-a/--all`, `--json`. |
39
- | `tasks create <name>` | Create a task. Flags: `-d/--description`, `-p/--priority critical\|high\|medium\|low`, `-u/--urgency …`, `-s/--status`, `-t/--tags <csv>`, `-w/--why`, `-v/--version`, `--person <name>`, `--reach <1-10>`, `--impact <1-5>`, `--confidence 25\|50\|75\|100`, `--effort <weeks>`, `--due YYYY-MM-DD`. |
39
+ | `tasks create <name>` | Create a task. Flags: `-d/--description`, `-p/--priority critical\|high\|medium\|low`, `-u/--urgency …`, `-s/--status`, `-t/--tags <csv>`, `-w/--why`, `-v/--version`, `--person <name>`, `--reach <1-10>`, `--impact <1-5>`, `--confidence 25\|50\|75\|100`, `--effort <weeks>`, `--start YYYY-MM-DD`, `--due YYYY-MM-DD`, `--field <key=value>` (repeatable; sets declared custom fields), `--allow-missing-required` (create a draft even when a required custom field is unset). **Fails** if a required custom field is unset and `--allow-missing-required` is not given. |
40
40
  | `tasks rice <name>` | Print or update RICE values. `--reach`/`--impact`/`--confidence`/`--effort`, `--clear`. |
41
- | `tasks due <name> <YYYY-MM-DD\|clear>` | Set or clear a due date. |
41
+ | `tasks start <name> <YYYY-MM-DD\|clear>` | Set or clear a planned start date (range start). Must be ≤ the due date; setting it removes the `backlog` tag. |
42
+ | `tasks due <name> <YYYY-MM-DD\|clear>` | Set or clear a due/end date (range end). |
42
43
  | `tasks tag <name> <tags...>` | Add (or `--remove`) tags. `person:<slug>` assigns a person. |
44
+ | `tasks field <name> <key> [value\|clear]` | Set or clear a user-defined custom field declared in `overrides/task.md` (synced to ClickUp/GitHub). Validates select options + number types. |
43
45
  | `tasks insert <name> <section> <content...>` | Insert into a section: `why`, `user_stories`, `acceptance_criteria`, `constraints`, `technical_details`, `notes`, `changelog`. |
44
46
  | `tasks log <name> [content...]` | Add a changelog entry (cross-session continuity). **Use every session.** |
45
- | `tasks status <name> <todo\|in_progress\|in_review\|completed> [reason...]` | Change status (logs to changelog). |
47
+ | `tasks status <name> <todo\|in_progress\|in_review\|completed> [reason...]` | Change status (logs to changelog). On the first move to `in_progress`, stamps `start_date` with today if it is unset (a planned start is never overwritten). |
46
48
  | `tasks complete <name> [summary...]` | Mark completed (convenience). |
47
49
  | `tasks delete <name>` | Delete a task (propagates to remote backend on sync). `--yes`. |
48
- | `tasks doctor [name]` | Validate the Workflow flowchart is in sync with Acceptance Criteria (all tasks if name omitted). |
49
- | `tasks sync [push\|pull\|both]` | Sync with the remote backend (no-op on local). `--hook`, `--json`. |
50
+ | `tasks rename <name> <new-name>` | Rename a task: rewrites the name, moves the file to the new slug, and re-keys the sync mapping by the stable dcId so the **same** remote task/issue is updated on next sync never duplicated. Use this instead of hand-editing `name:` + renaming the file. |
51
+ | `tasks doctor [name]` | Validate the Workflow flowchart is in sync with Acceptance Criteria (all tasks if name omitted). `--remote` also checks the remote backend for assignee drift (needs a token). |
52
+ | `tasks sync [push\|pull\|both]` | Sync with the remote backend (no-op on local). `--hook`, `--reconcile` (heal pre-existing assignee drift below the watermark — #78), `--json`. |
50
53
  | `tasks members` | People with access to the remote list (assignee candidates). `--json`. |
51
- | `tasks provision` | Create recommended custom fields on the remote list. |
54
+ | `tasks provision` | Create recommended + override-declared custom fields on the remote backend (ClickUp list fields / GitHub labels). Reuses any that already exist by name. |
52
55
  | `tasks sync-hooks install\|uninstall` | Manage best-effort git sync triggers (post-commit, pre-push). |
53
56
 
54
57
  Sections for `tasks insert`: `why`, `user_stories`, `acceptance_criteria`, `constraints`, `technical_details`, `notes`, `changelog`. See [tasks-and-features.md](tasks-and-features.md) for the full protocol.
@@ -140,6 +143,7 @@ See [sleep.md](sleep.md) for the full flow.
140
143
  |---|---|
141
144
  | `taxonomy vocab` | Show the resolved vocabulary (defaults + `core/taxonomy.json`). `--json`, `--facet <facet>`. |
142
145
  | `taxonomy audit` | Audit corpus tags against the vocabulary (read-only). `--json`. |
146
+ | `taxonomy audit --fix` | **Bulk-normalize** alias/normalizable tags → canonical faceted form across every knowledge/feature/task file. Safe + idempotent: already-canonical tags are untouched; orphan tags with no alias/canonical target are reported, never guessed. `--dry-run` previews the rewrite plan and writes nothing; `--json` for automation. Workflow is alias-then-fix: teach a mapping with `taxonomy alias`, then `audit --fix`. |
143
147
  | `taxonomy init` | Scaffold `core/taxonomy.json` (idempotent). |
144
148
  | `taxonomy add <tag>` | Add a tag to the vocabulary. |
145
149
  | `taxonomy alias <alias> <canonical>` | Add an alias→canonical mapping. |
@@ -15,8 +15,9 @@ This reference covers everything beyond the local markdown brain. **If a user as
15
15
  #### What it does
16
16
  - **Bidirectional sync** (`push`, `pull`, or `both`) between local task files and a ClickUp list.
17
17
  - **Status mapping** between dreamcontext statuses (`todo/in_progress/in_review/completed`) and ClickUp statuses.
18
- - **RICE + custom fields**: provisions recommended ClickUp custom fields (urgency, summary, RICE reach/impact/confidence/effort, …) and round-trips them.
19
- - **Assignees**: `person:<slug>` tags map to ClickUp member IDs bidirectionally (multi-assignee; the full `assignees[]` set survives push/pull). See "People & assignees" in [tasks-and-features.md](tasks-and-features.md).
18
+ - **RICE + custom fields**: provisions recommended ClickUp custom fields (urgency, summary, RICE reach/impact/confidence/effort, …) and round-trips them. **User-declared custom fields** (from `overrides/task.md`) also round-trip — `select` → native drop_down, others → native list field. See "Task format & custom-field overrides" in [tasks-and-features.md](tasks-and-features.md).
19
+ - **Date ranges**: a task's planned `start` and `due`/end both map to ClickUp's native start/due fields (push, pull, LWW-merge, and clear all symmetric).
20
+ - **Assignees**: `person:<slug>` tags map to ClickUp members bidirectionally (multi-assignee; the full `assignees[]` set survives push/pull). Names **resolve against the live roster** — exact/fuzzy match canonicalizes to the member's slug, an ambiguous name aborts, an unmatched name warns (recorded but won't sync, never silently reassigned to the token owner). See "People & assignees" in [tasks-and-features.md](tasks-and-features.md).
20
21
  - **Changelog as comments**: task changelog entries post as ClickUp comments (`changelogTarget: 'comments'`).
21
22
  - **Conflict safety**: conflicting edits are preserved as conflict files rather than silently overwritten; a sync ledger tracks a watermark, pending pushes, and an op queue.
22
23
  - **Rate-limit hardened**: throttles at 90 req/min (under ClickUp's 100/min cap), retries with Retry-After backoff, and a partial push can never look like success — `sleep done` auto-retries once on failed pushes, then errors loudly with the failed slugs.
@@ -53,7 +54,7 @@ dreamcontext tasks sync [push|pull|both] # default: both; no-op on the local b
53
54
  dreamcontext tasks sync --hook # best-effort mode for git hooks (never fails, exit 0)
54
55
  dreamcontext tasks sync --json # machine-readable sync report
55
56
  dreamcontext tasks members [--json] # people with access to the remote list (assignee candidates)
56
- dreamcontext tasks provision # create the recommended custom fields on the list
57
+ dreamcontext tasks provision # create recommended + override-declared custom fields (reuses existing ones by name)
57
58
  dreamcontext tasks sync-hooks install|uninstall # manage the git sync triggers
58
59
  ```
59
60
 
@@ -71,8 +72,9 @@ The same backend interface, talking **plain GitHub Issues over REST** (no GraphQ
71
72
  - **Bidirectional sync** (`push`/`pull`/`both`) between local task files and a repo's Issues.
72
73
  - **Status mapping:** `completed` → issue **closed** `state_reason: completed`; `todo`/`in_progress`/`in_review` → **open** + a `dc:*` sub-status label (`dc:in-progress`, `dc:in-review`; `todo` = no label); reopen → **open** `state_reason: reopened`.
73
74
  - **Soft-delete (the one divergence from ClickUp):** `tasks delete` **closes** the issue as `state_reason: not_planned` — it NEVER hard-deletes (GitHub REST can't, and issue history is preserved). Inbound, a `not_planned` close removes the local mirror (any unsaved local edits are preserved to `.conflicts/` first).
74
- - **Fields as labels:** priority/urgency/tags/version ride as labels (`priority:*`, `urgency:*`, `version:*`, plus your plain tags). RICE stays local-only (no custom fields on plain issues — see Tier-2).
75
- - **Assignees:** `person:<slug>` tags issue assignees (must be repo collaborators); a non-collaborator assignee is skipped gracefully, never a 4xx that aborts the sync. See "People & assignees" in [tasks-and-features.md](tasks-and-features.md).
75
+ - **Fields as labels:** priority/urgency/tags/version ride as labels (`priority:*`, `urgency:*`, `version:*`, plus your plain tags). RICE stays local-only (no native custom fields on plain issues — see Tier-2).
76
+ - **User custom fields + dates in the body:** override-declared `select` fields become `<key>:<value>` labels; other custom fields land in a `<!-- dc:fields -->` block, and a task's start/due dates in a `<!-- dc:dates -->` block both composed above the prose and stripped before the 3-way merge so they never pollute the body diff.
77
+ - **Assignees:** `person:<slug>` tags ↔ issue assignees (must be repo collaborators); a non-collaborator assignee is skipped gracefully, never a 4xx that aborts the sync. Names **resolve against the live roster** (same matcher as ClickUp: exact/fuzzy → canonical slug, ambiguous → abort, unmatched → warn, never silently dropped). See "People & assignees" in [tasks-and-features.md](tasks-and-features.md).
76
78
  - **Changelog as comments:** task changelog entries post as issue comments (union-merged, deduped — same pattern as ClickUp).
77
79
  - **Conflict safety + watermark:** reuses the SAME generic sync engine (ledger / watermark / op-queue / 3-way merge) as ClickUp, unchanged. Watermark is the issue `updated_at` (server time). Delta fetch is `GET /repos/{o}/{r}/issues?state=all&since=<ISO>` with **page-number pagination** (pull-requests filtered out).
78
80
  - **Rate-limit hardened:** paces under GitHub's 5000 req/hr cap with Retry-After backoff; a partial push can never look like success.
@@ -113,14 +115,21 @@ dreamcontext dashboard --launcher # vault-agnostic launcher mode (resolves
113
115
  ```
114
116
  A SessionStart hook auto-opens it when a session starts and no server is running (opt out with `DREAMCONTEXT_AUTO_DASHBOARD=0`).
115
117
 
118
+ The sidebar is grouped into **Workspace** (Sleepy, Tasks, Council), **Memory** (Core, Knowledge, Features, Taxonomy), **Brain** (Map, Sleep Cycle), and **Control** (Packs, Settings), plus a "What is this?" page.
119
+
116
120
  **What's in it:**
117
- - **Kanban board** — drag-and-drop, multi-select filters (status/priority/urgency/tags/version) with type-ahead, sorting, grouping; Notion-style task detail panel to create tasks, change status, add changelog entries.
121
+ - **Sleepy** (Workspace) the dashboard's Search + Ask surface: a scoped recall widget that runs the same engine as the CLI (empty query = browse; typing = live debounced BM25; "Intelligent" = a Haiku intent pass), plus an in-app **interactive Claude Code** agent (multi-session tabs, split panes; desktop-gated, read-only by default). This is the dashboard twin of the desktop Sleepy notch.
122
+ - **Tasks board** — drag-and-drop Kanban with **saved views** (each carrying its own persisted filter/sort/grouping), a two-pane **include/exclude** filter (status/priority/tags/version/assignee) with type-ahead, a **Versions** popover, toggleable card **Properties** badges, and an **At-Risk alert**; view prefs persist shared (`overrides/board.json`) or local (`state/board.local.json`). Notion-style task detail panel to create tasks, change status, edit start/due dates and custom fields, add changelog entries. The **version filter is sprint-aware** — current / planning / released sprints with set-current + mark-complete actions (backed by `state/.active-version.json`).
118
123
  - **Eisenhower matrix** — priority×urgency quadrant planning; **Scatter view** uses RICE scores.
124
+ - **Time-axis task views** — **Timeline (Gantt)** rendering each task's start→due range, a **Calendar**, and an **Activity heatmap** of completion cadence (all driven by the same `start_date`/`due_date` range).
119
125
  - **Core editor** — split-pane markdown editing + live preview for soul/user/memory/etc.
120
126
  - **Knowledge manager** — search, pin/unpin; **Feature PRD viewer**; **SQL ER diagram** preview for data-structures.
127
+ - **Taxonomy** (Memory) — view and edit the tag vocabulary (facets, aliases) from the UI; mirrors `dreamcontext taxonomy`.
128
+ - **Packs** (Control) — browse and install/refresh skill packs from the UI.
121
129
  - **Version manager** — plan and release versions.
122
- - **Sleep tracker** — debt gauge, session-history timeline, and a list of every manual change made through the dashboard (recorded to `.sleep.json` so the agent consolidates your edits during sleep).
123
- - **Brain graph** — interactive network of memory/knowledge/features/decisions with explicit + inferred edges.
130
+ - **Settings — cloud tasks** — enter the ClickUp/GitHub API token from the UI (written to gitignored `state/.secrets.json`, masked, never echoed), Test Connection, and **preview-then-provision** custom fields (a dry run lists what would be created vs. already exists); plus a **Task Format & Custom Fields** editor for `overrides/task.md` (raw template + structured field schema).
131
+ - **Sleep Cycle** (sleep tracker) debt gauge, session-history timeline, and a list of every manual change made through the dashboard (recorded to `.sleep.json` so the agent consolidates your edits during sleep).
132
+ - **Map** (brain graph) — interactive network of memory/knowledge/features/decisions with explicit + inferred edges.
124
133
  - **Council Hall** — every debate as a searchable card grid; detail view with Overview / Agents / Matrix tabs.
125
134
  - **"What is this?"** explainer page with live faculty diagrams.
126
135
 
@@ -102,6 +102,11 @@ Writes a CHANGELOG entry (`type=note`, `scope=quick`); the sleep cycle reconcile
102
102
  - BM25 is keyword/stemming-based, not semantic — "ML practitioner" won't match "data scientist" (haiku mode mitigates this).
103
103
  - Recall does **not** replace the SessionStart snapshot (soul/user/memory/active-tasks/knowledge-index are always pre-loaded). It is not a vector DB or mem0; the corpus is the same set the sleep agents curate.
104
104
 
105
+ ### Two depths of search: explore vs deep-research
106
+ Recall feeds two read surfaces — pick by how much synthesis the question needs:
107
+ - **`dreamcontext-explore`** (fast, single-pass): one sub-agent, recall-then-grep, one answer. Use for "where is X?" / "how does Y work?" on one project. This is the default and handles the vast majority of lookups.
108
+ - **`dreamcontext-deep-research` skill** (iterative, multi-agent): when a question needs **synthesis across a large or multi-project / federated corpus** and one explore pass comes back thin. The main agent decomposes the question, fans out parallel `dreamcontext-explore` searchers across the corpus **and connected peer vaults**, loops to close gaps, **adversarially verifies** the load-bearing claims, then writes a **synthesized, cited** report. Invoke via `/dreamcontext-deep-research`. **Escalation rule:** start with explore; escalate only when one pass and one answer leave a cross-corpus question half-answered. It is read-only — synthesis, not mutation.
109
+
105
110
  ---
106
111
 
107
112
  ## Root-cause analysis pattern
@@ -123,12 +128,15 @@ Consistent tags make recall sharp; fragmented near-duplicate tags degrade it. Be
123
128
  dreamcontext taxonomy vocab [--facet <facet>] [--json] # resolved vocabulary (defaults + core/taxonomy.json)
124
129
  dreamcontext taxonomy resolve <tag> # normalized form, classification, canonical
125
130
  dreamcontext taxonomy audit [--json] # surface non-canonical / orphan tags (read-only)
131
+ dreamcontext taxonomy audit --fix [--dry-run] [--json] # BULK-normalize alias/normalizable tags → canonical
126
132
  dreamcontext taxonomy init # scaffold core/taxonomy.json (idempotent)
127
133
  dreamcontext taxonomy add <facet:value> # add a new vocabulary tag
128
134
  dreamcontext taxonomy alias <alias> <canonical> # merge a shorthand into a canonical tag
129
135
  ```
130
136
  Standard bare tags: `architecture`, `api`, `frontend`, `backend`, `database`, `devops`, `security`, `testing`, `design`, `decisions`, `onboarding`, `domain`. **Never hand-edit `core/taxonomy.json`** — mutate via the CLI. `sleep-product` runs taxonomy maintenance during consolidation.
131
137
 
138
+ **Bulk-healing tag drift (`audit --fix`).** `taxonomy audit` only *reports* drift; `taxonomy audit --fix` *fixes* it in one shot across every knowledge/feature/task file. For each frontmatter tag it computes `normalizeTag → resolveAlias`; if that yields a **different tag that is canonical** in the vocabulary it rewrites it (e.g. `search → topic:recall`, `excalidraw → topic:excalidraw` once you've added that alias, `Architecture → architecture`). It is **safe by construction**: already-canonical tags are never touched (so `decisions` is not churned to `decision`), and orphan tags with no alias/canonical target are left untouched and reported as *"needs a vocab decision"* — resolve those first with `taxonomy add`/`taxonomy alias`, then re-run. The workflow is **alias-then-fix**: `taxonomy alias <orphan> <canonical>` teaches the mapping once, `audit --fix` applies it everywhere. Preview with `--fix --dry-run` (writes nothing), apply with `--fix`, automate with `--fix --json`. Idempotent — a second run is a no-op.
139
+
132
140
  ---
133
141
 
134
142
  ## Excalidraw boards (diagrams)
@@ -63,7 +63,7 @@ For non-file-change work (architecture discussion, a decision with no edits): `d
63
63
 
64
64
  | Specialist | Owns | Notes |
65
65
  |---|---|---|
66
- | `sleep-tasks` | Task files (`state/*.md`) | Reconciles task bodies to truth, bumps statuses, creates tasks for untracked work, attaches to the planning version. |
66
+ | `sleep-tasks` | Task files (`state/*.md`) | Reconciles task bodies to truth, bumps statuses, creates tasks for untracked work, attaches to the planning version, sets the start/due range, and keeps declared custom fields current (never fabricating `ask` fields in the no-user sleep context). |
67
67
  | `sleep-state` | Core identity (soul, user, memory, core 3–6), CHANGELOG, RELEASES | Records patterns/decisions/preferences, writes a changelog entry per meaningful change since the epoch, surfaces release readiness, enforces anti-bloat ceilings, flags stale knowledge for `sleep-product`. |
68
68
  | `sleep-product` | Knowledge files + feature PRDs | Creates/reconciles `knowledge/*.md` and `core/features/*.md`, processes staleness flags, maintains the knowledge index + taxonomy. |
69
69
  | `sleep-migration` | Structure only | Moves/renames folders, normalizes frontmatter, wraps fences. Never alters body prose. |
@@ -34,6 +34,7 @@ Sections: `why`, `user_stories`, `acceptance_criteria`, `constraints`, `technica
34
34
  ### Lifecycle commands
35
35
  ```bash
36
36
  dreamcontext tasks log <name> "what was done" # changelog entry — MANDATORY each session
37
+ dreamcontext tasks status <name> in_progress "reason" # bump status; first in_progress auto-stamps start_date if unset
37
38
  dreamcontext tasks status <name> in_review "reason" # bump status (logs automatically)
38
39
  dreamcontext tasks complete <name> "summary" # mark complete
39
40
  dreamcontext tasks delete <name> --yes # delete (propagates to remote on sync)
@@ -66,11 +67,19 @@ dreamcontext tasks rice <name> --clear # remove all RICE values
66
67
  - `--reach` integer 1–10 · `--impact` integer 1–5 · `--confidence` one of 25/50/75/100 (%) · `--effort` person-weeks (>0, ≤52, 0.5 steps).
67
68
  - Score = `(reach × impact × confidence/100) / effort`, computed server-side, stored in frontmatter.
68
69
 
69
- ## Due dates & urgency
70
+ ## Dates & urgency
71
+ A task has an optional **date range** — a planned `start` and a `due`/end. Either end is independently settable or clearable, and both sync to the remote backend.
70
72
  ```bash
71
- dreamcontext tasks due <name> 2026-07-01 # set
72
- dreamcontext tasks due <name> clear # clear
73
+ dreamcontext tasks start <name> 2026-06-25 # set planned start (range start)
74
+ dreamcontext tasks due <name> 2026-07-01 # set due/end (range end)
75
+ dreamcontext tasks start <name> clear # clear the start
76
+ dreamcontext tasks due <name> clear # clear the due
77
+ dreamcontext tasks create <name> --start 2026-06-25 --due 2026-07-01
73
78
  ```
79
+ - `start` must be **on or before** `due` — an inverted range is rejected (clear one end first).
80
+ - Setting either date on a `backlog`-tagged task **removes the `backlog` tag** (a dated task is planned, not backlog).
81
+ - Both dates render in the dashboard timeline (Gantt) and calendar views.
82
+
74
83
  `urgency` (critical/high/medium/low) is the second Eisenhower axis (priority × urgency) for the dashboard matrix.
75
84
 
76
85
  ---
@@ -85,6 +94,7 @@ dreamcontext tasks tag <name> person:mehmet # add another assignee
85
94
  dreamcontext tasks tag <name> person:ada --remove # unassign
86
95
  ```
87
96
  - `person:<slug>` tags are the source of truth for assignment and support **multiple assignees**. The legacy scalar `assignee` field is deprecated (still read, not written).
97
+ - When a cloud backend is active, `--person`/`tag person:<slug>` **resolves the name against the real member roster** (`tasks members`): an exact or fuzzy match is canonicalized to the member's slug, an **ambiguous** match aborts (be more specific), and an unmatched name is recorded but **warns** that it won't sync until that person is a member. Assignments are never silently dropped.
88
98
  - With ClickUp enabled, the full assignee set round-trips to ClickUp's native `assignees[]` bidirectionally; map each person to a member with `dreamcontext config clickup-member <person> <memberId>`. With **GitHub** enabled, `person:<slug>` tags round-trip to issue assignees (repo collaborators; a non-collaborator is skipped, never a sync error). (see [integrations.md](integrations.md)).
89
99
  - `DREAMCONTEXT_PERSON` env names the current person for attribution.
90
100
 
@@ -118,14 +128,60 @@ version: "v0.9.0" # planning-version association (auto-set to active pla
118
128
  parent_task: null
119
129
  related_feature: null # feature slug for cross-link
120
130
  product: null # multi-product scoping (optional)
121
- due: null # YYYY-MM-DD
131
+ start_date: null # YYYY-MM-DD or null — planned start (range start)
132
+ due_date: null # YYYY-MM-DD or null — due / planned end (range end)
122
133
  rice: { reach: 5, impact: 3, confidence: 75, effort: 2, score: 5.625 }
134
+ custom_fields: {} # project-declared fields (only when overrides/task.md exists)
123
135
  ---
124
136
  ```
125
137
  Files live at `_dream_context/state/<slug>.md`. Lookup is fuzzy: exact slug → prefix → substring.
126
138
 
127
139
  ---
128
140
 
141
+ ## Task format & custom-field overrides (optional)
142
+
143
+ A project can override the default task shape AND declare its own custom fields by adding **`_dream_context/overrides/task.md`**. Absent this file, everything behaves exactly as the defaults above (zero regression).
144
+
145
+ The file carries two things:
146
+
147
+ - **Frontmatter `custom_fields:`** — a user-defined field schema. Each field: `name`, `type` (`text` | `number` | `select` | `date`), optional `key` (the stable field id / `custom_fields:` map key — defaults to the snake_cased `name`, so a rename keeps the same id), `required` (`true` ⇒ the agent MUST set it on every task; default optional), `ask` (`true` ⇒ the field is a HUMAN judgment the agent must NOT guess — it asks you for the value at task-creation time; default false), `options` (for `select`), `sync` (`[clickup, github]`, default both), and optional `prompt` (a system instruction telling the agent HOW to fill the field — surfaced in your snapshot + every sub-agent briefing).
148
+ - **Body** — the task TEMPLATE the CLI scaffolds from, plus an optional `## Agent Instructions` section that sub-agents read at runtime (it is stripped from scaffolded tasks).
149
+
150
+ ```markdown
151
+ ---
152
+ custom_fields:
153
+ - { name: "Team", type: select, required: true, options: [platform, growth, infra], sync: [clickup, github], prompt: "The squad that owns the touched files." }
154
+ - { name: "Story Points", key: story_points, type: number, sync: [clickup, github] }
155
+ - { name: "Time estimate", key: time_estimate, type: text, required: true, ask: true, prompt: "How long will this take? Answer in ClickUp shorthand, e.g. 45m, 2h 30m, 1w 2d." }
156
+ - { name: "Sprint", type: text }
157
+ ---
158
+ ## Why
159
+ {{WHY}}
160
+
161
+ ## Acceptance Criteria
162
+ - [ ] First criterion
163
+
164
+ ## Agent Instructions
165
+ Set Team to the owning squad before starting work.
166
+ ```
167
+
168
+ When an override is active its briefing (the field list, each field's `required` + `ask` flags + `prompt`, and the Agent Instructions) is injected into your SessionStart snapshot and into every sub-agent. **Each active task's custom-field VALUES are also surfaced inline** — in the snapshot's Active Tasks block and in `dreamcontext tasks list --long` — with any unset **required** field flagged `⚠ UNSET (required)`. So you always see a task's fields without opening it: follow `overrides/task.md`'s layout and **set every declared custom field** when you create or reconcile a task — REQUIRED fields are mandatory, so never create or complete a task with a required field left empty. As a hard backstop, `dreamcontext tasks create` / `complete` / `status … completed|in_review` **fail (non-zero exit) and refuse the action** when a required field is unset — naming the field plus the exact fix command. Pass `--allow-missing-required` (or set `DREAMCONTEXT_ALLOW_MISSING_REQUIRED=1`) only for an intentional draft, which downgrades the failure to a warning.
169
+
170
+ **`ask: true` fields — don't fabricate, ask.** Some fields capture a judgment only the user can make (a time estimate, a business-impact call). A field marked `ask` is flagged **[ASK THE USER]** in the briefing: when you create a task on the user's request, **ask the user for that value first** — one concise question per field, using the field's `prompt` as the framing (the `AskUserQuestion` tool if you have it, else just ask in chat) — and wait for the answer **before** creating the task. Never invent the value to satisfy a `required` gate. The one exception is a no-user context (an autonomous reconcile or a sleep cycle): there, leave the field unset and note it rather than guessing.
171
+
172
+ **Setting values:** `dreamcontext tasks create … --field team=platform --field story_points=8`, or on an existing task `dreamcontext tasks field <slug> team platform` (`clear`/omit value to clear). Values are validated against the schema (select options, number coercion) and stored under a `custom_fields:` map in the task frontmatter.
173
+
174
+ **Sync — values flow to both backends, reusing remote fields that already exist:**
175
+
176
+ | Field type | ClickUp | GitHub |
177
+ |---|---|---|
178
+ | `select` | native list custom field (drop_down) | `<key>:<value>` **label** |
179
+ | `text` / `number` / `date` | native list custom field | `<!-- dc:fields -->` **body block** in the issue |
180
+
181
+ `dreamcontext tasks provision` creates any missing custom fields/labels on the remote and **reuses (never duplicates) ones that already exist by name**. `dreamcontext doctor` validates the override and warns (never silently ignores) on a malformed one.
182
+
183
+ ---
184
+
129
185
  ## Features (PRDs)
130
186
 
131
187
  Retrospective product documentation, **created and updated exclusively by the sleep agent**. During active work, everything goes in the task; sleep consolidates task content into the matching feature.
@@ -0,0 +1,179 @@
1
+ ---
2
+ name: dreamcontext-deep-research
3
+ description: >
4
+ Load when a question needs synthesis across a LARGE or MULTI-PROJECT dreamcontext corpus —
5
+ more than `dreamcontext-explore` can answer in a single fast pass — or the user invokes
6
+ `/dreamcontext-deep-research`. Triggers: "deep research the brain", "research this across my
7
+ projects", "synthesize what we know about X across everything", "deep dive across the
8
+ connected vaults", "explore is too shallow for this", "pull together everything on X and
9
+ cite it", "cross-project / cross-corpus question", or any "tons of data, federated/tagged
10
+ vault" question where one explore agent and one answer under-serves. This is the heavy,
11
+ iterative, sub-agent-driven counterpart to `dreamcontext-explore`: it fans out searchers over
12
+ the whole curated corpus (knowledge + features + tasks + memory + CHANGELOG) AND connected
13
+ peer vaults, adversarially verifies the load-bearing claims, and returns a SYNTHESIZED, CITED
14
+ report — not raw hits.
15
+ user-invocable: true
16
+ alwaysApply: false
17
+ tags: [deep-research, recall, synthesis, federation, cross-project, orchestration, sub-agents, dreamcontext]
18
+ ---
19
+
20
+ # Deep Research — iterative, sub-agent-driven corpus synthesis
21
+
22
+ You are the **orchestrator**. Like `curator`, `initializer`, `multi-review`, and `council`,
23
+ **you do not do the bulk of the searching yourself** — you decompose the question, fan out
24
+ `dreamcontext-explore` searchers in parallel, read their cited findings, loop to close gaps,
25
+ adversarially verify the claims that matter, and then **you** write the synthesized report. Your
26
+ value is the decomposition, the gap loop, the verification gate, and the final synthesis — not
27
+ running every `recall` and `grep` by hand.
28
+
29
+ **Why this exists, vs `dreamcontext-explore`.** Explore is tuned for **speed and a single
30
+ answer**: one Haiku agent, a tight tool-call budget, recall-then-grep, return the best hit. That
31
+ is the right tool for "where is X?" / "how does Y work?" on one project. It **under-serves** the
32
+ question that needs *synthesis across many files and many projects*: "what have we decided about
33
+ recall across all my vaults?", "reconcile everything we know about federation", "pull the whole
34
+ history of how the sleep cycle evolved and cite it". For those, a single fast pass returns a
35
+ fragment and stops. Deep research is the escalation: **iterative fan-out → verify → synthesize a
36
+ cited answer**.
37
+
38
+ | | `dreamcontext-explore` | `dreamcontext-deep-research` (this) |
39
+ |---|---|---|
40
+ | Shape | one sub-agent, one pass | main agent orchestrates many searchers + verifiers, looped |
41
+ | Budget | tight (1–20 tool calls) | scaled to the corpus; multiple waves |
42
+ | Scope | one project, narrow | whole corpus + **connected peer vaults** |
43
+ | Output | the best hit, fast | a **synthesized, cited** report reconciling sources |
44
+ | Verify | none | adversarial pass on load-bearing claims |
45
+ | Use when | "where / how is X?" | "synthesize / reconcile / research X across everything" |
46
+
47
+ **It is read-only.** Deep research never mutates the corpus. It may *recommend* capturing a
48
+ finding (a knowledge file, a feedback item) at the end — but only with the user's say-so, via the
49
+ normal CLI. It is not a writer.
50
+
51
+ **Recall is the engine; the corpus index + peer connections are the substrate.** Every wave starts
52
+ from `dreamcontext memory recall` (BM25 + Haiku intent extraction over the curated corpus), which
53
+ already spans readable peers and namespaces cross-vault hits `<vault>::<type>/<slug>`. You are not
54
+ grepping a blind filesystem — you are mining a pre-indexed, cross-project brain.
55
+
56
+ ## When to invoke
57
+
58
+ - `/dreamcontext-deep-research` (primary entry).
59
+ - A `dreamcontext-explore` pass came back thin, fragmented, or "found a piece but not the whole
60
+ picture", and the real question spans many files.
61
+ - The question is explicitly **cross-project / federated**: "across my vaults", "everything we
62
+ know about X", "reconcile what project A and project B decided".
63
+ - "Synthesize", "reconcile", "pull together and cite", "deep dive", "research" over the brain.
64
+
65
+ **Scale the machinery to the corpus.** A small single-project brain rarely needs this — say so and
66
+ just run one `dreamcontext-explore`. Reserve the full fan-out for a genuinely large or multi-project
67
+ tagged corpus where one agent and one answer leave the question half-answered.
68
+
69
+ ## Commitment ritual (do this FIRST)
70
+
71
+ 1. **Announce**: tell the user you're running deep research — that it fans out read-only searchers
72
+ across the whole corpus and any connected peer vaults, verifies the key claims, and ends in a
73
+ cited synthesis. Confirm the question and its scope (which vaults, which time range if any).
74
+ 2. **TodoWrite** the phases (1–6) so the gates are visible. A phase isn't done until its gate passes.
75
+ 3. **Sharpen the question.** If it's underspecified ("research recall"), narrow it with the user
76
+ first (recall *precision*? recall *architecture*? across *which* projects?) — a vague question
77
+ fans out into vague reports. One or two clarifying questions beat a 10-agent wild goose chase.
78
+
79
+ ## The flow (the main agent runs this directly — sub-agents can't nest)
80
+
81
+ In this harness a sub-agent cannot dispatch sub-agents, so **you** own the loop and the fan-out —
82
+ exactly like the sleep cycle. `dreamcontext-explore` is your searcher *and* your verifier; you are
83
+ the planner and the synthesizer.
84
+
85
+ ### Phase 1 — Scope & seed (recall-driven)
86
+
87
+ - Establish the corpus surface: read the **Connected projects** section of the snapshot, or run
88
+ `dreamcontext connections list` / `dreamcontext vaults list`. Decide the span:
89
+ - current vault only → recall as-is (already spans eligible peers by default),
90
+ - specific peers → `--vault <name>` (repeatable),
91
+ - everything readable → `--connected` (out/both peers) or `--all-vaults`.
92
+ - **Seed with recall, in JSON, scoped by type:**
93
+ ```bash
94
+ dreamcontext memory recall "<facet>" --json --top 15 --types knowledge,feature,task,memory,changelog --connected
95
+ ```
96
+ Run it for **2–4 different phrasings/facets** of the question — recall is cheap (<100ms, zero
97
+ token overhead) and different keywords surface different docs. Collect the union of hits.
98
+ - **Decompose** the question into 3–6 sub-questions / facets / per-project slices. This decomposition
99
+ is the fan-out plan. Write it into the Todo.
100
+
101
+ ### Phase 2 — Fan-out search (parallel `dreamcontext-explore`)
102
+
103
+ - Dispatch **one `dreamcontext-explore` per sub-question / corpus slice / project, in parallel**
104
+ (one message, multiple `Agent` calls). Each searcher gets:
105
+ - its narrow sub-question,
106
+ - the seed hits relevant to it (file paths / `<vault>::<slug>` from Phase 1 — so it doesn't
107
+ re-discover them),
108
+ - an explicit instruction: **return findings WITH citations** (absolute path or
109
+ `<vault>::<type>/<slug>`), and flag anything that looks contradictory or stale.
110
+ - Searchers are read-only and recall-first by design — that's the whole point of using them. Scope a
111
+ searcher to a peer when a specific sibling project owns that slice (it can `recall --vault`,
112
+ `snapshot --vault`, or read the peer's files directly).
113
+
114
+ ### Phase 3 — Gap loop (loop-until-dry)
115
+
116
+ - Read every searcher's report. Build a running map: **claim → source(s)**.
117
+ - Identify **gaps** (a facet nobody answered), **contradictions** (two sources disagree), and
118
+ **dangling references** (a doc cites another you haven't read). Dispatch a **second wave** of
119
+ `dreamcontext-explore` aimed only at those.
120
+ - Stop when a wave returns nothing materially new (two dry waves) or the picture is complete enough
121
+ to answer. **Log what you chose not to chase** — silent truncation reads as "covered everything".
122
+
123
+ ### Phase 4 — Adversarial verification (the gate)
124
+
125
+ - For each **load-bearing claim** (the ones the answer actually rests on), dispatch a
126
+ `dreamcontext-explore` **verifier** whose job is to *check the claim against its cited source* —
127
+ open the file, confirm the source says what the claim says, and look for a more recent doc that
128
+ supersedes it. Default to **"unverified"** when the source doesn't actually support the claim.
129
+ - Drop or downgrade claims that don't survive. A plausible-but-uncited assertion does not enter the
130
+ report. This is what separates deep research from a confident hallucination.
131
+
132
+ ### Phase 5 — Synthesize (you write this — not a sub-agent)
133
+
134
+ - **You** write the report from the verified claim→source map. It must be a *synthesis*, not a
135
+ concatenation of searcher outputs:
136
+ - **Answer** — the reconciled conclusion, organized by the question's structure.
137
+ - **Every claim carries a citation** — absolute path or `<vault>::<type>/<slug>`. No citation ⇒
138
+ it doesn't go in (or it's explicitly marked as inference).
139
+ - **Cross-project provenance** — when projects agree, say so; when they diverge, surface the
140
+ divergence with both sources rather than silently picking one.
141
+ - **Contradictions & open questions** — name them; don't paper over them.
142
+ - **Confidence** — note where evidence is thin or a source looked stale.
143
+
144
+ ### Phase 6 — Persist (optional, only on consent)
145
+
146
+ - If durable findings emerged ("we actually decided X across A and B" / "these three docs are
147
+ near-duplicates"), **offer** to capture them — a `dreamcontext knowledge create`, or a
148
+ `dreamcontext feedback` if deep research exposed a recall/structure gap. Never auto-write; the
149
+ user confirms. Deep research is a reader.
150
+
151
+ ## Output contract
152
+
153
+ A **synthesized, cited report** — never a raw hit dump. The minimum bar:
154
+ - Citations are **mandatory** for every load-bearing claim (path or `<vault>::<type>/<slug>`).
155
+ - Cross-vault hits are first-class, not noise — provenance is the point on a multi-project corpus.
156
+ - Contradictions and gaps are surfaced, not hidden.
157
+ - Any coverage you deliberately capped is stated.
158
+
159
+ ## Boundaries
160
+
161
+ - **Read-only.** No writes except the optional, consent-gated Phase 6 capture via the normal CLI.
162
+ - **Reuse `dreamcontext-explore`.** Don't reinvent a searcher — it's the tested, recall-accelerated,
163
+ read-only explorer. This skill is the *orchestration* around it.
164
+ - **Stay in the decisions/knowledge lane.** For raw code *structure* ("who calls this function?")
165
+ the code-graph lane (graphify) owns it — deep research synthesizes curated decisions/knowledge, it
166
+ is not an AST indexer.
167
+ - **Scale to the corpus.** Don't fan out 10 agents at a 12-file single-project brain. Match the
168
+ machinery to the data.
169
+
170
+ ## Relationship to the rest of dreamcontext
171
+
172
+ - **vs `dreamcontext-explore`** — explore is the fast single-pass searcher; this is the iterative
173
+ multi-agent synthesizer that *uses* explore. Escalate from explore → deep-research when one pass
174
+ and one answer leave a cross-corpus question half-answered.
175
+ - **vs `sleep`** — sleep *writes* (consolidates experience into memory); deep research *reads*
176
+ (synthesizes existing memory into an answer). Same fan-out shape, opposite direction.
177
+ - **vs `curator`** — curator refactors the corpus's *shape*; deep research mines its *content*.
178
+ - **vs the generic `deep-research` web skill** — that one researches the open web; this one researches
179
+ *your brain* (the curated corpus + connected vaults). Same harness shape, different substrate.
@@ -122,6 +122,11 @@ dreamcontext tasks status <slug> in_progress "plan validated; implementing"
122
122
 
123
123
  If `<slug>` already exists, de-collide (append a short suffix) rather than clobbering.
124
124
 
125
+ If the project declares **custom task fields** (`_dream_context/overrides/task.md`), `tasks create`
126
+ hard-fails (exit 1) on an unset `required` field — set each with `--field key=value` on create. For
127
+ any field marked `ask: true`, ask the user for the value back in Phase 0 (it's a human judgment) rather
128
+ than fabricating it. The SubagentStart briefing lists the active fields and their prompts.
129
+
125
130
  ### Phase 4 — IMPLEMENT
126
131
 
127
132
  Dispatch **one** `goal-implementer` (sonnet; escalate to opus for genuinely hard goals)
@@ -1 +0,0 @@
1
- import{aq as o,ar as n}from"./index-CQkBs_Vm.js";const t=(r,a)=>o.lang.round(n.parse(r)[a]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-CpwYPUdR.js";import{_ as i}from"./index-CQkBs_Vm.js";import"./chunk-FMBD7UC4-CrbfOH-q.js";import"./chunk-YZCP3GAM-tvOjDART.js";import"./chunk-55IACEB6-CQ_4M3g4.js";import"./chunk-EDXVE4YY--HdVil0f.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-CpwYPUdR.js";import{_ as i}from"./index-CQkBs_Vm.js";import"./chunk-FMBD7UC4-CrbfOH-q.js";import"./chunk-YZCP3GAM-tvOjDART.js";import"./chunk-55IACEB6-CQ_4M3g4.js";import"./chunk-EDXVE4YY--HdVil0f.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
@@ -1 +0,0 @@
1
- import{b as r}from"./graph-deVQIt7H.js";var e=4;function a(o){return r(o,e)}export{a as c};