erk 0.4.5__py3-none-any.whl

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 (331) hide show
  1. erk/__init__.py +12 -0
  2. erk/__main__.py +6 -0
  3. erk/agent_docs/__init__.py +5 -0
  4. erk/agent_docs/models.py +123 -0
  5. erk/agent_docs/operations.py +666 -0
  6. erk/artifacts/__init__.py +5 -0
  7. erk/artifacts/artifact_health.py +623 -0
  8. erk/artifacts/detection.py +16 -0
  9. erk/artifacts/discovery.py +343 -0
  10. erk/artifacts/models.py +63 -0
  11. erk/artifacts/staleness.py +56 -0
  12. erk/artifacts/state.py +100 -0
  13. erk/artifacts/sync.py +624 -0
  14. erk/cli/__init__.py +0 -0
  15. erk/cli/activation.py +132 -0
  16. erk/cli/alias.py +53 -0
  17. erk/cli/cli.py +221 -0
  18. erk/cli/commands/__init__.py +0 -0
  19. erk/cli/commands/admin.py +153 -0
  20. erk/cli/commands/artifact/__init__.py +1 -0
  21. erk/cli/commands/artifact/check.py +260 -0
  22. erk/cli/commands/artifact/group.py +31 -0
  23. erk/cli/commands/artifact/list_cmd.py +89 -0
  24. erk/cli/commands/artifact/show.py +62 -0
  25. erk/cli/commands/artifact/sync_cmd.py +39 -0
  26. erk/cli/commands/branch/__init__.py +26 -0
  27. erk/cli/commands/branch/assign_cmd.py +152 -0
  28. erk/cli/commands/branch/checkout_cmd.py +357 -0
  29. erk/cli/commands/branch/create_cmd.py +161 -0
  30. erk/cli/commands/branch/list_cmd.py +82 -0
  31. erk/cli/commands/branch/unassign_cmd.py +197 -0
  32. erk/cli/commands/cc/__init__.py +15 -0
  33. erk/cli/commands/cc/jsonl_cmd.py +20 -0
  34. erk/cli/commands/cc/session/AGENTS.md +30 -0
  35. erk/cli/commands/cc/session/CLAUDE.md +1 -0
  36. erk/cli/commands/cc/session/__init__.py +15 -0
  37. erk/cli/commands/cc/session/list_cmd.py +167 -0
  38. erk/cli/commands/cc/session/show_cmd.py +175 -0
  39. erk/cli/commands/completion.py +89 -0
  40. erk/cli/commands/completions.py +165 -0
  41. erk/cli/commands/config.py +327 -0
  42. erk/cli/commands/docs/__init__.py +1 -0
  43. erk/cli/commands/docs/group.py +16 -0
  44. erk/cli/commands/docs/sync.py +121 -0
  45. erk/cli/commands/docs/validate.py +102 -0
  46. erk/cli/commands/doctor.py +243 -0
  47. erk/cli/commands/down.py +171 -0
  48. erk/cli/commands/exec/__init__.py +1 -0
  49. erk/cli/commands/exec/group.py +164 -0
  50. erk/cli/commands/exec/scripts/AGENTS.md +79 -0
  51. erk/cli/commands/exec/scripts/CLAUDE.md +1 -0
  52. erk/cli/commands/exec/scripts/__init__.py +5 -0
  53. erk/cli/commands/exec/scripts/add_reaction_to_comment.py +69 -0
  54. erk/cli/commands/exec/scripts/add_remote_execution_note.py +68 -0
  55. erk/cli/commands/exec/scripts/check_impl.py +152 -0
  56. erk/cli/commands/exec/scripts/ci_update_pr_body.py +294 -0
  57. erk/cli/commands/exec/scripts/create_extraction_branch.py +138 -0
  58. erk/cli/commands/exec/scripts/create_extraction_plan.py +242 -0
  59. erk/cli/commands/exec/scripts/create_issue_from_session.py +103 -0
  60. erk/cli/commands/exec/scripts/create_plan_from_context.py +103 -0
  61. erk/cli/commands/exec/scripts/create_worker_impl_from_issue.py +93 -0
  62. erk/cli/commands/exec/scripts/detect_trunk_branch.py +121 -0
  63. erk/cli/commands/exec/scripts/exit_plan_mode_hook.py +777 -0
  64. erk/cli/commands/exec/scripts/extract_latest_plan.py +49 -0
  65. erk/cli/commands/exec/scripts/extract_session_from_issue.py +150 -0
  66. erk/cli/commands/exec/scripts/find_project_dir.py +214 -0
  67. erk/cli/commands/exec/scripts/generate_pr_summary.py +112 -0
  68. erk/cli/commands/exec/scripts/get_closing_text.py +98 -0
  69. erk/cli/commands/exec/scripts/get_embedded_prompt.py +62 -0
  70. erk/cli/commands/exec/scripts/get_plan_metadata.py +95 -0
  71. erk/cli/commands/exec/scripts/get_pr_body_footer.py +70 -0
  72. erk/cli/commands/exec/scripts/get_pr_discussion_comments.py +149 -0
  73. erk/cli/commands/exec/scripts/get_pr_review_comments.py +155 -0
  74. erk/cli/commands/exec/scripts/impl_init.py +158 -0
  75. erk/cli/commands/exec/scripts/impl_signal.py +375 -0
  76. erk/cli/commands/exec/scripts/impl_verify.py +49 -0
  77. erk/cli/commands/exec/scripts/issue_title_to_filename.py +34 -0
  78. erk/cli/commands/exec/scripts/list_sessions.py +296 -0
  79. erk/cli/commands/exec/scripts/mark_impl_ended.py +188 -0
  80. erk/cli/commands/exec/scripts/mark_impl_started.py +188 -0
  81. erk/cli/commands/exec/scripts/marker.py +163 -0
  82. erk/cli/commands/exec/scripts/objective_save_to_issue.py +109 -0
  83. erk/cli/commands/exec/scripts/plan_save_to_issue.py +269 -0
  84. erk/cli/commands/exec/scripts/plan_update_issue.py +147 -0
  85. erk/cli/commands/exec/scripts/post_extraction_comment.py +237 -0
  86. erk/cli/commands/exec/scripts/post_or_update_pr_summary.py +133 -0
  87. erk/cli/commands/exec/scripts/post_pr_inline_comment.py +143 -0
  88. erk/cli/commands/exec/scripts/post_workflow_started_comment.py +168 -0
  89. erk/cli/commands/exec/scripts/preprocess_session.py +777 -0
  90. erk/cli/commands/exec/scripts/quick_submit.py +32 -0
  91. erk/cli/commands/exec/scripts/rebase_with_conflict_resolution.py +260 -0
  92. erk/cli/commands/exec/scripts/reply_to_discussion_comment.py +173 -0
  93. erk/cli/commands/exec/scripts/resolve_review_thread.py +170 -0
  94. erk/cli/commands/exec/scripts/session_id_injector_hook.py +52 -0
  95. erk/cli/commands/exec/scripts/setup_impl_from_issue.py +159 -0
  96. erk/cli/commands/exec/scripts/slot_objective.py +102 -0
  97. erk/cli/commands/exec/scripts/tripwires_reminder_hook.py +20 -0
  98. erk/cli/commands/exec/scripts/update_dispatch_info.py +116 -0
  99. erk/cli/commands/exec/scripts/user_prompt_hook.py +113 -0
  100. erk/cli/commands/exec/scripts/validate_plan_content.py +98 -0
  101. erk/cli/commands/exec/scripts/wrap_plan_in_metadata_block.py +34 -0
  102. erk/cli/commands/implement.py +695 -0
  103. erk/cli/commands/implement_shared.py +649 -0
  104. erk/cli/commands/info/__init__.py +14 -0
  105. erk/cli/commands/info/release_notes_cmd.py +128 -0
  106. erk/cli/commands/init.py +801 -0
  107. erk/cli/commands/land_cmd.py +690 -0
  108. erk/cli/commands/log_cmd.py +137 -0
  109. erk/cli/commands/md/__init__.py +5 -0
  110. erk/cli/commands/md/check.py +118 -0
  111. erk/cli/commands/md/group.py +14 -0
  112. erk/cli/commands/navigation_helpers.py +430 -0
  113. erk/cli/commands/objective/__init__.py +16 -0
  114. erk/cli/commands/objective/list_cmd.py +47 -0
  115. erk/cli/commands/objective_helpers.py +132 -0
  116. erk/cli/commands/plan/__init__.py +32 -0
  117. erk/cli/commands/plan/check_cmd.py +174 -0
  118. erk/cli/commands/plan/close_cmd.py +69 -0
  119. erk/cli/commands/plan/create_cmd.py +120 -0
  120. erk/cli/commands/plan/docs/__init__.py +18 -0
  121. erk/cli/commands/plan/docs/extract_cmd.py +53 -0
  122. erk/cli/commands/plan/docs/unextract_cmd.py +38 -0
  123. erk/cli/commands/plan/docs/unextracted_cmd.py +72 -0
  124. erk/cli/commands/plan/extraction/__init__.py +16 -0
  125. erk/cli/commands/plan/extraction/complete_cmd.py +101 -0
  126. erk/cli/commands/plan/extraction/create_raw_cmd.py +63 -0
  127. erk/cli/commands/plan/get.py +71 -0
  128. erk/cli/commands/plan/list_cmd.py +754 -0
  129. erk/cli/commands/plan/log_cmd.py +440 -0
  130. erk/cli/commands/plan/start_cmd.py +459 -0
  131. erk/cli/commands/planner/__init__.py +40 -0
  132. erk/cli/commands/planner/configure_cmd.py +73 -0
  133. erk/cli/commands/planner/connect_cmd.py +96 -0
  134. erk/cli/commands/planner/create_cmd.py +148 -0
  135. erk/cli/commands/planner/list_cmd.py +51 -0
  136. erk/cli/commands/planner/register_cmd.py +105 -0
  137. erk/cli/commands/planner/set_default_cmd.py +23 -0
  138. erk/cli/commands/planner/unregister_cmd.py +43 -0
  139. erk/cli/commands/pr/__init__.py +23 -0
  140. erk/cli/commands/pr/check_cmd.py +112 -0
  141. erk/cli/commands/pr/checkout_cmd.py +165 -0
  142. erk/cli/commands/pr/fix_conflicts_cmd.py +82 -0
  143. erk/cli/commands/pr/parse_pr_reference.py +10 -0
  144. erk/cli/commands/pr/submit_cmd.py +360 -0
  145. erk/cli/commands/pr/sync_cmd.py +181 -0
  146. erk/cli/commands/prepare_cwd_recovery.py +60 -0
  147. erk/cli/commands/project/__init__.py +16 -0
  148. erk/cli/commands/project/init_cmd.py +91 -0
  149. erk/cli/commands/run/__init__.py +17 -0
  150. erk/cli/commands/run/list_cmd.py +189 -0
  151. erk/cli/commands/run/logs_cmd.py +54 -0
  152. erk/cli/commands/run/shared.py +19 -0
  153. erk/cli/commands/shell_integration.py +29 -0
  154. erk/cli/commands/slot/__init__.py +23 -0
  155. erk/cli/commands/slot/check_cmd.py +277 -0
  156. erk/cli/commands/slot/common.py +314 -0
  157. erk/cli/commands/slot/init_pool_cmd.py +157 -0
  158. erk/cli/commands/slot/list_cmd.py +228 -0
  159. erk/cli/commands/slot/repair_cmd.py +190 -0
  160. erk/cli/commands/stack/__init__.py +23 -0
  161. erk/cli/commands/stack/consolidate_cmd.py +470 -0
  162. erk/cli/commands/stack/list_cmd.py +79 -0
  163. erk/cli/commands/stack/move_cmd.py +309 -0
  164. erk/cli/commands/stack/split_old/README.md +64 -0
  165. erk/cli/commands/stack/split_old/__init__.py +5 -0
  166. erk/cli/commands/stack/split_old/command.py +233 -0
  167. erk/cli/commands/stack/split_old/display.py +116 -0
  168. erk/cli/commands/stack/split_old/plan.py +216 -0
  169. erk/cli/commands/status.py +58 -0
  170. erk/cli/commands/submit.py +768 -0
  171. erk/cli/commands/up.py +154 -0
  172. erk/cli/commands/upgrade.py +82 -0
  173. erk/cli/commands/wt/__init__.py +29 -0
  174. erk/cli/commands/wt/checkout_cmd.py +110 -0
  175. erk/cli/commands/wt/create_cmd.py +998 -0
  176. erk/cli/commands/wt/current_cmd.py +35 -0
  177. erk/cli/commands/wt/delete_cmd.py +573 -0
  178. erk/cli/commands/wt/list_cmd.py +332 -0
  179. erk/cli/commands/wt/rename_cmd.py +66 -0
  180. erk/cli/config.py +242 -0
  181. erk/cli/constants.py +29 -0
  182. erk/cli/core.py +65 -0
  183. erk/cli/debug.py +9 -0
  184. erk/cli/ensure-conversion-tasks.md +288 -0
  185. erk/cli/ensure.py +628 -0
  186. erk/cli/github_parsing.py +96 -0
  187. erk/cli/graphite.py +81 -0
  188. erk/cli/graphite_command.py +80 -0
  189. erk/cli/help_formatter.py +345 -0
  190. erk/cli/output.py +361 -0
  191. erk/cli/presets/dagster.toml +12 -0
  192. erk/cli/presets/generic.toml +12 -0
  193. erk/cli/prompt_hooks_templates/README.md +68 -0
  194. erk/cli/script_output.py +32 -0
  195. erk/cli/shell_integration/bash_wrapper.sh +32 -0
  196. erk/cli/shell_integration/fish_wrapper.fish +39 -0
  197. erk/cli/shell_integration/handler.py +338 -0
  198. erk/cli/shell_integration/zsh_wrapper.sh +32 -0
  199. erk/cli/shell_utils.py +171 -0
  200. erk/cli/subprocess_utils.py +92 -0
  201. erk/cli/uvx_detection.py +59 -0
  202. erk/core/__init__.py +0 -0
  203. erk/core/claude_executor.py +511 -0
  204. erk/core/claude_settings.py +317 -0
  205. erk/core/command_log.py +406 -0
  206. erk/core/commit_message_generator.py +234 -0
  207. erk/core/completion.py +10 -0
  208. erk/core/consolidation_utils.py +177 -0
  209. erk/core/context.py +570 -0
  210. erk/core/display/__init__.py +4 -0
  211. erk/core/display/abc.py +24 -0
  212. erk/core/display/real.py +30 -0
  213. erk/core/display_utils.py +526 -0
  214. erk/core/file_utils.py +87 -0
  215. erk/core/health_checks.py +1315 -0
  216. erk/core/health_checks_dogfooder/__init__.py +85 -0
  217. erk/core/health_checks_dogfooder/deprecated_dot_agent_config.py +64 -0
  218. erk/core/health_checks_dogfooder/legacy_claude_docs.py +69 -0
  219. erk/core/health_checks_dogfooder/legacy_config_locations.py +122 -0
  220. erk/core/health_checks_dogfooder/legacy_erk_docs_agent.py +61 -0
  221. erk/core/health_checks_dogfooder/legacy_erk_kits_folder.py +60 -0
  222. erk/core/health_checks_dogfooder/legacy_hook_settings.py +104 -0
  223. erk/core/health_checks_dogfooder/legacy_kit_yaml.py +78 -0
  224. erk/core/health_checks_dogfooder/legacy_kits_toml.py +43 -0
  225. erk/core/health_checks_dogfooder/outdated_erk_skill.py +43 -0
  226. erk/core/implementation_queue/__init__.py +1 -0
  227. erk/core/implementation_queue/github/__init__.py +8 -0
  228. erk/core/implementation_queue/github/abc.py +7 -0
  229. erk/core/implementation_queue/github/noop.py +38 -0
  230. erk/core/implementation_queue/github/printing.py +43 -0
  231. erk/core/implementation_queue/github/real.py +119 -0
  232. erk/core/init_utils.py +227 -0
  233. erk/core/output_filter.py +338 -0
  234. erk/core/plan_store/__init__.py +6 -0
  235. erk/core/planner/__init__.py +1 -0
  236. erk/core/planner/registry_abc.py +8 -0
  237. erk/core/planner/registry_fake.py +129 -0
  238. erk/core/planner/registry_real.py +195 -0
  239. erk/core/planner/types.py +7 -0
  240. erk/core/pr_utils.py +30 -0
  241. erk/core/release_notes.py +263 -0
  242. erk/core/repo_discovery.py +126 -0
  243. erk/core/script_writer.py +41 -0
  244. erk/core/services/__init__.py +1 -0
  245. erk/core/services/plan_list_service.py +94 -0
  246. erk/core/shell.py +51 -0
  247. erk/core/user_feedback.py +11 -0
  248. erk/core/version_check.py +55 -0
  249. erk/core/workflow_display.py +75 -0
  250. erk/core/worktree_pool.py +190 -0
  251. erk/core/worktree_utils.py +300 -0
  252. erk/data/CHANGELOG.md +438 -0
  253. erk/data/__init__.py +1 -0
  254. erk/data/claude/agents/devrun.md +180 -0
  255. erk/data/claude/commands/erk/__init__.py +0 -0
  256. erk/data/claude/commands/erk/create-extraction-plan.md +360 -0
  257. erk/data/claude/commands/erk/fix-conflicts.md +25 -0
  258. erk/data/claude/commands/erk/git-pr-push.md +345 -0
  259. erk/data/claude/commands/erk/implement-stacked-plan.md +96 -0
  260. erk/data/claude/commands/erk/land.md +193 -0
  261. erk/data/claude/commands/erk/objective-create.md +370 -0
  262. erk/data/claude/commands/erk/objective-list.md +34 -0
  263. erk/data/claude/commands/erk/objective-next-plan.md +220 -0
  264. erk/data/claude/commands/erk/objective-update-with-landed-pr.md +216 -0
  265. erk/data/claude/commands/erk/plan-implement.md +202 -0
  266. erk/data/claude/commands/erk/plan-save.md +45 -0
  267. erk/data/claude/commands/erk/plan-submit.md +39 -0
  268. erk/data/claude/commands/erk/pr-address.md +367 -0
  269. erk/data/claude/commands/erk/pr-submit.md +58 -0
  270. erk/data/claude/skills/dignified-python/SKILL.md +48 -0
  271. erk/data/claude/skills/dignified-python/cli-patterns.md +155 -0
  272. erk/data/claude/skills/dignified-python/dignified-python-core.md +1190 -0
  273. erk/data/claude/skills/dignified-python/subprocess.md +99 -0
  274. erk/data/claude/skills/dignified-python/versions/python-3.10.md +517 -0
  275. erk/data/claude/skills/dignified-python/versions/python-3.11.md +536 -0
  276. erk/data/claude/skills/dignified-python/versions/python-3.12.md +662 -0
  277. erk/data/claude/skills/dignified-python/versions/python-3.13.md +653 -0
  278. erk/data/claude/skills/erk-diff-analysis/SKILL.md +27 -0
  279. erk/data/claude/skills/erk-diff-analysis/references/commit-message-prompt.md +78 -0
  280. erk/data/claude/skills/learned-docs/SKILL.md +362 -0
  281. erk/data/github/actions/setup-claude-erk/action.yml +11 -0
  282. erk/data/github/prompts/dignified-python-review.md +125 -0
  283. erk/data/github/workflows/dignified-python-review.yml +61 -0
  284. erk/data/github/workflows/erk-impl.yml +251 -0
  285. erk/hooks/__init__.py +1 -0
  286. erk/hooks/decorators.py +319 -0
  287. erk/status/__init__.py +8 -0
  288. erk/status/collectors/__init__.py +9 -0
  289. erk/status/collectors/base.py +52 -0
  290. erk/status/collectors/git.py +76 -0
  291. erk/status/collectors/github.py +81 -0
  292. erk/status/collectors/graphite.py +80 -0
  293. erk/status/collectors/impl.py +145 -0
  294. erk/status/models/__init__.py +4 -0
  295. erk/status/models/status_data.py +404 -0
  296. erk/status/orchestrator.py +169 -0
  297. erk/status/renderers/__init__.py +5 -0
  298. erk/status/renderers/simple.py +322 -0
  299. erk/tui/AGENTS.md +193 -0
  300. erk/tui/CLAUDE.md +1 -0
  301. erk/tui/__init__.py +1 -0
  302. erk/tui/app.py +1404 -0
  303. erk/tui/commands/__init__.py +1 -0
  304. erk/tui/commands/executor.py +66 -0
  305. erk/tui/commands/provider.py +165 -0
  306. erk/tui/commands/real_executor.py +63 -0
  307. erk/tui/commands/registry.py +121 -0
  308. erk/tui/commands/types.py +36 -0
  309. erk/tui/data/__init__.py +1 -0
  310. erk/tui/data/provider.py +492 -0
  311. erk/tui/data/types.py +104 -0
  312. erk/tui/filtering/__init__.py +1 -0
  313. erk/tui/filtering/logic.py +43 -0
  314. erk/tui/filtering/types.py +55 -0
  315. erk/tui/jsonl_viewer/__init__.py +1 -0
  316. erk/tui/jsonl_viewer/app.py +61 -0
  317. erk/tui/jsonl_viewer/models.py +208 -0
  318. erk/tui/jsonl_viewer/widgets.py +204 -0
  319. erk/tui/sorting/__init__.py +6 -0
  320. erk/tui/sorting/logic.py +55 -0
  321. erk/tui/sorting/types.py +68 -0
  322. erk/tui/styles/dash.tcss +95 -0
  323. erk/tui/widgets/__init__.py +1 -0
  324. erk/tui/widgets/command_output.py +112 -0
  325. erk/tui/widgets/plan_table.py +276 -0
  326. erk/tui/widgets/status_bar.py +116 -0
  327. erk-0.4.5.dist-info/METADATA +376 -0
  328. erk-0.4.5.dist-info/RECORD +331 -0
  329. erk-0.4.5.dist-info/WHEEL +4 -0
  330. erk-0.4.5.dist-info/entry_points.txt +2 -0
  331. erk-0.4.5.dist-info/licenses/LICENSE.md +3 -0
