claude-dev-env 4.3.0 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/agents/pr-description-writer.md +2 -2
- package/.agents/agents/test_agent_frontmatter.py +2 -2
- package/.agents/agents/test_pr_description_writer_style.py +1 -3
- package/.agents/skills/e-code-review/SKILL.md +12 -12
- package/.agents/skills/e-code-review/preflight-proposal.contract.test.mjs +20 -0
- package/.agents/skills/e-code-review/reference/fix.md +15 -17
- package/.agents/skills/e-code-review/reference/loop.md +35 -39
- package/.agents/skills/e-code-review/reference/mode-contract.test.mjs +2 -1
- package/.agents/skills/e-code-review/reference/preflight-proposal.md +44 -9
- package/.agents/skills/e-code-review/reference/runner-selection.md +13 -14
- package/.agents/skills/issue-tracker/SKILL.md +5 -4
- package/.agents/skills/pull-request/SKILL.md +11 -13
- package/.agents/skills/pull-request/reference/publication-tasks.md +3 -3
- package/.agents/skills/pull-request/scripts/github_pr_command_constants/config/constants.py +9 -1
- package/.agents/skills/pull-request/scripts/pull_request.py +35 -44
- package/.agents/skills/pull-request/scripts/test_github_pr_command_constants.py +9 -0
- package/.agents/skills/pull-request/scripts/test_pull_request.py +35 -3
- package/.agents/skills/session-continuity/README.md +189 -0
- package/.agents/skills/session-continuity/SKILL.md +114 -0
- package/.agents/skills/session-continuity/continuity.mjs +375 -0
- package/.agents/skills/session-continuity/continuity.test.mjs +303 -0
- package/.agents/skills/skill-builder/SKILL.md +3 -196
- package/.agents/skills/syncing-submodules/scripts/test_sync_parent_pointer.py +0 -7
- package/.agents/skills/windows-scheduled-task/SKILL.md +153 -0
- package/_shared/pr-loop/scripts/pr_loop_shared_constants/terminology_sweep_constants.py +6 -0
- package/_shared/pr-loop/scripts/terminology_sweep.py +64 -19
- package/_shared/pr-loop/scripts/tests/test_terminology_sweep.py +59 -0
- package/bin/cde.mjs +36 -8
- package/bin/cde.test.mjs +48 -0
- package/bin/ever-shipped-skills.mjs +2 -20
- package/bin/ever-shipped-skills.test.mjs +8 -0
- package/bin/expand_home_directory_tokens.mjs +4 -5
- package/bin/expand_home_directory_tokens.test.mjs +128 -0
- package/bin/git_hooks_installer.mjs +22 -3
- package/bin/git_hooks_installer.test.mjs +159 -5
- package/bin/install-session-continuity.mjs +78 -0
- package/bin/install-session-continuity.test.mjs +42 -0
- package/bin/install.agents-home.test.mjs +15 -13
- package/bin/install.codex-rules.test.mjs +5 -2
- package/bin/install.cursor-rules.test.mjs +5 -2
- package/bin/install.mjs +506 -63
- package/bin/install.policy-lint.test.mjs +130 -0
- package/bin/install.profiles.test.mjs +10 -0
- package/bin/install.prune.test.mjs +286 -37
- package/bin/install.pstack-plugin.test.mjs +114 -0
- package/bin/install.test.mjs +537 -120
- package/bin/install.transaction.test.mjs +3 -3
- package/bin/refresh-pstack-plugin-skills.test.mjs +211 -0
- package/docs/CODE_RULES.md +1 -1
- package/hooks/advisory/pr_done_reminder.py +342 -0
- package/hooks/advisory/test_pr_done_reminder.py +249 -0
- package/hooks/blocking/bash_post_call_dispatcher.py +53 -6
- package/hooks/blocking/code_rules_banned_identifiers.py +3 -0
- package/hooks/blocking/code_rules_paired_test.py +22 -15
- package/hooks/blocking/precommit_code_rules_gate.py +5 -8
- package/hooks/blocking/test_bash_dispatcher_interpreter_starts.py +7 -52
- package/hooks/blocking/test_bash_post_call_dispatcher.py +65 -4
- package/hooks/blocking/test_bash_pre_tool_use_dispatcher.py +0 -69
- package/hooks/blocking/test_code_rules_banned_identifiers.py +64 -0
- package/hooks/blocking/test_code_rules_enforcer_paired_test.py +36 -29
- package/hooks/blocking/test_code_rules_js_resume_task_enumeration.py +4 -4
- package/hooks/blocking/test_code_rules_js_returns_object_schemaless.py +5 -5
- package/hooks/blocking/test_pre_tool_use_dispatcher.py +43 -342
- package/hooks/blocking/test_pre_tool_use_dispatcher_native.py +20 -51
- package/hooks/blocking/test_shared_stdin_adoption.py +1 -47
- package/hooks/git-hooks/git_hooks_constants/staged_policy_lint.py +12 -0
- package/hooks/git-hooks/git_hooks_constants/verification_notice_constants.py +116 -0
- package/hooks/git-hooks/post_commit.py +33 -0
- package/hooks/git-hooks/pre_commit.py +18 -49
- package/hooks/git-hooks/pre_push.py +45 -541
- package/hooks/git-hooks/test_installed_policy_lint.py +208 -0
- package/hooks/git-hooks/test_native_hook_support.py +129 -0
- package/hooks/git-hooks/test_native_policy_commit.py +120 -0
- package/hooks/git-hooks/test_post_commit.py +43 -0
- package/hooks/git-hooks/test_pre_commit.py +38 -148
- package/hooks/git-hooks/test_pre_push.py +48 -1631
- package/hooks/git-hooks/test_verification_notice.py +60 -0
- package/hooks/git-hooks/test_verification_start.py +173 -0
- package/hooks/git-hooks/verification_notice.py +192 -0
- package/hooks/git-hooks/verification_notice_context.py +253 -0
- package/hooks/git-hooks/verification_notice_state.py +237 -0
- package/hooks/git-hooks/verification_start.py +100 -0
- package/hooks/hooks.json +1 -120
- package/hooks/hooks_constants/banned_identifiers_constants.py +4 -0
- package/hooks/hooks_constants/bash_post_call_dispatcher_constants.py +14 -1
- package/hooks/hooks_constants/bash_pre_tool_use_dispatcher_constants.py +1 -15
- package/hooks/hooks_constants/post_tool_use_dispatcher_constants.py +0 -4
- package/hooks/hooks_constants/pr_done_reminder_constants.py +98 -0
- package/hooks/hooks_constants/pre_tool_use_dispatcher_constants.py +10 -93
- package/hooks/hooks_constants/stop_dispatcher_constants.py +1 -4
- package/hooks/hooks_constants/test_bash_post_call_dispatcher_constants.py +19 -2
- package/hooks/hooks_constants/test_bash_pre_tool_use_dispatcher_constants.py +3 -66
- package/hooks/hooks_constants/test_pr_done_reminder_constants.py +40 -0
- package/hooks/hooks_constants/test_pre_tool_use_dispatcher_constants.py +46 -201
- package/hooks/hooks_constants/test_stop_dispatcher_constants.py +3 -25
- package/hooks/validation/test_post_tool_use_dispatcher.py +35 -298
- package/hooks/validators/run_all_validators.py +5 -1
- package/hooks/validators/security_checks.py +57 -2
- package/hooks/validators/test_hook_timing_harness.py +2 -5
- package/hooks/validators/test_run_all_validators_mutation_tool_parity.py +3 -11
- package/hooks/validators/test_run_all_validators_policy_lint.py +36 -0
- package/hooks/validators/test_security_checks.py +57 -0
- package/package.json +2 -2
- package/rules/confirm-implementation-forks.md +2 -0
- package/rules/durable-post-artifacts.md +2 -1
- package/rules/git-workflow.md +18 -6
- package/rules/pstack-host-mapping.md +48 -0
- package/rules/vault-context.md +3 -5
- package/rules/verify-runtime-state.md +7 -0
- package/scripts/audit-hooks-cli.mjs +5 -0
- package/scripts/audit-hooks.mjs +72 -16
- package/scripts/automatic_advisory/__init__.py +1 -0
- package/scripts/automatic_advisory/checkout.py +51 -0
- package/scripts/automatic_advisory/cli.py +334 -0
- package/scripts/automatic_advisory/config/__init__.py +1 -0
- package/scripts/automatic_advisory/config/constants.py +93 -0
- package/scripts/automatic_advisory/config/timing.py +4 -0
- package/scripts/automatic_advisory/configuration.py +197 -0
- package/scripts/automatic_advisory/execution.py +350 -0
- package/scripts/automatic_advisory/git.py +69 -0
- package/scripts/automatic_advisory/model.py +107 -0
- package/scripts/automatic_advisory/process_host.py +32 -0
- package/scripts/automatic_advisory/publisher.py +84 -0
- package/scripts/automatic_advisory/runner.py +399 -0
- package/scripts/automatic_advisory/state.py +116 -0
- package/scripts/automatic_advisory/window_flags.py +41 -0
- package/scripts/automatic_advisory/windows_job.py +122 -0
- package/scripts/check.ps1 +0 -1
- package/{.agents/skills/run-claude-dev-env/driver.mjs → scripts/ci/installer-lifecycle.mjs} +3 -28
- package/scripts/ci/installer-lifecycle.test.mjs +26 -0
- package/scripts/ci/windows-installer-lifecycle.ps1 +1 -11
- package/scripts/codex_compat_materializer.py +99 -13
- package/scripts/dev_env_scripts_constants/shared_tree_constants.py +4 -5
- package/{.agents/skills/_shared/pr-loop/scripts → scripts}/durable_post_lint.py +35 -43
- package/{.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/durable_post_lint_constants.py → scripts/durable_post_lint_config/config/constants.py} +10 -10
- package/{.agents/skills/_shared/pr-loop/scripts/test_durable_post_lint_constants.py → scripts/durable_post_lint_config/config/test_constants.py} +14 -1
- package/scripts/local_report_cli.py +184 -0
- package/scripts/local_report_core.py +247 -0
- package/scripts/local_report_publisher.py +12 -0
- package/scripts/local_report_validation.py +357 -0
- package/scripts/local_verification/__init__.py +23 -0
- package/scripts/local_verification/check_runner.py +364 -0
- package/scripts/local_verification/check_support.py +99 -0
- package/scripts/local_verification/cli.py +158 -0
- package/scripts/local_verification/command_runner.py +84 -0
- package/scripts/local_verification/config/__init__.py +1 -0
- package/scripts/local_verification/config/constants.py +89 -0
- package/scripts/local_verification/config/timing.py +1 -0
- package/scripts/local_verification/git_state.py +146 -0
- package/scripts/local_verification/manifest.py +224 -0
- package/scripts/local_verification/model.py +174 -0
- package/scripts/local_verification/runner.py +234 -0
- package/scripts/policy_lint/adapter_detectors.py +13 -6
- package/scripts/policy_lint/adapter_pairing.py +58 -3
- package/scripts/policy_lint/adapters.py +7 -4
- package/scripts/policy_lint/config/approved_test_pairs.py +323 -0
- package/scripts/policy_lint/config/constants.py +5 -0
- package/scripts/policy_lint/engine.py +48 -4
- package/scripts/policy_lint/model.py +1 -0
- package/scripts/policy_lint/registry.py +1 -1
- package/scripts/policy_lint/selection.py +2 -1
- package/scripts/policy_lint/selection_git.py +2 -0
- package/scripts/pr_verification/__init__.py +1 -0
- package/scripts/pr_verification/branch_refs.py +114 -0
- package/scripts/pr_verification/config/__init__.py +1 -0
- package/scripts/pr_verification/config/constants.py +84 -0
- package/scripts/pr_verification/config/timing.py +5 -0
- package/scripts/pr_verification/github.py +137 -0
- package/scripts/pr_verification/github_api.py +376 -0
- package/scripts/pr_verification/github_labels.py +88 -0
- package/scripts/pr_verification/github_parsing.py +182 -0
- package/scripts/pr_verification/github_transport.py +91 -0
- package/scripts/pr_verification/lock.py +122 -0
- package/scripts/pr_verification/model.py +43 -0
- package/scripts/pr_verification/requirements.txt +1 -0
- package/scripts/refresh_pstack_plugin_skills.mjs +200 -0
- package/scripts/shared_tree_paths.py +32 -3
- package/{.agents/skills/_shared/pr-loop/scripts → scripts}/test_durable_post_lint.py +97 -0
- package/scripts/test_shared_tree_paths.py +33 -0
- package/scripts/tests/test-audit-hooks-cli.mjs +150 -0
- package/scripts/tests/test-audit-hooks.mjs +94 -2
- package/scripts/tests/test_automatic_advisory.py +376 -0
- package/scripts/tests/test_automatic_advisory_job_cleanup.py +71 -0
- package/scripts/tests/test_automatic_advisory_polling.py +216 -0
- package/scripts/tests/test_automatic_advisory_recovery.py +320 -0
- package/scripts/tests/test_automatic_advisory_repairs.py +400 -0
- package/scripts/tests/test_automatic_advisory_settings.py +48 -0
- package/scripts/tests/test_automatic_advisory_window_flags.py +163 -0
- package/scripts/tests/test_closed_pr_label.py +157 -0
- package/scripts/tests/test_codex_compat_materializer.py +189 -6
- package/scripts/tests/test_github_labels.py +101 -0
- package/scripts/tests/test_github_transport.py +125 -0
- package/scripts/tests/test_local_report_publisher.py +396 -0
- package/scripts/tests/test_local_report_publisher_cli.py +85 -0
- package/scripts/tests/test_local_verification.py +348 -0
- package/scripts/tests/test_local_verification_cli.py +98 -0
- package/scripts/tests/test_policy_lint_rules_archive.py +120 -0
- package/scripts/tests/test_policy_lint_rules_engine.py +25 -4
- package/scripts/tests/test_policy_lint_rules_installed_loader.py +29 -0
- package/scripts/tests/test_policy_lint_rules_pairing.py +163 -0
- package/scripts/tests/test_policy_lint_rules_registry.py +227 -13
- package/scripts/tests/test_policy_lint_selection.py +25 -2
- package/scripts/tests/test_policy_lint_selection_native_index.py +30 -0
- package/scripts/tests/test_pr_verification_github.py +392 -0
- package/scripts/tests/test_pr_verification_lock.py +168 -0
- package/scripts/tests/test_rules.py +3 -7
- package/scripts/tests/test_verification_notice.py +347 -0
- package/.agents/skills/_shared/pr-loop/.claude/CLAUDE.md +0 -1
- package/.agents/skills/_shared/pr-loop/audit-contract.md +0 -5
- package/.agents/skills/_shared/pr-loop/audit-reply-template.md +0 -5
- package/.agents/skills/_shared/pr-loop/code-rules-gate.md +0 -5
- package/.agents/skills/_shared/pr-loop/fix-protocol.md +0 -5
- package/.agents/skills/_shared/pr-loop/gh-payloads.md +0 -5
- package/.agents/skills/_shared/pr-loop/portable-driver.md +0 -149
- package/.agents/skills/_shared/pr-loop/post-audit-thread-contract.md +0 -5
- package/.agents/skills/_shared/pr-loop/precatch-rubric.md +0 -5
- package/.agents/skills/_shared/pr-loop/preflight-proposal.contract.test.mjs +0 -119
- package/.agents/skills/_shared/pr-loop/preflight-proposal.md +0 -5
- package/.agents/skills/_shared/pr-loop/prompts/.claude/CLAUDE.md +0 -1
- package/.agents/skills/_shared/pr-loop/prompts/AGENTS.md +0 -1
- package/.agents/skills/_shared/pr-loop/prompts/pr-consistency-audit.xml +0 -324
- package/.agents/skills/_shared/pr-loop/scripts/.claude/CLAUDE.md +0 -1
- package/.agents/skills/_shared/pr-loop/scripts/AGENTS.md +0 -1
- package/.agents/skills/_shared/pr-loop/scripts/RUNTIME_SCRIPTS.md +0 -29
- package/.agents/skills/_shared/pr-loop/scripts/_cli_utils.py +0 -22
- package/.agents/skills/_shared/pr-loop/scripts/_path_resolver.py +0 -186
- package/.agents/skills/_shared/pr-loop/scripts/_xml_utils.py +0 -20
- package/.agents/skills/_shared/pr-loop/scripts/audit_category_schema.py +0 -355
- package/.agents/skills/_shared/pr-loop/scripts/build_audit_prompt.py +0 -289
- package/.agents/skills/_shared/pr-loop/scripts/build_converge_task_list.py +0 -310
- package/.agents/skills/_shared/pr-loop/scripts/build_fix_prompt.py +0 -292
- package/.agents/skills/_shared/pr-loop/scripts/init_loop_state.py +0 -134
- package/.agents/skills/_shared/pr-loop/scripts/portable_converge_driver.py +0 -1646
- package/.agents/skills/_shared/pr-loop/scripts/preflight_worktree.py +0 -392
- package/.agents/skills/_shared/pr-loop/scripts/select_converge_pacer.py +0 -215
- package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/.claude/CLAUDE.md +0 -1
- package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/AGENTS.md +0 -1
- package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/__init__.py +0 -0
- package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/audit_category_schema_constants.py +0 -37
- package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/converge_task_list_constants.py +0 -56
- package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/handoff_constants.py +0 -45
- package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/pacer_constants.py +0 -47
- package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/path_resolver_constants.py +0 -157
- package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/portable_driver_constants.py +0 -177
- package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/preflight_constants.py +0 -70
- package/.agents/skills/_shared/pr-loop/scripts/teardown_worktrees.py +0 -172
- package/.agents/skills/_shared/pr-loop/scripts/test__path_resolver.py +0 -106
- package/.agents/skills/_shared/pr-loop/scripts/test_audit_category_schema.py +0 -94
- package/.agents/skills/_shared/pr-loop/scripts/test_build_audit_prompt.py +0 -499
- package/.agents/skills/_shared/pr-loop/scripts/test_build_converge_task_list.py +0 -140
- package/.agents/skills/_shared/pr-loop/scripts/test_build_fix_prompt.py +0 -262
- package/.agents/skills/_shared/pr-loop/scripts/test_init_loop_state.py +0 -71
- package/.agents/skills/_shared/pr-loop/scripts/test_portable_converge_driver.py +0 -1119
- package/.agents/skills/_shared/pr-loop/scripts/test_preflight_worktree.py +0 -287
- package/.agents/skills/_shared/pr-loop/scripts/test_select_converge_pacer.py +0 -207
- package/.agents/skills/_shared/pr-loop/scripts/test_teardown_worktrees.py +0 -59
- package/.agents/skills/_shared/pr-loop/scripts/test_write_handoff.py +0 -201
- package/.agents/skills/_shared/pr-loop/scripts/write_audit_outcomes.py +0 -182
- package/.agents/skills/_shared/pr-loop/scripts/write_fix_outcomes.py +0 -206
- package/.agents/skills/_shared/pr-loop/scripts/write_handoff.py +0 -309
- package/.agents/skills/_shared/pr-loop/state-schema.md +0 -5
- package/.agents/skills/_shared/pr-loop/worker-spawn.md +0 -5
- package/.agents/skills/autoconverge/.claude/CLAUDE.md +0 -1
- package/.agents/skills/autoconverge/AGENTS.md +0 -1
- package/.agents/skills/autoconverge/SKILL.md +0 -431
- package/.agents/skills/autoconverge/reference/.claude/CLAUDE.md +0 -1
- package/.agents/skills/autoconverge/reference/AGENTS.md +0 -1
- package/.agents/skills/autoconverge/reference/closing-report.md +0 -93
- package/.agents/skills/autoconverge/reference/convergence-gates.md +0 -31
- package/.agents/skills/autoconverge/reference/convergence.md +0 -219
- package/.agents/skills/autoconverge/reference/copilot-findings.md +0 -51
- package/.agents/skills/autoconverge/reference/gotchas.md +0 -66
- package/.agents/skills/autoconverge/reference/headless-safety.md +0 -44
- package/.agents/skills/autoconverge/reference/multi-pr.md +0 -128
- package/.agents/skills/autoconverge/reference/self-closing-loop.md +0 -84
- package/.agents/skills/autoconverge/reference/stop-conditions.md +0 -127
- package/.agents/skills/autoconverge/test_portable_pacer_gate.py +0 -54
- package/.agents/skills/autoconverge/workflow/.claude/CLAUDE.md +0 -1
- package/.agents/skills/autoconverge/workflow/AGENTS.md +0 -1
- package/.agents/skills/autoconverge/workflow/aggregate_runs.py +0 -371
- package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/.claude/CLAUDE.md +0 -1
- package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/AGENTS.md +0 -1
- package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/__init__.py +0 -0
- package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/render_report_constants.py +0 -250
- package/.agents/skills/autoconverge/workflow/converge.clean-audit.test.mjs +0 -665
- package/.agents/skills/autoconverge/workflow/converge.codex-gate.test.mjs +0 -472
- package/.agents/skills/autoconverge/workflow/converge.contract.test.mjs +0 -64
- package/.agents/skills/autoconverge/workflow/converge.copilot-gate.test.mjs +0 -1009
- package/.agents/skills/autoconverge/workflow/converge.fix-progress.test.mjs +0 -107
- package/.agents/skills/autoconverge/workflow/converge.fix-recovery.test.mjs +0 -33
- package/.agents/skills/autoconverge/workflow/converge.merge-conflict.test.mjs +0 -15
- package/.agents/skills/autoconverge/workflow/converge.mjs +0 -3132
- package/.agents/skills/autoconverge/workflow/converge.p2-advance.test.mjs +0 -202
- package/.agents/skills/autoconverge/workflow/converge.path-aware.test.mjs +0 -47
- package/.agents/skills/autoconverge/workflow/converge.precatch.test.mjs +0 -152
- package/.agents/skills/autoconverge/workflow/converge.run-input.test.mjs +0 -116
- package/.agents/skills/autoconverge/workflow/converge_multi.mjs +0 -169
- package/.agents/skills/autoconverge/workflow/converge_multi.run-input.test.mjs +0 -173
- package/.agents/skills/autoconverge/workflow/convergence_summary.py +0 -110
- package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a11d903476b803493.jsonl +0 -2
- package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a26213978adeef6fb.jsonl +0 -2
- package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a3def0d15ed9d9110.jsonl +0 -2
- package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a41f41b1b708ee3b7.jsonl +0 -2
- package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a758b880abecc3ff7.jsonl +0 -2
- package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a8897b89656b1bd16.jsonl +0 -2
- package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ab1c2d3e4f5a6b7c8.jsonl +0 -2
- package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-abd463d744a1437bc.jsonl +0 -2
- package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ad19d027ae8ee1816.jsonl +0 -2
- package/.agents/skills/autoconverge/workflow/fixtures/wf_run/workflows/wf_881252e6-700.json +0 -266
- package/.agents/skills/autoconverge/workflow/render_report.py +0 -1024
- package/.agents/skills/autoconverge/workflow/test_aggregate_runs.py +0 -134
- package/.agents/skills/autoconverge/workflow/test_convergence_summary.py +0 -149
- package/.agents/skills/autoconverge/workflow/test_render_report.py +0 -812
- package/.agents/skills/hitl/SKILL.md +0 -45
- package/.agents/skills/pr-cleanup/SKILL.md +0 -140
- package/.agents/skills/pr-cleanup/reference/process-inventory.md +0 -17
- package/.agents/skills/pr-cleanup/reference/task-seeds.md +0 -22
- package/.agents/skills/pr-name-by-capability/SKILL.md +0 -73
- package/.agents/skills/pr-name-by-capability/reference/fetch-commands.md +0 -29
- package/.agents/skills/pr-name-by-capability/reference/offense-examples.md +0 -32
- package/.agents/skills/pr-name-by-capability/reference/report-template.md +0 -29
- package/.agents/skills/pr-name-by-capability/reference/rule-checklist.md +0 -38
- package/.agents/skills/pr-name-by-capability/reference/task-seeds.md +0 -10
- package/.agents/skills/pr-plain-language-cleanup/SKILL.md +0 -93
- package/.agents/skills/pr-refinement/SKILL.md +0 -31
- package/.agents/skills/pr-shared-extraction/SKILL.md +0 -177
- package/.agents/skills/pr-shared-extraction/reference/examples.md +0 -46
- package/.agents/skills/pr-shared-extraction/reference/offense-taxonomy.md +0 -100
- package/.agents/skills/pr-small-cl/SKILL.md +0 -52
- package/.agents/skills/pr-title-description/SKILL.md +0 -96
- package/.agents/skills/prototype/SKILL.md +0 -85
- package/.agents/skills/prototype/reference/honest-limitations.md +0 -23
- package/.agents/skills/prototype/reference/promotion-tasks.md +0 -23
- package/.agents/skills/prototype/scripts/build_sandbox_settings.py +0 -249
- package/.agents/skills/prototype/scripts/conftest.py +0 -15
- package/.agents/skills/prototype/scripts/launch_sandbox.py +0 -205
- package/.agents/skills/prototype/scripts/probe_sandbox_safety.py +0 -311
- package/.agents/skills/prototype/scripts/prototype_scripts_constants/__init__.py +0 -1
- package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/__init__.py +0 -0
- package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/build_sandbox_settings_constants.py +0 -41
- package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/launch_sandbox_constants.py +0 -23
- package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/probe_sandbox_safety_constants.py +0 -45
- package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/prototype_common_constants.py +0 -10
- package/.agents/skills/prototype/scripts/test_build_sandbox_settings.py +0 -275
- package/.agents/skills/prototype/scripts/test_launch_sandbox.py +0 -303
- package/.agents/skills/prototype/scripts/test_probe_sandbox_safety.py +0 -312
- package/.agents/skills/prototype/workflows/promotion.md +0 -25
- package/.agents/skills/prototype/workflows/sandbox.md +0 -35
- package/.agents/skills/rebase/.claude/CLAUDE.md +0 -1
- package/.agents/skills/rebase/AGENTS.md +0 -1
- package/.agents/skills/rebase/SKILL.md +0 -178
- package/.agents/skills/review-router/SKILL.md +0 -51
- package/.agents/skills/review-router/reference/route-policy.json +0 -7
- package/.agents/skills/review-router/reference/task-seeds.md +0 -1
- package/.agents/skills/review-router/scripts/conftest.py +0 -4
- package/.agents/skills/review-router/scripts/review_router.py +0 -50
- package/.agents/skills/review-router/scripts/review_router_cli.py +0 -211
- package/.agents/skills/review-router/scripts/review_router_constants/__init__.py +0 -1
- package/.agents/skills/review-router/scripts/review_router_constants/config/__init__.py +0 -0
- package/.agents/skills/review-router/scripts/review_router_constants/config/constants.py +0 -13
- package/.agents/skills/review-router/scripts/test_review_router.py +0 -23
- package/.agents/skills/review-router/scripts/test_review_router_cli.py +0 -47
- package/.agents/skills/review-tier/SKILL.md +0 -56
- package/.agents/skills/review-tier/reference/task-seeds.md +0 -1
- package/.agents/skills/review-tier/reference/tier-policy.json +0 -9
- package/.agents/skills/review-tier/scripts/conftest.py +0 -4
- package/.agents/skills/review-tier/scripts/review_tier.py +0 -359
- package/.agents/skills/review-tier/scripts/review_tier_constants/__init__.py +0 -1
- package/.agents/skills/review-tier/scripts/review_tier_constants/config/__init__.py +0 -0
- package/.agents/skills/review-tier/scripts/review_tier_constants/config/constants.py +0 -29
- package/.agents/skills/review-tier/scripts/test_generation.py +0 -159
- package/.agents/skills/review-tier/scripts/test_review_tier.py +0 -33
- package/.agents/skills/run-claude-dev-env/SKILL.md +0 -84
- package/.agents/skills/session-log/.claude/CLAUDE.md +0 -1
- package/.agents/skills/session-log/AGENTS.md +0 -1
- package/.agents/skills/session-log/SKILL.md +0 -170
- package/.agents/skills/session-log/templates/frontmatter.md +0 -40
- package/.agents/skills/session-tidy/.claude/CLAUDE.md +0 -1
- package/.agents/skills/session-tidy/AGENTS.md +0 -1
- package/.agents/skills/session-tidy/SKILL.md +0 -191
- package/.agents/skills/skill-builder/references/.claude/CLAUDE.md +0 -1
- package/.agents/skills/skill-builder/references/AGENTS.md +0 -1
- package/.agents/skills/skill-builder/references/delegation-map.md +0 -130
- package/.agents/skills/skill-builder/references/description-field.md +0 -111
- package/.agents/skills/skill-builder/references/deterministic-elements.md +0 -218
- package/.agents/skills/skill-builder/references/progressive-disclosure.md +0 -122
- package/.agents/skills/skill-builder/references/self-audit-checklist.md +0 -126
- package/.agents/skills/skill-builder/references/skill-modularity.md +0 -111
- package/.agents/skills/skill-builder/references/skill-types.md +0 -232
- package/.agents/skills/skill-builder/references/thariq-x-post-skills.json +0 -33
- package/.agents/skills/skill-builder/templates/.claude/CLAUDE.md +0 -1
- package/.agents/skills/skill-builder/templates/AGENTS.md +0 -1
- package/.agents/skills/skill-builder/templates/gap-analysis.md +0 -87
- package/.agents/skills/skill-builder/workflows/.claude/CLAUDE.md +0 -1
- package/.agents/skills/skill-builder/workflows/AGENTS.md +0 -1
- package/.agents/skills/skill-builder/workflows/improve-skill.md +0 -136
- package/.agents/skills/skill-builder/workflows/new-skill.md +0 -179
- package/.agents/skills/skill-builder/workflows/polish-skill.md +0 -139
- package/.agents/skills/source-command-sr-loop/SKILL.md +0 -82
- package/.agents/skills/update/.claude/CLAUDE.md +0 -1
- package/.agents/skills/update/AGENTS.md +0 -1
- package/.agents/skills/update/SKILL.md +0 -190
- package/_shared/pr-loop/AGENTS.md +0 -1
- package/_shared/pr-loop/audit-contract.md +0 -183
- package/_shared/pr-loop/audit-reply-template.md +0 -151
- package/_shared/pr-loop/code-rules-gate.md +0 -65
- package/_shared/pr-loop/fix-protocol.md +0 -60
- package/_shared/pr-loop/gh-payloads.md +0 -75
- package/_shared/pr-loop/post-audit-thread-contract.md +0 -51
- package/_shared/pr-loop/precatch-rubric.md +0 -66
- package/_shared/pr-loop/preflight-proposal.md +0 -56
- package/_shared/pr-loop/scripts/post_audit_thread.py +0 -1242
- package/_shared/pr-loop/scripts/pr_loop_shared_constants/post_audit_thread_constants.py +0 -199
- package/_shared/pr-loop/scripts/tests/test_post_audit_thread.py +0 -1115
- package/_shared/pr-loop/scripts/tests/test_post_audit_thread_constants.py +0 -129
- package/_shared/pr-loop/state-schema.md +0 -45
- package/_shared/pr-loop/worker-spawn.md +0 -189
- package/hooks/blocking/ask_user_question_shape_blocker.py +0 -83
- package/hooks/blocking/bot_mention_comment_blocker.py +0 -76
- package/hooks/blocking/claude_md_orphan_file_blocker.py +0 -129
- package/hooks/blocking/cursor_cli_python_misfire_blocker.py +0 -108
- package/hooks/blocking/destructive_command_blocker.py +0 -2073
- package/hooks/blocking/fable_spawn_gate.py +0 -187
- package/hooks/blocking/luna_fast_mode_gate.py +0 -160
- package/hooks/blocking/nas_ssh_binary_enforcer.py +0 -163
- package/hooks/blocking/orchestrator_refresh_reschedule_gate.py +0 -260
- package/hooks/blocking/package_inventory_stale_blocker.py +0 -107
- package/hooks/blocking/pii_prevention_blocker.py +0 -365
- package/hooks/blocking/piped_pytest_blocker.py +0 -1223
- package/hooks/blocking/question_to_user_enforcer.py +0 -130
- package/hooks/blocking/send_user_file_open_locally_blocker.py +0 -71
- package/hooks/blocking/sensitive_file_protector.py +0 -167
- package/hooks/blocking/session_edit_stage_gate.py +0 -684
- package/hooks/blocking/session_handoff_blocker.py +0 -182
- package/hooks/blocking/shell_substitution_blocker.py +0 -350
- package/hooks/blocking/test_ask_user_question_shape.py +0 -69
- package/hooks/blocking/test_bot_mention_comment_blocker.py +0 -131
- package/hooks/blocking/test_claude_md_orphan_file_blocker.py +0 -1277
- package/hooks/blocking/test_cursor_cli_python_misfire_blocker.py +0 -208
- package/hooks/blocking/test_destructive_command_blocker.py +0 -2024
- package/hooks/blocking/test_destructive_command_blocker_deny_mode.py +0 -105
- package/hooks/blocking/test_destructive_command_blocker_no_verify.py +0 -122
- package/hooks/blocking/test_destructive_command_blocker_patterns.py +0 -133
- package/hooks/blocking/test_fable_spawn_gate.py +0 -381
- package/hooks/blocking/test_inventory_deadlock_resolution.py +0 -154
- package/hooks/blocking/test_luna_fast_mode_gate.py +0 -211
- package/hooks/blocking/test_nas_ssh_binary_enforcer.py +0 -225
- package/hooks/blocking/test_orchestrator_refresh_reschedule_gate.py +0 -231
- package/hooks/blocking/test_package_inventory_stale_blocker.py +0 -382
- package/hooks/blocking/test_pii_prevention_blocker.py +0 -1222
- package/hooks/blocking/test_pii_prevention_windows_git_path.py +0 -41
- package/hooks/blocking/test_pii_write_surface_ephemeral.py +0 -221
- package/hooks/blocking/test_piped_pytest_blocker.py +0 -587
- package/hooks/blocking/test_precommit_code_rules_gate_native_owner.py +0 -233
- package/hooks/blocking/test_question_to_user_enforcer.py +0 -169
- package/hooks/blocking/test_send_user_file_open_locally_blocker.py +0 -118
- package/hooks/blocking/test_sensitive_file_protector.py +0 -365
- package/hooks/blocking/test_session_edit_stage_gate.py +0 -537
- package/hooks/blocking/test_session_edit_stage_gate_staging.py +0 -64
- package/hooks/blocking/test_session_edit_stage_gate_support.py +0 -204
- package/hooks/blocking/test_session_edit_stage_gate_tracker.py +0 -116
- package/hooks/blocking/test_session_handoff_blocker.py +0 -318
- package/hooks/blocking/test_shell_substitution_blocker.py +0 -298
- package/hooks/blocking/test_unscoped_search_blocker.py +0 -102
- package/hooks/blocking/test_write_existing_file_blocker.py +0 -122
- package/hooks/blocking/tests/test_pii_prevention_blocker.py +0 -259
- package/hooks/blocking/unscoped_search_blocker.py +0 -391
- package/hooks/blocking/write_existing_file_blocker.py +0 -124
- package/hooks/hooks_constants/bot_mention_comment_blocker_constants.py +0 -19
- package/hooks/hooks_constants/cursor_cli_python_misfire_blocker_constants.py +0 -79
- package/hooks/hooks_constants/fable_spawn_gate_constants.py +0 -61
- package/hooks/hooks_constants/luna_fast_mode_gate_constants.py +0 -45
- package/hooks/hooks_constants/nas_ssh_binary_enforcer_constants.py +0 -20
- package/hooks/hooks_constants/orchestrator_refresh_reschedule_gate_constants.py +0 -57
- package/hooks/hooks_constants/send_user_file_open_locally_blocker_constants.py +0 -17
- package/hooks/hooks_constants/sensitive_file_protector_constants.py +0 -40
- package/hooks/hooks_constants/session_handoff_blocker_constants.py +0 -10
- package/hooks/hooks_constants/shell_substitution_blocker_constants.py +0 -80
- /package/.agents/skills/{_shared/pr-loop → session-continuity}/AGENTS.md +0 -0
- /package/{_shared/pr-loop → .agents/skills/session-continuity}/CLAUDE.md +0 -0
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: run-claude-dev-env
|
|
3
|
-
description: Build, install, run, and test the claude-dev-env installer. Use when asked to run claude-dev-env, install the Claude Code config into ~/.claude, drive the installer, smoke-test it against a sandbox, or run its test suite.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
`claude-dev-env` is the npm-distributed installer that copies this repo's rules, hooks, commands, and docs into `~/.claude/`, copies skills and agents into `~/.agents/`, publishes directory pointers at `~/.claude/skills` and `~/.claude/agents`, and merges its hook entries into `~/.claude/settings.json`. Its entry point is `bin/install.mjs`. Drive it with the smoke driver at `.claude/skills/run-claude-dev-env/driver.mjs`, which runs the installer against a throwaway sandbox home directory so a run never touches the real `~/.claude/` or `~/.agents/`.
|
|
7
|
-
|
|
8
|
-
All paths below are written from the `packages/claude-dev-env/` directory.
|
|
9
|
-
|
|
10
|
-
## Prerequisites
|
|
11
|
-
|
|
12
|
-
The installer needs three tools on `PATH`:
|
|
13
|
-
|
|
14
|
-
- **Node.js 18+** — the installer is an ES module (verified on Node 22.17).
|
|
15
|
-
- **Python 3.8+** — the installer bakes a Python interpreter into every hook command and aborts if it finds none. On Windows it skips the Microsoft Store stub (verified `py -3` → Python 3.13.5).
|
|
16
|
-
- **git** — the installer reads `git status` to guard against installing from a conflicted source, and sets a global git hooks path.
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
node --version
|
|
20
|
-
git --version
|
|
21
|
-
py -3 --version # POSIX: python3 --version
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
On a fresh Ubuntu container the three come from `sudo apt-get install -y nodejs python3 git`.
|
|
25
|
-
|
|
26
|
-
## Run (agent path) — the smoke driver
|
|
27
|
-
|
|
28
|
-
The driver is the handle to reach for first. It spawns the installer against a fresh temp home directory with `HOME`, `USERPROFILE`, and `GIT_CONFIG_GLOBAL` all redirected, runs the `--help` → install → `--uninstall` lifecycle, asserts the result of each step against the sandbox tree, then deletes the sandbox. It works the same on Windows and POSIX.
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
node .claude/skills/run-claude-dev-env/driver.mjs
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
Expected tail:
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
21/21 checks passed.
|
|
38
|
-
ALL CHECKS PASSED
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
The driver proves a full install lands skills under `<sandbox>/.agents/skills` with a directory pointer at `<sandbox>/.claude/skills`, lands agents the same way, lands hook scripts, rules, the `CLAUDE.md` hub, a populated `settings.json`, and a tracking manifest, and that `--uninstall` removes every manifest-tracked file. The real `~/.claude/`, `~/.agents/`, and the real global git config stay untouched. Exit code is 0 only when all checks hold.
|
|
42
|
-
|
|
43
|
-
## Run (human path) — install for real
|
|
44
|
-
|
|
45
|
-
These write into your real `~/.claude/` and set a global git hooks path. Run them only when you mean to install on this machine.
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
node bin/install.mjs --help # usage only, no side effects
|
|
49
|
-
node bin/install.mjs # install every group
|
|
50
|
-
node bin/install.mjs --only core # install one or more named groups
|
|
51
|
-
node bin/install.mjs --update # remove manifest-tracked files, then reinstall
|
|
52
|
-
node bin/install.mjs --uninstall # remove every installed file
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
Groups: `core`, `journal`, and the discovered `prompt-generator` dependency group. Run `node bin/install.mjs --help` for the live list. The published package runs the same entry point as `npx claude-dev-env`.
|
|
56
|
-
|
|
57
|
-
## Test
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
npm test
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Runs `node --test` over `bin/*.test.mjs` and `.agents/skills/**/*.test.mjs` with Node's built-in test runner — no extra dependency, no network. Expected: `# fail 0`, with the pass count growing as tests are added.
|
|
64
|
-
|
|
65
|
-
## Gotchas
|
|
66
|
-
|
|
67
|
-
- **The install target is `os.homedir()/.claude` with no override flag** (the `CLAUDE_HOME` constant in `bin/install.mjs`). To drive the installer without overwriting your real config, redirect the home directory: set `USERPROFILE` (Windows) and `HOME` (POSIX) to a temp dir. The driver does this for you.
|
|
68
|
-
- **The installer reaches outside `~/.claude/`.** It writes skills and agents under `~/.agents/`, runs `git config --global core.hooksPath ...`, which applies to every git repo on the machine, and it writes `~/.mypy.ini`. The driver isolates those writes by pointing `GIT_CONFIG_GLOBAL` at a sandbox file and redirecting the home directory.
|
|
69
|
-
- **git "dubious ownership" aborts the install.** The source-conflict guard runs `git status`; when the checkout sits on a path git distrusts (a UNC network share owned by another account), git exits 128 with a dubious-ownership message that the installer rethrows. The driver seeds its sandbox git config with `safe.directory = *` so the guard runs. For a real install on such a checkout, add the exception: `git config --global --add safe.directory '<repo-path>'`.
|
|
70
|
-
- **`npm install` at the repo root fails on a Windows network-share checkout.** npm symlinks the workspace package into root `node_modules` and the share rejects the symlink (`UNKNOWN ... symlink`, errno -4094). The package's own `node_modules` already carries its single dependency, so the driver and tests run without it. The installer also keeps working when `@jl-cmd/prompt-generator` cannot resolve — it skips that group with a warning (`discoverDependencyGroups` in `bin/install.mjs`).
|
|
71
|
-
- **Microsoft Store Python is rejected on Windows.** The installer skips any interpreter under a `WindowsApps` directory because that stub cannot run as a hook subprocess (`isWindowsStorePythonStub` in `bin/install.mjs`). Install Python from python.org if detection fails.
|
|
72
|
-
|
|
73
|
-
## Troubleshooting
|
|
74
|
-
|
|
75
|
-
- **`ERROR: No usable Python 3 found`**: no `py -3` / `python3` / `python` resolves to a non-Store Python 3. Install Python 3.8+ from python.org and reopen the shell.
|
|
76
|
-
- **`fatal: detected dubious ownership in repository`**: add the `safe.directory` exception shown above, then rerun.
|
|
77
|
-
- **`ERROR: settings.json is malformed JSON`**: `~/.claude/settings.json` has a syntax error; fix the JSON and rerun.
|
|
78
|
-
|
|
79
|
-
## Files
|
|
80
|
-
|
|
81
|
-
- `SKILL.md` — this page: the agent path (the driver), the human install path, the test command, gotchas, and troubleshooting.
|
|
82
|
-
- `driver.mjs` — the smoke harness that drives `bin/install.mjs` against a sandbox home directory. Run it; you do not need to read it. It sits beside this file at `.claude/skills/run-claude-dev-env/driver.mjs`.
|
|
83
|
-
|
|
84
|
-
The `/run` skill auto-discovers this skill when asked to run, install, or test `claude-dev-env`.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@../AGENTS.md
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: session-log
|
|
3
|
-
description: >-
|
|
4
|
-
Logs a session report as an HTML page, tracks vault context, extracts
|
|
5
|
-
decisions, and outputs a /rename command. Use for /session-log, 'journal this
|
|
6
|
-
session', 'log this work', 'session report', 'summarize/log/record this
|
|
7
|
-
session', 'save session', 'capture session', or 'document what we did'.
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Session Log
|
|
11
|
-
|
|
12
|
-
## Overview
|
|
13
|
-
|
|
14
|
-
Session-log composes the HTML report and publishes it directly with the `Artifact` tool. The skill owns the whole flow: where the file lives in the vault, what number it gets, the frontmatter metadata contract, HTML composition and publishing, post-write vault tracking, decision extraction, project-folder hygiene, and the closing `/rename` hand-off.
|
|
15
|
-
|
|
16
|
-
**Announce at start:** "I'm logging this session."
|
|
17
|
-
|
|
18
|
-
## Why this report is designed fresh per session
|
|
19
|
-
|
|
20
|
-
Sessions come in many shapes — convergence loops, feature builds, research dives, incidents, refactors, decisions. A single h2-emoji-list template forces every session into the same form regardless of fit, and the artifact reads as a process log rather than a substance log. Load the `artifact-design` skill before composing any page content — it calibrates the design investment and shape to the session's character: a feature build reads naturally as a PR writeup, an incident or convergence loop as a timeline, a status update as a progress summary, a plan or decision as a decision record, an exploration as a multi-approach walkthrough.
|
|
21
|
-
|
|
22
|
-
## Gotchas
|
|
23
|
-
|
|
24
|
-
- **Load the `artifact-design` skill before writing page content.** The `Artifact` tool needs this step first — it is not optional polish.
|
|
25
|
-
- **The `Artifact` tool wraps the file in a document skeleton at publish time.** It adds `<!doctype html>…<head>…</head><body>` around whatever the file holds — write page content only (a `<title>`, a `<style>` block, and the body markup). Do not include `<!DOCTYPE>`, `<html>`, `<head>`, or `<body>` tags in the file itself.
|
|
26
|
-
- **The `Artifact` tool redeploys to the same URL only within the current run.** Editing the session's HTML file in a later step of this same skill run and calling `Artifact` again does not mint a new URL — it updates the same published page in place. A fresh session has no memory of an artifact's URL from an earlier run, so republishing a session report written in a prior session always mints a new URL (there is no other way to target the old one without the user supplying it).
|
|
27
|
-
- **Vault paths sit outside `.claude/`.** Headless vault paths (e.g., `$OBSIDIAN_VAULT_PATH`) resolve outside the project tree. Session reports use HTML regardless of vault location — the Artifact tool needs a written file to publish.
|
|
28
|
-
- **Sessions describe current state by convention.** The state_description_blocker hook does not scan .html. Apply `~/.claude/rules/asd-ste100-language.md` for user-facing word choice and sentence style, and keep the session report current and self-contained.
|
|
29
|
-
- **`write_existing_file_blocker` rejects Write on existing paths.** Use Write only when creating a fresh session report; use Edit for the vault-context append in step 3.
|
|
30
|
-
- **Obsidian frontmatter index is HTML-blind.** Obsidian's native YAML-frontmatter parser reads only `.md` files. HTML files do not appear in Obsidian's frontmatter index. Search by content still works; search by `type: session-report` does not.
|
|
31
|
-
|
|
32
|
-
## Backend Detection (run before Step 1)
|
|
33
|
-
|
|
34
|
-
Determine which storage backend is available for the write path. First success wins.
|
|
35
|
-
|
|
36
|
-
1. **Headless vault** — Bash `ob --version` to verify the obsidian-headless CLI is installed. Check `OBSIDIAN_VAULT_PATH` env var or `~/.claude/vault/` for a vault directory. When the CLI check succeeds AND at least one of those paths resolves to a vault directory, set `backend = "headless"`.
|
|
37
|
-
2. **Local vault** — fall back to `~/.claude/vault/`. Create `~/.claude/vault/sessions` via `mkdir -p` if missing. Set `backend = "local"`.
|
|
38
|
-
|
|
39
|
-
session-log writes with Write/Edit and publishes with Artifact, so it uses headless or local filesystem paths only. `/session-tidy` Phase 0 reuses this headless → local order and adds an Obsidian MCP branch for vault maintenance.
|
|
40
|
-
|
|
41
|
-
**Session-number detection:** Bash `ls` the project's session folder, parse filenames matching `[N]. *.html` or `[N]. *.md`. Highest N + 1. New project → start at 1.
|
|
42
|
-
|
|
43
|
-
**Output paths:**
|
|
44
|
-
- headless: `$OBSIDIAN_VAULT_PATH/sessions/[Project]/[N]. [Title].html` (falls back to `~/.claude/vault/` when the env var is unset)
|
|
45
|
-
- local: `~/.claude/vault/sessions/[Project]/[N]. [Title].html`
|
|
46
|
-
|
|
47
|
-
Announce the backend: "Using headless vault at [path]." or "Using local vault at ~/.claude/vault/. Install obsidian-headless and set the `OBSIDIAN_VAULT_PATH` environment variable (PowerShell: `$env:OBSIDIAN_VAULT_PATH = '<path>'`; POSIX shells: `export OBSIDIAN_VAULT_PATH=<path>`) to enable sync."
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## Step 1: Compose Session Metadata
|
|
52
|
-
|
|
53
|
-
Review the conversation to identify the session's primary outcome and the small set of facts a cold reader needs.
|
|
54
|
-
|
|
55
|
-
Resolve the metadata used by the frontmatter and the vault path:
|
|
56
|
-
|
|
57
|
-
- **Project name:** infer from conversation context
|
|
58
|
-
- **Session number:** from backend detection above
|
|
59
|
-
- **Session ID:** the session ID of the agent authoring this log, read from the `CLAUDE_CODE_SESSION_ID` environment variable (PowerShell: `$env:CLAUDE_CODE_SESSION_ID`). This UUID names the authoring agent's own transcript file (`<session-id>.jsonl`), so the saved report points back to the exact session that produced it. When the variable is unset, use the literal `unknown`.
|
|
60
|
-
- **Date:** today's date
|
|
61
|
-
- **Title:** a 2–5 word summary of the session's primary outcome. Examples: "Amazon Auth Migration", "Source Loading Fix", "PR 475 Convergence". Avoid generic titles like "Bug Fixes".
|
|
62
|
-
|
|
63
|
-
The frontmatter contract every session report carries (inside an HTML comment, as the first child of `<body>`) is the metadata block in [`templates/frontmatter.md`](templates/frontmatter.md).
|
|
64
|
-
|
|
65
|
-
Every session report carries this metadata block verbatim so vault search and the tidy step in step 5 work. **Initial values for Step 2's Write:** substitute concrete values for every placeholder — for `session_id`, write the value read from `CLAUDE_CODE_SESSION_ID` in step 1 (or `unknown` when the variable is unset); for `vault_context_retrieved`, write the literal value `false` (the safe default before Step 3's vault-MCP-tool scan completes). Step 3 then Edits `vault_context_retrieved` to `true` if any of the three vault MCP tools fired this session.
|
|
66
|
-
|
|
67
|
-
## Step 2: Compose and Publish the HTML via the Artifact Tool
|
|
68
|
-
|
|
69
|
-
Load the `artifact-design` skill before writing any content. Design the artifact for **this session's character** — a feature build reads naturally as a PR writeup, an incident or convergence loop as a timeline, a status update as a progress summary, a plan or decision as a decision record, an exploration as a multi-approach walkthrough. The report must answer for a cold reader, from the section headers alone, three questions: *what shipped*, *why it matters*, *what impact it had*. Process narration (commit-by-commit walks, agent gotchas, retry counts) belongs at the end, not in the opening sections.
|
|
70
|
-
|
|
71
|
-
**Required as the first content line:** the frontmatter HTML comment from step 1.
|
|
72
|
-
|
|
73
|
-
**Required somewhere in the content:** a `<title>` element naming the session — it names the browser tab and the artifact gallery entry.
|
|
74
|
-
|
|
75
|
-
**Required as the first content section (after the frontmatter comment):** an opening "What this session shipped" paragraph + bullets — written so a reader with zero prior context understands the outcome. For continuation sessions (where the substantive work landed in a prior session), recap the parent session's outcome briefly so the report stands alone.
|
|
76
|
-
|
|
77
|
-
**Required: self-contained, responsive, theme-aware HTML.** Inline all CSS in a `<style>` block and all JS inline; embed any images as data URIs — the `Artifact` tool's content security policy blocks external CDN scripts, stylesheets, fonts, and network requests. Use relative units so the layout holds at any width, and support both light and dark via `prefers-color-scheme` (or `:root[data-theme]` overrides).
|
|
78
|
-
|
|
79
|
-
**No document wrapper tags.** The `Artifact` tool wraps the file content in a `<!doctype html>…<head>…</head><body>` skeleton at publish time — write the `<title>`, `<style>`, and body markup directly, with no `<!DOCTYPE>`, `<html>`, `<head>`, or `<body>` tags of your own.
|
|
80
|
-
|
|
81
|
-
Beyond those requirements, design the shape that fits the session — the `artifact-design` skill's guidance covers typography, palette, and layout choices.
|
|
82
|
-
|
|
83
|
-
**Write the file** via the Write tool to the vault path. Create the project directory via `mkdir -p` if it does not exist.
|
|
84
|
-
|
|
85
|
-
**Publish the file** by calling the `Artifact` tool with `file_path` set to the vault path just written, `favicon` set to the fixed session-log favicon `📓` — this favicon stays the same across every session-log report so the series reads as one consistent collection; never swap it per session — and `description` set to a one-sentence subtitle summarizing the session. Capture the returned URL: it is the canonical URL for this session report, and it stays the same across every later `Artifact` call on this same `file_path` within the current run (steps 3 and 5 redeploy to it rather than minting a new one).
|
|
86
|
-
|
|
87
|
-
**If the Write fails**, output the HTML content in the conversation so the user can copy it manually. Before emitting the HTML to chat, resolve the `vault_context_retrieved` placeholder to `true` or `false` based on the same vault-MCP-tool scan that Step 3 would have run, and include the matching vault-context `<li>` line (Retrieved or Not retrieved) so the emitted HTML is a valid copy-paste artifact with complete frontmatter. Skip Step 3 and continue at step 4.
|
|
88
|
-
|
|
89
|
-
## Step 3: Vault Context Tracking
|
|
90
|
-
|
|
91
|
-
This step runs automatically after step 2.
|
|
92
|
-
|
|
93
|
-
Review the conversation history for any use of these vault MCP tools (look only at tool calls the session made before /session-log itself ran):
|
|
94
|
-
|
|
95
|
-
- `mcp__obsidian__search_notes`
|
|
96
|
-
- `mcp__obsidian__read_note`
|
|
97
|
-
- `mcp__obsidian__read_multiple_notes`
|
|
98
|
-
|
|
99
|
-
Edit the vault HTML via two Edit calls:
|
|
100
|
-
|
|
101
|
-
1. Set the frontmatter `vault_context_retrieved` field to `true` when any of the three tools fired this session, `false` otherwise.
|
|
102
|
-
2. Append one fact — vault-context status — into whatever section the report designer placed for notes / metadata / references. If the report has no such section, append a fresh `<h2>Notes</h2>` block (in [`templates/frontmatter.md`](templates/frontmatter.md)) at the end of the content.
|
|
103
|
-
|
|
104
|
-
If the report already has a notes / references section, use Edit to insert one matching child element at the end of that section. The element shape mirrors whatever the section already uses: an extra `<li>` before the closing `</ul>` for a list, an extra `<dt>Vault context</dt><dd>…</dd>` pair before the closing `</dl>` for a description list, an extra `<p><strong>Vault context:</strong> …</p>` before the section's closing tag for a paragraph-based section. Pick the form that matches the surrounding markup.
|
|
105
|
-
|
|
106
|
-
After both Edits land, call the `Artifact` tool again with the same `file_path` and the same `favicon` used in step 2 to redeploy the updated content. This updates the URL captured in step 2 in place; no new URL is minted.
|
|
107
|
-
|
|
108
|
-
## Step 4: Decision Extraction
|
|
109
|
-
|
|
110
|
-
Scan the conversation for decisions, gotchas, or architectural choices that were not already saved via `/remember`. For each one found, ask the user via `AskUserQuestion`:
|
|
111
|
-
|
|
112
|
-
> "I noticed this decision: [summary]. Save it to the vault via `/remember`?"
|
|
113
|
-
|
|
114
|
-
Only invoke `/remember` for decisions the user confirms; `/remember` writes the decision as a vault note. If no unrecorded decisions are found, skip silently.
|
|
115
|
-
|
|
116
|
-
## Step 5: Session Tidy (Project Scope)
|
|
117
|
-
|
|
118
|
-
Scope: the current project's session folder only.
|
|
119
|
-
|
|
120
|
-
1. **List files** in the project's vault session folder via Bash `ls`.
|
|
121
|
-
2. **Audit** each `.html` and `.md` session file using the audit rules in `session-tidy` Phase 1 (naming, frontmatter completeness, type, status coherence, orphaned next-steps, categorization). session-tidy SKILL.md is the single home for those rules.
|
|
122
|
-
3. **Auto-fix minor HTML metadata issues** via Edit (this step's write path is HTML-oriented):
|
|
123
|
-
- Missing frontmatter fields that can be inferred (e.g., `blocked: false` when status is `completed`; `vault_context_retrieved: false` when the field is absent)
|
|
124
|
-
- `type` field set to a wrong value (correct to `session-report`)
|
|
125
|
-
|
|
126
|
-
When the Edit touches the session report created in this run, call `Artifact` again with the same `file_path` and `favicon` from step 2 to redeploy — the URL captured in step 2 stays unchanged. When the Edit touches an older HTML session report published in a prior run, call `Artifact` on that `file_path` with no `url` argument, since this skill keeps no record of that file's earlier URL — this publishes that report at a new URL. Surface a `Session [N] republished at a new URL: <url>` line so the user can update any prior shares.
|
|
127
|
-
4. **Report issues that need user input:**
|
|
128
|
-
- Files with wrong naming convention (propose new name)
|
|
129
|
-
- Stale statuses (propose update to `completed` or ask)
|
|
130
|
-
- Contradictory status/blocked combos
|
|
131
|
-
|
|
132
|
-
If no issues are found, skip silently. Do not report "all clean."
|
|
133
|
-
5. **Rollup check:** if the project has 5+ sessions and no `Summary.html` or `Summary.md`, mention it:
|
|
134
|
-
> "This project has [N] sessions and no summary. Run `/session-tidy` for a project rollup."
|
|
135
|
-
|
|
136
|
-
## Step 6: Finalize
|
|
137
|
-
|
|
138
|
-
Copy a `/rename` command to the user's clipboard via PowerShell:
|
|
139
|
-
|
|
140
|
-
```
|
|
141
|
-
pwsh -NoProfile -Command "Set-Clipboard '/rename [Project] - [Primary Outcome]'"
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
Then tell the user:
|
|
145
|
-
|
|
146
|
-
> "Copied `/rename [Project] - [Primary Outcome]` to your clipboard. Paste it to rename this session."
|
|
147
|
-
|
|
148
|
-
The primary outcome comes from the session title resolved in step 1.
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
## Run-and-report checklist
|
|
153
|
-
|
|
154
|
-
- [ ] Backend detected and announced
|
|
155
|
-
- [ ] Session number resolved from `[N]. *.html` and `[N]. *.md` files (highest N + 1)
|
|
156
|
-
- [ ] `artifact-design` skill loaded before composing page content
|
|
157
|
-
- [ ] HTML composed for this session's character (no document wrapper tags; self-contained, responsive, theme-aware)
|
|
158
|
-
- [ ] Frontmatter HTML comment present as the first content line
|
|
159
|
-
- [ ] `session_id` frontmatter field set from `CLAUDE_CODE_SESSION_ID` (the authoring agent's own session), or `unknown` when the variable is unset
|
|
160
|
-
- [ ] Opening section answers "what shipped / why / impact" for a cold reader
|
|
161
|
-
- [ ] Published via the `Artifact` tool with the fixed favicon `📓`; URL captured (or HTML emitted to chat when step 2 Write failed)
|
|
162
|
-
- [ ] Vault-context line appended via Edit (step 3); `Artifact` redeployed on the same URL
|
|
163
|
-
- [ ] Decision extraction surfaced any unrecorded items
|
|
164
|
-
- [ ] Session tidy ran session-tidy Phase 1 audit rules on the project folder (or stayed silent when clean)
|
|
165
|
-
- [ ] `/rename` command copied to clipboard via `pwsh Set-Clipboard`
|
|
166
|
-
|
|
167
|
-
## Folder map
|
|
168
|
-
|
|
169
|
-
- `SKILL.md` — this hub.
|
|
170
|
-
- `templates/frontmatter.md` — the report frontmatter contract and the Step 3 notes block.
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# Session-log template blocks
|
|
2
|
-
|
|
3
|
-
The two verbatim HTML blocks the `session-log` skill drops into every session
|
|
4
|
-
page. The hub ([`../SKILL.md`](../SKILL.md)) points here from Step 1 / Step 2
|
|
5
|
-
(frontmatter) and Step 3 (notes).
|
|
6
|
-
|
|
7
|
-
## Frontmatter contract
|
|
8
|
-
|
|
9
|
-
The first child of `<body>`, inside an HTML comment. Substitute a concrete value
|
|
10
|
-
for every placeholder; `vault_context_retrieved` starts `false` and Step 3 sets
|
|
11
|
-
it.
|
|
12
|
-
|
|
13
|
-
```html
|
|
14
|
-
<!--
|
|
15
|
-
type: session-report
|
|
16
|
-
project: [name]
|
|
17
|
-
session: [N]
|
|
18
|
-
session_id: [uuid]
|
|
19
|
-
date: [YYYY-MM-DD]
|
|
20
|
-
status: completed|in-progress|blocked
|
|
21
|
-
blocked: true|false
|
|
22
|
-
vault_context_retrieved: true|false
|
|
23
|
-
tags: [session, [project-tag], [topic-tags]]
|
|
24
|
-
-->
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Notes block (Step 3)
|
|
28
|
-
|
|
29
|
-
Append one vault-context line. When the page already carries a notes /
|
|
30
|
-
references section, add a matching child element to that section; use the block
|
|
31
|
-
below only when the page has no such section.
|
|
32
|
-
|
|
33
|
-
```html
|
|
34
|
-
<h2>Notes</h2>
|
|
35
|
-
<ul>
|
|
36
|
-
<!-- Pick exactly one of the two forms based on whether vault MCP tools fired this session: -->
|
|
37
|
-
<li><strong>Vault context:</strong> Retrieved ([list of note paths])</li>
|
|
38
|
-
<li><strong>Vault context:</strong> Not retrieved</li>
|
|
39
|
-
</ul>
|
|
40
|
-
```
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@../AGENTS.md
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: session-tidy
|
|
3
|
-
description: Audit, clean, and consolidate session logs in the Obsidian vault. Fixes format drift, resolves orphaned next-steps, updates stale statuses, and generates project rollup summaries. Use when session logs feel cluttered or before starting a new project milestone. Triggers on '/session-tidy', 'tidy sessions', 'clean up session logs', 'session audit'.
|
|
4
|
-
disable-model-invocation: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Session Tidy: Session Log Consolidation
|
|
8
|
-
|
|
9
|
-
## Overview
|
|
10
|
-
|
|
11
|
-
Audit and consolidate session logs in the Obsidian vault (`sessions/[Project]/`) by enforcing the tidy audit rules, categorizing uncategorized files into project subfolders, resolving orphaned next-steps, updating stale statuses, and generating project rollup summaries.
|
|
12
|
-
|
|
13
|
-
**Announce at start:** "Running session log consolidation."
|
|
14
|
-
|
|
15
|
-
**Context:** Standalone maintenance utility. Run periodically, after completing a project milestone, or when starting fresh on a project. Companion to `/dream` (memory consolidation) and `/session-log` (session creation).
|
|
16
|
-
|
|
17
|
-
## The Format Contract
|
|
18
|
-
|
|
19
|
-
**Write-side HTML contract:** `/session-log` owns how new session reports are written — vault path, HTML frontmatter comment block, Artifact publish, and body design. Read `journal:session-log` SKILL.md for that contract. The markdown field shapes below describe files tidy may read; they are not the write path for new session reports.
|
|
20
|
-
|
|
21
|
-
**What tidy audits:** Project folders under `sessions/` may hold `.html` session reports and `.md` session files. Audit every session file present. The rules in this skill are the single home for tidy audit criteria.
|
|
22
|
-
|
|
23
|
-
**Directory structure:** `sessions/[Project]/`
|
|
24
|
-
- Session files match `[N]. [Title].html` or `[N]. [Title].md`, where Title is a 2-5 word summary of the primary outcome (e.g., `3. Amazon Auth Migration.html`)
|
|
25
|
-
- Summary files are `Summary.html` or `Summary.md` in the same project folder
|
|
26
|
-
- No parenthetical suffixes like `(Wrap-Up)`
|
|
27
|
-
- Files missing a title (e.g., `Session 1.md` or `1.html`) should be flagged for renaming — read the content to derive a title
|
|
28
|
-
|
|
29
|
-
**Shared metadata fields (required on every session file):**
|
|
30
|
-
`type`, `project`, `session`, `date`, `status`, `blocked`, `tags`
|
|
31
|
-
|
|
32
|
-
**HTML session reports** — when tidy reads a `.html` session file, metadata sits in an HTML comment block at the start of the file content. The write-side comment shape lives in session-log SKILL.md. HTML reports also carry `session_id` and `vault_context_retrieved`.
|
|
33
|
-
|
|
34
|
-
**Markdown session files** — when tidy reads a `.md` session file, metadata sits in YAML frontmatter:
|
|
35
|
-
|
|
36
|
-
```yaml
|
|
37
|
-
---
|
|
38
|
-
type: session-report
|
|
39
|
-
project: "[name]"
|
|
40
|
-
session: [N]
|
|
41
|
-
date: "[YYYY-MM-DD]"
|
|
42
|
-
status: "completed" | "in-progress" | "blocked"
|
|
43
|
-
blocked: true | false
|
|
44
|
-
tags: ["session", "[project-tag]"]
|
|
45
|
-
---
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
**Content structure for markdown session files:**
|
|
49
|
-
- Section headers (`###`) use one emoji + outcome-oriented title
|
|
50
|
-
- Valid emojis: ✅ (done), 🚫 (blocked), ⚠️ (note), 🔧 (in-progress), 📋 (queued)
|
|
51
|
-
- Explanatory paragraphs under each header, not just bullets
|
|
52
|
-
- Tables for 3+ rows of structured data
|
|
53
|
-
- No play-by-play or process narration
|
|
54
|
-
|
|
55
|
-
**Content structure for HTML session reports:** Body shape is session-specific (session-log designs per session). Tidy does not enforce a fixed HTML section template. Audit naming, metadata completeness, type, status coherence, orphaned next-steps text in the body, and categorization.
|
|
56
|
-
|
|
57
|
-
## The Process
|
|
58
|
-
|
|
59
|
-
### Phase 0: Preflight
|
|
60
|
-
|
|
61
|
-
Determine which storage backend is available. First success wins:
|
|
62
|
-
|
|
63
|
-
1. **Headless vault** — same check as Backend Detection in `journal:session-log` SKILL.md: Bash `ob --version`, then `OBSIDIAN_VAULT_PATH` or `~/.claude/vault/`. When the CLI check succeeds and a vault directory resolves, set `backend = "headless"`.
|
|
64
|
-
|
|
65
|
-
2. **Obsidian MCP** — call `mcp__obsidian__list_directory` with `path="sessions"`. If it succeeds, set `backend = "obsidian"`.
|
|
66
|
-
|
|
67
|
-
3. **Local vault** — same fallback as session-log Backend Detection: `~/.claude/vault/`. Create `~/.claude/vault/sessions` via `mkdir -p` if missing. Set `backend = "local"`.
|
|
68
|
-
|
|
69
|
-
**Capability notes by backend:**
|
|
70
|
-
- **obsidian:** list, read, move, frontmatter update, and write via MCP tools (`list_directory`, `read_note`, `move_note`, `update_frontmatter`, `write_note`). For `.html` files, metadata edits use Read + Edit of the HTML comment block when MCP frontmatter tools do not apply.
|
|
71
|
-
- **headless / local:** Move/rename via `mv` (Bash). Metadata update via Read + Edit/Write. Search via Bash `ls` + Grep.
|
|
72
|
-
|
|
73
|
-
### Phase 1: Audit
|
|
74
|
-
|
|
75
|
-
List project subdirectories in `sessions/` (MCP `list_directory` when backend is obsidian; Bash `ls` when headless or local). For each project folder, read its files. Also check for any files sitting directly in `sessions/` (uncategorized). Audit both `.html` and `.md` session files. For each file, check:
|
|
76
|
-
|
|
77
|
-
1. **Naming convention?** Must match `[N]. [Title].html` or `[N]. [Title].md` where N is the session number and Title is a 2-5 word outcome summary. Flag bracket prefixes, date-only names, parenthetical suffixes, or patterns missing a title such as `Session 1.md` or `1.html`.
|
|
78
|
-
2. **Frontmatter complete?** All shared required fields present: `type`, `project`, `session`, `date`, `status`, `blocked`, `tags`. For `.html` session reports, also require `session_id` and `vault_context_retrieved`.
|
|
79
|
-
3. **Type correct?** Must be `session-report`. Flag other types.
|
|
80
|
-
4. **Status coherent?** `status: completed` with `blocked: true` is contradictory. `status: in-progress` or `status: blocked` on sessions older than 7 days is likely stale.
|
|
81
|
-
5. **Orphaned next-steps?** Scan content for sections containing "Next", "Queued", "Session N+1", "TODO", or clipboard emoji sections. Cross-reference against subsequent sessions for the same project to determine if the items were addressed.
|
|
82
|
-
6. **Categorized?** Files sitting directly in `sessions/` (not in a project subfolder) are uncategorized. Infer the project name from the filename pattern (e.g., `BudgetBridge Session 3.md` belongs in `sessions/BudgetBridge/`) or from the frontmatter `project` field. Flag for a move into the correct subfolder.
|
|
83
|
-
|
|
84
|
-
### Phase 2: Propose Changes
|
|
85
|
-
|
|
86
|
-
Present a structured report:
|
|
87
|
-
|
|
88
|
-
**Format violations** -- files with wrong naming, missing/wrong frontmatter fields, wrong type
|
|
89
|
-
**Stale statuses** -- in-progress or blocked sessions older than 7 days, contradictory status+blocked combos
|
|
90
|
-
**Orphaned next-steps** -- queued items from session N with no evidence of resolution in session N+1 or later. For each item, state whether it was:
|
|
91
|
-
- **Resolved:** found evidence in a later session
|
|
92
|
-
- **Orphaned:** no later session addresses it
|
|
93
|
-
- **Unknown:** later sessions exist but don't clearly address or skip the item
|
|
94
|
-
**Uncategorized files** -- files in `sessions/` root that should live in a project subfolder
|
|
95
|
-
**Rollup candidates** -- projects with 3+ sessions that have no `Summary.html` or `Summary.md`
|
|
96
|
-
**Proposed actions** -- numbered list of specific changes
|
|
97
|
-
|
|
98
|
-
Do NOT execute any changes yet. Wait for user approval.
|
|
99
|
-
|
|
100
|
-
### Phase 3: Execute
|
|
101
|
-
|
|
102
|
-
After user approves (all or selected items):
|
|
103
|
-
|
|
104
|
-
1. **Rename** non-conforming files via `mcp__obsidian__move_note` (obsidian) or `mv` (headless/local). Keep the file's extension (`.html` or `.md`).
|
|
105
|
-
2. **Fix frontmatter:**
|
|
106
|
-
- `.md` files: `mcp__obsidian__update_frontmatter` when backend is obsidian; Read + Edit/Write of YAML frontmatter when headless or local. Set correct type; add missing shared fields.
|
|
107
|
-
- `.html` files: Read + Edit of the HTML comment block fields (shape in session-log SKILL.md). Set correct type; add missing shared fields plus `session_id` and `vault_context_retrieved` when absent.
|
|
108
|
-
3. **Update stale statuses** -- change old in-progress/blocked to completed (or ask user for correct status).
|
|
109
|
-
4. **Clean orphaned next-steps** -- for confirmed orphaned items, either:
|
|
110
|
-
- Remove the section if all items are orphaned and the session is old
|
|
111
|
-
- Add a strikethrough or "(not pursued)" annotation if some items remain relevant
|
|
112
|
-
- Leave unchanged if user declines
|
|
113
|
-
5. **Generate project rollups** -- for each qualifying project, write a summary note via `mcp__obsidian__write_note` (obsidian) or Write (headless/local):
|
|
114
|
-
- **Path:** `sessions/[Project]/Summary.md`
|
|
115
|
-
- **Frontmatter:** `{"type": "project-summary", "project": "[name]", "sessions": [count], "date_range": "[first] to [last]", "tags": ["summary", "[project-tag]"]}`
|
|
116
|
-
- **Content:** Use this template:
|
|
117
|
-
|
|
118
|
-
```markdown
|
|
119
|
-
## [Project] -- Project Summary
|
|
120
|
-
|
|
121
|
-
### Timeline
|
|
122
|
-
|
|
123
|
-
| # | Title | Date | Status |
|
|
124
|
-
|---|-------|------|--------|
|
|
125
|
-
| 1 | [title from filename] | [date] | ✅/🔧/🚫 |
|
|
126
|
-
|
|
127
|
-
### Key Outcomes
|
|
128
|
-
- **Session [N]:** [one-line summary of primary outcome]
|
|
129
|
-
|
|
130
|
-
### Current Status
|
|
131
|
-
[One paragraph: where the project stands now, what's active, what's done]
|
|
132
|
-
|
|
133
|
-
### Carried Forward
|
|
134
|
-
- [ ] [unresolved item from latest session]
|
|
135
|
-
```
|
|
136
|
-
6. **Categorize uncategorized files** -- move files from `sessions/` root into the correct project subfolder via `mcp__obsidian__move_note` or `mv`. When moving, rename to match the `[N]. [Title].html` or `[N]. [Title].md` convention for that file's extension (e.g., `sessions/BudgetBridge Session 3.md` becomes `sessions/BudgetBridge/3. [Title derived from content].md`).
|
|
137
|
-
|
|
138
|
-
### Phase 4: Verify
|
|
139
|
-
|
|
140
|
-
After execution, re-read the vault and confirm:
|
|
141
|
-
- Every session file lives in a project subfolder under `sessions/[Project]/`
|
|
142
|
-
- Every file has valid frontmatter with all required fields for its shape
|
|
143
|
-
- Every filename matches the naming convention (`[N]. [Title].html`, `[N]. [Title].md`, `Summary.html`, or `Summary.md`)
|
|
144
|
-
- No contradictory status/blocked combos
|
|
145
|
-
- All orphaned next-steps resolved or annotated
|
|
146
|
-
- Rollup summaries exist for qualifying projects
|
|
147
|
-
|
|
148
|
-
Report the results: files renamed, frontmatter fixed, statuses updated, next-steps resolved, rollups generated.
|
|
149
|
-
|
|
150
|
-
If Phase 1 finds zero issues across all checks, skip Phases 2-4 and report: "All session logs are tidy. Nothing to do."
|
|
151
|
-
|
|
152
|
-
## Output Format
|
|
153
|
-
|
|
154
|
-
Phase 2 report structure:
|
|
155
|
-
|
|
156
|
-
```
|
|
157
|
-
## Session Tidy Report
|
|
158
|
-
|
|
159
|
-
### Format Violations (X found)
|
|
160
|
-
- [file] -- [issue]
|
|
161
|
-
|
|
162
|
-
### Stale Statuses (X found)
|
|
163
|
-
- [file] -- [status] since [date] ([age] days ago)
|
|
164
|
-
|
|
165
|
-
### Uncategorized Files (X found)
|
|
166
|
-
- [file] -- move to sessions/[Project]/[new filename]
|
|
167
|
-
|
|
168
|
-
### Orphaned Next-Steps (X found)
|
|
169
|
-
- [file] -- "[item text]" -- [resolved/orphaned/unknown]
|
|
170
|
-
|
|
171
|
-
### Rollup Candidates (X projects)
|
|
172
|
-
- [project] -- [N] sessions, [date range], no summary exists
|
|
173
|
-
|
|
174
|
-
### Proposed Actions
|
|
175
|
-
1. [action] -- [file] -- [reason]
|
|
176
|
-
2. ...
|
|
177
|
-
|
|
178
|
-
Approve all, select by number, or cancel?
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
## After Completion
|
|
182
|
-
|
|
183
|
-
Report summary: files renamed, frontmatter fixes, status updates, next-steps cleaned, rollups generated.
|
|
184
|
-
|
|
185
|
-
## Best Practices
|
|
186
|
-
|
|
187
|
-
- Run after finishing a multi-session project
|
|
188
|
-
- Run before starting a new milestone on an existing project (clears stale context)
|
|
189
|
-
- Cross-reference next-steps manually when the skill flags "unknown" -- it cannot determine intent from content alone
|
|
190
|
-
- The 7-day staleness threshold is a heuristic -- adjust based on how frequently you session-log
|
|
191
|
-
- Rollup summaries are not a replacement for individual session logs -- they are a navigational aid
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@../AGENTS.md
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
# Delegation Map
|
|
2
|
-
|
|
3
|
-
How skill-builder delegates authoring to the `skill-writer-agent` agent.
|
|
4
|
-
|
|
5
|
-
## Delegating to skill-writer-agent (Step 4)
|
|
6
|
-
|
|
7
|
-
skill-builder orchestrates; the `skill-writer-agent` agent authors the SKILL.md and companion files. The caller spawns it with `Agent(subagent_type="skill-writer-agent", ...)`. The handoff must be structured so the agent has everything it needs.
|
|
8
|
-
|
|
9
|
-
### New skill handoff
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
Create a skill with these parameters:
|
|
13
|
-
|
|
14
|
-
**Skill type:** [one of 9 types from skill-types.md]
|
|
15
|
-
**Folder structure:** [directories to create: reference/, scripts/, etc.]
|
|
16
|
-
**What it does:** [one-sentence capability — single job]
|
|
17
|
-
**Domain context:** [what Claude needs to know that it doesn't already]
|
|
18
|
-
**Initial gotchas:** [failure patterns to document from the start]
|
|
19
|
-
**Degree of freedom:** [high | medium | low — with reasoning]
|
|
20
|
-
**Constraints:** [non-negotiables]
|
|
21
|
-
**Composition plan:** [related skills; sub-skills with when/produces/missing; leaf vs orchestrator]
|
|
22
|
-
**Description (exact frontmatter string):** [capability stem. Triggers: phrase, phrase, ...]
|
|
23
|
-
— Trigger catalog only per description-field.md. No story prose.
|
|
24
|
-
**Deterministic inventory:** [each process step → class → home path → paired test]
|
|
25
|
-
— Per deterministic-elements.md. Deterministic steps must be code/artifacts, not prose-only.
|
|
26
|
-
|
|
27
|
-
Produce:
|
|
28
|
-
1. SKILL.md with hub layout (principle, gotchas, when-applies, process, file index, folder map)
|
|
29
|
-
2. Frontmatter description set to the exact trigger-catalog string above
|
|
30
|
-
3. Sub-skills table in body when composition plan lists peer skills
|
|
31
|
-
4. Companion files as needed (reference docs, workflow steps, templates, scripts)
|
|
32
|
-
5. Scripts/workflows for every deterministic inventory row; body only points and handles exit codes
|
|
33
|
-
6. Skill scripts follow CODE_RULES (`*_constants/`, types, specific errors, paired tests)
|
|
34
|
-
7. Every file under 500 lines; TOC on files over 100 lines
|
|
35
|
-
8. File index listing every file and its purpose
|
|
36
|
-
9. No reimplementation of steps owned by named sub-skills
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Refine skill handoff
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
Refine this existing skill:
|
|
43
|
-
|
|
44
|
-
**Current SKILL.md:** [reference or paste]
|
|
45
|
-
**What was observed:** [specific failures from Claude B usage]
|
|
46
|
-
**What to change:** [specific instructions to add/remove/modify]
|
|
47
|
-
**New gotchas to add:** [failure patterns discovered]
|
|
48
|
-
**What to preserve:** [working content — do not touch]
|
|
49
|
-
**Description rewrite (if activation issue):** [exact new trigger-catalog string]
|
|
50
|
-
**Composition change (if modularity issue):** [sub-skills to add/invoke or split plan]
|
|
51
|
-
**Deterministic fix (if prose-only mechanical work):** [steps to extract → script/workflow/template paths + tests]
|
|
52
|
-
|
|
53
|
-
Constraint: Only change what the observations demand. Do not reorganize working content.
|
|
54
|
-
Description must remain a trigger catalog (description-field.md), never story prose.
|
|
55
|
-
Deterministic steps must not remain prose-only (deterministic-elements.md).
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## Spawning a test subagent
|
|
59
|
-
|
|
60
|
-
To observe how Claude B uses a skill on a real task:
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
Agent(
|
|
64
|
-
subagent_type="general-purpose",
|
|
65
|
-
description="Test skill on real task",
|
|
66
|
-
prompt="Read the skill at [skill-path]/SKILL.md and follow its instructions.
|
|
67
|
-
|
|
68
|
-
Task: [realistic user prompt]
|
|
69
|
-
|
|
70
|
-
Save a complete transcript of your work to: [workspace]/transcript.md"
|
|
71
|
-
)
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Spawn with `run_in_background=true` for longer tasks. Read the transcript when the agent completes.
|
|
75
|
-
|
|
76
|
-
## Reading a transcript for observations
|
|
77
|
-
|
|
78
|
-
> "Watch for unexpected exploration paths, missed connections, overreliance on certain sections, and ignored content."
|
|
79
|
-
|
|
80
|
-
Scan the transcript for:
|
|
81
|
-
|
|
82
|
-
1. **File access order** — Did Claude read files in the expected order? Unexpected ordering means the structure is not intuitive.
|
|
83
|
-
2. **Missed files** — Were any reference files never accessed? They might be unnecessary or poorly signaled.
|
|
84
|
-
3. **Re-read files** — Did Claude re-read the same file multiple times? That content should be in SKILL.md.
|
|
85
|
-
4. **Gotcha moments** — Where did Claude make a wrong choice? That's a gotcha candidate.
|
|
86
|
-
5. **Script usage** — Did Claude execute scripts as expected, or did it try to read them instead?
|
|
87
|
-
6. **Prose-as-code** — Did Claude reconstruct a multi-step mechanical sequence from markdown when a script should have run? Flag as deterministic-elements failure.
|
|
88
|
-
7. **Tool call errors** — Any "tool not found" or path errors? Fix references.
|
|
89
|
-
|
|
90
|
-
## Delegating self-audit
|
|
91
|
-
|
|
92
|
-
After building, spawn a subagent to run the audit independently (task-tool first):
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
Agent(
|
|
96
|
-
subagent_type="general-purpose",
|
|
97
|
-
description="Self-audit skill via task seeds",
|
|
98
|
-
prompt="Read the skill at [skill-path]/SKILL.md and all companion files.
|
|
99
|
-
|
|
100
|
-
Then read the self-audit task seeds at [skill-builder-path]/references/self-audit-checklist.md.
|
|
101
|
-
|
|
102
|
-
Register every bullet as a session task (TaskCreate / TodoWrite). Complete each with PASS, FAIL+file:line+fix, or N/A+reason. Do not use markdown checkboxes as the tracker.
|
|
103
|
-
|
|
104
|
-
Report as:
|
|
105
|
-
## Audit Results
|
|
106
|
-
- PASS: N
|
|
107
|
-
- N/A: M
|
|
108
|
-
- FAIL fixed: K
|
|
109
|
-
- Remaining FAIL (must be empty): …
|
|
110
|
-
"
|
|
111
|
-
)
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
This gives an independent verification. Fix failures, then re-deliver to user.
|
|
115
|
-
|
|
116
|
-
## Testing across models
|
|
117
|
-
|
|
118
|
-
> "Test your Skill with all the models you plan to use it with."
|
|
119
|
-
|
|
120
|
-
If the skill will be used with Haiku, spawn a haiku test subagent:
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
Agent(
|
|
124
|
-
subagent_type="general-purpose",
|
|
125
|
-
model="haiku",
|
|
126
|
-
...
|
|
127
|
-
)
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
Haiku needs more explicit guidance than Opus. Observe whether the skill provides enough.
|