@@ -0,0 +1,360 @@
1
+ ---
2
+ description: Create an extraction plan for documentation improvements
3
+ ---
4
+
5
+ # /erk:create-extraction-plan
6
+
7
+ Analyzes session context to identify documentation gaps and creates an extraction plan issue to track the improvements.
8
+
9
+ ## Prerequisites
10
+
11
+ Before running this command, ensure `docs/learned/` exists and has at least one documentation file:
12
+
13
+ ```bash
14
+ # Initialize docs/learned if it doesn't exist
15
+ erk docs init
16
+
17
+ # Verify it's ready
18
+ ls docs/learned/*.md
19
+ ```
20
+
21
+ If `docs/learned/` is missing or empty, the command will fail with a suggestion to run `erk docs init` first.
22
+
23
+ **Note:** Running `erk init` for a new project automatically initializes `docs/learned/` with template files (glossary.md, conventions.md, guide.md).
24
+
25
+ ## Usage
26
+
27
+ ```bash
28
+ /erk:create-extraction-plan [context]
29
+ ```
30
+
31
+ **Arguments:**
32
+
33
+ - `[context]` - Optional. Free-form text that can specify:
34
+ - Session ID(s) to analyze (e.g., "session abc123")
35
+ - Focus/steering for extraction (e.g., "focus on CLI patterns")
36
+ - Or both (e.g., "sessions abc123 and def456, focus on testing")
37
+
38
+ **Examples:**
39
+
40
+ ```bash
41
+ # Analyze current conversation
42
+ /erk:create-extraction-plan
43
+
44
+ # Current conversation with focus
45
+ /erk:create-extraction-plan "focus on the CLI patterns we discussed"
46
+
47
+ # Analyze specific session log
48
+ /erk:create-extraction-plan "session abc123"
49
+
50
+ # Multiple sessions with steering
51
+ /erk:create-extraction-plan "sessions abc123 and def456, focus on testing patterns"
52
+ ```
53
+
54
+ ## What It Does
55
+
56
+ 1. Analyzes session(s) for documentation gaps
57
+ 2. Identifies both learning gaps (Category A) and teaching gaps (Category B)
58
+ 3. Creates a GitHub issue with `erk-plan` + `erk-extraction` labels
59
+ 4. Outputs next steps for implementation
60
+
61
+ ## What You'll Get
62
+
63
+ Suggestions organized by category:
64
+
65
+ **Category A (Learning Gaps):**
66
+
67
+ - Documentation that would have made the session faster
68
+ - Usually agent docs or skills for patterns/workflows
69
+
70
+ **Category B (Teaching Gaps):**
71
+
72
+ - Documentation for what was BUILT in the session
73
+ - Usually glossary entries, routing updates, reference updates
74
+
75
+ ---
76
+
77
+ ## Agent Instructions
78
+
79
+ You are creating an extraction plan from session analysis.
80
+
81
+ ### Step 1: Determine Source and Context
82
+
83
+ Parse the context argument (if provided) for:
84
+
85
+ 1. **Session IDs** - Look for patterns like "session abc123" or UUID-like strings
86
+ 2. **Steering context** - Remaining text provides focus for the extraction analysis
87
+
88
+ **If no explicit session IDs provided:**
89
+
90
+ Run the session discovery helper with size filtering to exclude tiny sessions:
91
+
92
+ ```bash
93
+ erk exec list-sessions --min-size 1024
94
+ ```
95
+
96
+ The JSON output includes:
97
+
98
+ - `branch_context.is_on_trunk`: Whether on main/master branch
99
+ - `current_session_id`: Current session ID from SESSION_CONTEXT env
100
+ - `sessions`: List of recent sessions with metadata (only meaningful sessions >= 1KB)
101
+ - `project_dir`: Path to session logs
102
+ - `filtered_count`: Number of tiny sessions filtered out
103
+
104
+ **Behavior based on branch context:**
105
+
106
+ **If `branch_context.is_on_trunk` is true (on main/master):**
107
+
108
+ Use `current_session_id` only. Skip user prompt - analyze current conversation.
109
+
110
+ **If `branch_context.is_on_trunk` is false (feature branch):**
111
+
112
+ First, determine if the current session is "trivial" (< 1KB, typically just launching a command like this one). Check if the current session appears in the filtered results - if not, it was filtered out as tiny.
113
+
114
+ **Common pattern**: User launches a fresh session solely to run `/erk:create-extraction-plan` on substantial work from a previous session. In this case, auto-select the substantial session(s) without prompting.
115
+
116
+ **If current session is tiny AND exactly 1 substantial session exists:**
117
+
118
+ Auto-select the substantial session without prompting. Briefly inform user:
119
+
120
+ > "Auto-selected session [id] (current session is trivial, analyzing the substantial session)"
121
+
122
+ **If current session is tiny AND 2+ substantial sessions exist:**
123
+
124
+ Auto-select ALL substantial sessions without prompting. Briefly inform user:
125
+
126
+ > "Auto-selected [N] sessions (current session is trivial, analyzing all substantial sessions)"
127
+
128
+ **If current session is substantial AND exactly 1 total session (itself):**
129
+
130
+ Proceed with current session analysis. No prompt needed.
131
+
132
+ **If current session is substantial AND other substantial sessions exist:**
133
+
134
+ Present sessions to user for selection:
135
+
136
+ > "Found these sessions for this worktree:
137
+ >
138
+ > 1. [Dec 3, 11:38 AM] 4f852cdc... - how many session ids does... (current)
139
+ > 2. [Dec 3, 11:35 AM] d8f6bb38... - no rexporting due to backwards...
140
+ > 3. [Dec 3, 11:28 AM] d82e9306... - /gt:pr-submit
141
+ >
142
+ > Which sessions should I analyze? (1=current only, 2=all, or list session numbers like '1,3')"
143
+
144
+ Wait for user selection before proceeding.
145
+
146
+ **If 0 sessions remain after filtering (all tiny including current):**
147
+
148
+ Use current session only despite being tiny. Inform user:
149
+
150
+ > "No meaningful sessions found (all sessions were < 1KB). Analyzing current conversation anyway."
151
+
152
+ **If explicit session IDs found in context:**
153
+
154
+ Load and preprocess the session logs. Session logs are stored in `project_dir` as flat files:
155
+
156
+ - Main sessions: `<session-id>.jsonl`
157
+ - Agent logs: `agent-<agent-id>.jsonl`
158
+
159
+ Match session IDs against filenames (full or partial prefix match), then preprocess:
160
+
161
+ ```bash
162
+ erk exec preprocess-session <project-dir>/<session-id>.jsonl --stdout
163
+ ```
164
+
165
+ ### Step 2: Check for Associated Plan Issue Session Content
166
+
167
+ If on a feature branch (not trunk), check if this branch has an associated plan issue:
168
+
169
+ ```bash
170
+ # Check if .impl/issue.json exists
171
+ cat .impl/issue.json 2>/dev/null
172
+ ```
173
+
174
+ **If issue.json exists AND has valid `issue_number`:**
175
+
176
+ 1. Extract the `issue_number` from the JSON response
177
+ 2. Attempt to extract session content from the plan issue:
178
+ ```bash
179
+ erk exec extract-session-from-issue <issue_number> --stdout
180
+ ```
181
+ 3. If session XML is returned (not an error), store it as "plan issue session content"
182
+ 4. Note the session IDs from the stderr JSON output
183
+
184
+ **If issue.json doesn't exist OR extraction fails:** Continue with session log analysis only (this is normal for branches not created via `erk implement`).
185
+
186
+ ### Step 3: Verify Existing Documentation
187
+
188
+ Before analyzing gaps, scan the project for existing documentation:
189
+
190
+ ```bash
191
+ # Check for existing agent docs
192
+ ls -la docs/learned/ 2>/dev/null || echo "No docs/learned/ directory"
193
+
194
+ # Check for existing skills
195
+ ls -la .claude/skills/ 2>/dev/null || echo "No .claude/skills/ directory"
196
+
197
+ # Check root-level docs
198
+ ls -la *.md README* CONTRIBUTING* 2>/dev/null
199
+ ```
200
+
201
+ Create a mental inventory of what's already documented. For each potential suggestion later, verify it doesn't substantially overlap with existing docs.
202
+
203
+ ### Step 4: Mine Full Session Context
204
+
205
+ **CRITICAL**: Session analysis must examine the FULL conversation, not just recent messages.
206
+
207
+ **Compaction Awareness:**
208
+
209
+ Long sessions may have been "compacted" - earlier messages summarized to save context. However:
210
+
211
+ - The pre-compaction messages are still part of the SAME LOGICAL CONVERSATION
212
+ - Valuable research, discoveries, and reasoning often occurred BEFORE compaction
213
+ - Look for compaction markers and explicitly include pre-compaction content in your analysis
214
+ - Session logs (`.jsonl` files) contain the full uncompacted conversation
215
+
216
+ **Subagent Mining:**
217
+
218
+ The Task tool spawns specialized subagents (Explore, Plan, etc.) that often do the most valuable work:
219
+
220
+ 1. **Identify all Task tool invocations** - Look for `<invoke name="Task">` blocks
221
+ 2. **Read subagent outputs** - Each Task returns a detailed report with discoveries
222
+ 3. **Mine Explore agents** - These do codebase exploration and document what they found
223
+ 4. **Mine Plan agents** - These reason through approaches and capture design decisions
224
+ 5. **Don't just summarize** - Extract the specific insights, patterns, and learnings discovered
225
+
226
+ **What to look for in subagent outputs:**
227
+
228
+ - Files they read and what they learned from them
229
+ - Patterns they discovered in the codebase
230
+ - Design decisions they reasoned through
231
+ - External documentation they fetched (WebFetch, WebSearch)
232
+ - Comparisons between different approaches
233
+
234
+ **Example mining:**
235
+
236
+ If a Plan agent's output contains:
237
+
238
+ > "The existing provider pattern in data/provider.py uses ABC with abstract methods.
239
+ > This follows erk's fake-driven testing pattern where FakeProvider implements the same interface."
240
+
241
+ This indicates:
242
+
243
+ - ABC pattern documentation might need updating
244
+ - The fake-driven-testing skill connection was discovered
245
+ - This is Category A (learning) if not documented, or confirms existing docs if it is
246
+
247
+ ### Steps 5-8: Analyze Session
248
+
249
+ @../../../.erk/docs/kits/erk/includes/extract-docs-analysis-shared.md
250
+
251
+ ### Step 9: Combine Session Sources
252
+
253
+ When both **plan issue session content** (from Step 2) AND **session logs** (from Step 1) are available, analyze them together:
254
+
255
+ **Plan Issue Session Content** (from Step 2):
256
+
257
+ - Contains the PLANNING session - research, exploration, design decisions
258
+ - Look for: external docs consulted, codebase patterns discovered, trade-offs considered
259
+ - Particularly valuable for **Category A (Learning Gaps)** - what would have made planning faster
260
+
261
+ **Session Logs** (from Step 1):
262
+
263
+ - Contains the IMPLEMENTATION session(s) - actual work done
264
+ - Look for: features built, patterns implemented, problems solved
265
+ - Particularly valuable for **Category B (Teaching Gaps)** - documentation for what was built
266
+
267
+ When presenting analysis, clearly label which source revealed each insight:
268
+
269
+ - "[Plan session]" for insights from the plan issue
270
+ - "[Impl session]" for insights from session logs
271
+
272
+ ### Step 10: Confirm with User
273
+
274
+ **If analyzing current conversation (no session IDs in context):**
275
+
276
+ Present findings neutrally and let the user decide value:
277
+
278
+ > "Based on this session, I identified these potential documentation gaps:
279
+ >
280
+ > 1. [Brief title] - [One sentence why]
281
+ > 2. [Brief title] - [One sentence why]
282
+ > 3. ...
283
+ >
284
+ > Which of these would be valuable for future sessions? I'll generate detailed suggestions and draft content for the ones you select."
285
+
286
+ **IMPORTANT: Do NOT editorialize about whether gaps are "worth" documenting, "minor", "not broadly applicable", etc. Present findings neutrally and let the user decide. Your job is to surface potential gaps, not gatekeep what's valuable.**
287
+
288
+ Wait for user response before generating full output.
289
+
290
+ **If analyzing session logs (session IDs were specified):**
291
+
292
+ Skip confirmation and output all suggestions immediately since the user explicitly chose to analyze specific session(s).
293
+
294
+ ### Step 11: Format Plan Content
295
+
296
+ Format the selected suggestions as an implementation plan with this structure:
297
+
298
+ - **Objective**: Brief statement of what documentation will be added/improved
299
+ - **Source Information**: Session ID(s) that were analyzed
300
+ - **Documentation Items**: Each suggestion should include:
301
+ - Type (Category A or B)
302
+ - Location (where in the docs structure)
303
+ - Action (add, update, create)
304
+ - Priority (based on effort and impact)
305
+ - Content (the actual draft content)
306
+
307
+ ### Step 12: Create Extraction Plan Issue
308
+
309
+ **CRITICAL: Use this exact CLI command. Do NOT use `gh issue create` directly.**
310
+
311
+ Get the session ID from the `SESSION_CONTEXT` reminder in your conversation context.
312
+
313
+ ```bash
314
+ erk exec create-extraction-plan \
315
+ --plan-content="<the formatted plan content>" \
316
+ --session-id="<session-id-from-SESSION_CONTEXT>" \
317
+ --extraction-session-ids="<comma-separated-session-ids-that-were-analyzed>"
318
+ ```
319
+
320
+ This command automatically:
321
+
322
+ 1. Writes plan to `.erk/scratch/<session-id>/extraction-plan.md`
323
+ 2. Creates GitHub issue with `erk-plan` + `erk-extraction` labels
324
+ 3. Sets `plan_type: extraction` in plan-header metadata
325
+
326
+ **Note:** The current session ID (from `SESSION_CONTEXT` reminder) is used as `--session-id` for scratch storage. The `--extraction-session-ids` should list all session IDs that were analyzed (may differ from current session).
327
+
328
+ ### Step 13: Verify and Output
329
+
330
+ Run verification to ensure the issue was created with proper Schema v2 compliance:
331
+
332
+ ```bash
333
+ erk plan check <issue_number>
334
+ ```
335
+
336
+ Display next steps:
337
+
338
+ ```
339
+ ✅ Extraction plan saved to GitHub
340
+
341
+ **Issue:** [title from result]
342
+ [url from result]
343
+
344
+ **Next steps:**
345
+
346
+ View the plan:
347
+ gh issue view [issue_number] --web
348
+
349
+ Implement the plan:
350
+ erk implement [issue_number]
351
+
352
+ Submit for remote implementation:
353
+ erk plan submit [issue_number]
354
+ ```
355
+
356
+ ---
357
+
358
+ ## Output
359
+
360
+ After analysis (and user confirmation if applicable), display suggestions using the output format from the analysis guide, then proceed to create the extraction plan issue.
@@ -0,0 +1,25 @@
1
+ ---
2
+ description: Fix all merge conflicts and continue the git rebase
3
+ ---
4
+
5
+ # Fix Merge Conflicts
6
+
7
+ Fix all merge conflicts and continue the git rebase.
8
+
9
+ ## Steps
10
+
11
+ 1. **Check status** - Run `git status` to understand the state of the rebase and identify conflicted files
12
+
13
+ 2. **For each conflicted file:**
14
+
15
+ <!-- prettier-ignore -->
16
+ @../../../.erk/docs/kits/erk/includes/conflict-resolution.md
17
+
18
+ 3. **After resolving all conflicts:**
19
+ - If project memory includes a precommit check, run it and ensure no failures
20
+ - Stage the resolved files with `git add`
21
+ - Continue the rebase with `gt continue`
22
+
23
+ 4. **Loop** - If the rebase continues with more conflicts, repeat the process
24
+
25
+ 5. **Verify completion** - Check git status and recent commit history to confirm success