docs: Add prerequisites and beginner resources to README - #3000
docs: Add prerequisites and beginner resources to README#3000Ivan-houzhiwen wants to merge 1073 commits into
Conversation
Fix import ordering in session_stop.py hook
Co-authored-by: rysweet <18054722+rysweet@users.noreply.github.com>
Bump version to 0.5.2
Resolved conflicts by: - Accepting version 0.5.1 from main (pyproject.toml) - Keeping namespaced staging implementation (copilot.py, tests) - Preserving auto-derived workflow step count feature - Maintaining parity test improvements All conflicts resolved while preserving review comment fixes. Co-authored-by: rysweet <18054722+rysweet@users.noreply.github.com>
Co-authored-by: rysweet <18054722+rysweet@users.noreply.github.com>
Bump version to 0.5.2
…ucture Add Documentation Validation Infrastructure
…skills-updates Update Power Steering Hooks and Skills Documentation
…b-scraper-skill feat: Add authenticated-web-scraper skill
Co-authored-by: rysweet <18054722+rysweet@users.noreply.github.com>
Co-authored-by: rysweet <18054722+rysweet@users.noreply.github.com>
…ages Co-authored-by: rysweet <18054722+rysweet@users.noreply.github.com>
Co-authored-by: rysweet <18054722+rysweet@users.noreply.github.com>
Co-authored-by: rysweet <18054722+rysweet@users.noreply.github.com>
Co-authored-by: rysweet <18054722+rysweet@users.noreply.github.com>
Co-authored-by: rysweet <18054722+rysweet@users.noreply.github.com>
…ed line numbers Co-authored-by: rysweet <18054722+rysweet@users.noreply.github.com>
… routing docs (rysweet#2715) * fix: heredoc stdin conflict, hierarchical memory path divergence, ops routing docs Three bug fixes in one PR: rysweet#2581: Replace pipe+heredoc stdin conflict with env var passing in launch-parallel-round-1 and complete-session recipe steps. The old pattern `echo "$JSON" | python3 - <<'PYEOF'` relied on bash operator precedence (pipe wins over heredoc) which is fragile and breaks on refactoring. New pattern passes JSON via environment variables, making heredoc the only stdin source for python3. rysweet#2655: Fix hierarchical memory path divergence in segmented learning. The old conditional `not (db_path / "lock").exists()` caused segment 2+ to use a different DB path than segment 1 (because Kuzu creates a lock file after first use). Now always uses db_path/kuzu_db when an existing kuzu_db subdirectory exists, ensuring all segments share one database. rysweet#2601: Align Operations routing description in SKILL.md fallback section with the rest of the document and dev.md. Was "Respond directly", now correctly says "Builder agent (direct execution, no workflow steps)". 145/145 tests pass, YAML validates. Closes rysweet#2581 Closes rysweet#2655 Closes rysweet#2601 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version --------- Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Add agent memory integration to AutoMode New module: launcher/agent_memory.py - Wraps amplihack-memory-lib ExperienceStore for AutoMode agents - Stores goals, objectives, plans, turn results, evaluations, learnings - Recalls past experiences for prompt injection - Graceful degradation if amplihack-memory-lib not installed AutoMode hooks (both sync and async sessions): - Session start: store goal + recall past experiences - Turn 1: store clarified objective - Turn 2: store execution plan - Turns 3+: store execution output + evaluation per turn - Session end: store learning summary + close connection Requires: pip install amplihack-memory-lib Tested: 8 experiences stored, search returns relevant results, statistics show storage usage. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version --------- Co-authored-by: Ubuntu <azureuser@devi.yb0a3bvkdghunmsjr4s3fnfhra.phxx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Fix memory: use kuzu backend (not sqlite), fix close() - Remove explicit backend='sqlite' so ExperienceStore uses its default kuzu graph backend - Fix close() -- ExperienceStore handles cleanup internally Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version --------- Co-authored-by: Ubuntu <azureuser@devi.yb0a3bvkdghunmsjr4s3fnfhra.phxx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…ion (rysweet#2722) * fix: auto-cleanup workstream directories after completion to prevent disk exhaustion The multitask orchestrator created git clones for each workstream but never cleaned them up. A session with 60 workstreams could consume 49-72GB of disk. Changes: - Add _cleanup_workstream_dir() that removes work_dir after workstream completes while preserving log files (which live in tmp_base, not work_dir) - monitor() now auto-cleans completed/failed workstreams each polling cycle - Timed-out workstreams are also cleaned after termination - Report shows auto-cleanup stats (dirs cleaned, GB freed) - Disk space threshold lowered from 10GB to 5GB (shallow clones use ~50MB) Impact: 60-workstream session goes from 72GB disk usage to <1GB (logs only). Closes rysweet#2527 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version --------- Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…de Code setup (rysweet#2716) Five documentation fixes for new user onboarding: rysweet#2480: PREREQUISITES.md now includes a table explaining WHAT each tool does and WHY amplihack needs it (was just a bare list of tool names). rysweet#2484: Quick Check section no longer tells users to run `amplihack` before installing it. Now provides a copy-paste shell one-liner that checks prerequisites without requiring amplihack to be installed. rysweet#2481: Tutorial no longer opens with Task(subagent_type="guide") syntax. Now leads with natural language ("just type this in Claude Code"), explains what agents are in plain English, and puts Task() syntax under an "advanced users" section. rysweet#2482: COPILOT_CLI.md now has a "Where Do Agents Come From?" section explaining that agents are authored by amplihack and symlinked for Copilot discovery. rysweet#2485: New CLAUDE_CODE_SETUP.md covering API key acquisition, cost expectations, permanent shell setup, and verification steps. Closes rysweet#2480 Closes rysweet#2481 Closes rysweet#2482 Closes rysweet#2484 Closes rysweet#2485 Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ror (rysweet#2724) rysweet#2493: sync-recipes-upstream.yml failed with "pathspec 'amplifier-bundle/recipes/' did not match any file(s)". The git add lines referenced paths not produced by the sync. Fixed: use --ignore-missing, check if anything is staged before committing, and guard PR creation on non-empty branch. rysweet#2492: pm-roadmap-review.yml failed with "gh: set the GH_TOKEN environment variable". Changed from secrets.GITHUB_TOKEN to github.token (canonical form), added GITHUB_TOKEN as fallback, and added pre-flight gh auth check. Closes rysweet#2493 Closes rysweet#2492 Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…eet#2725) * feat: quality-audit-cycle v2.0 — seek/validate/fix/recurse loop Restructures the quality audit recipe with a recursive improvement loop: 1. SEEK: Scan codebase for quality issues (reviewer agent) 2. VALIDATE: Independent validation of each finding (analyzer agent) 3. FIX: Address only confirmed findings (builder agent) 4. RECURSE: Re-audit if fixes were applied, stop if clean or max cycles Closes rysweet#2707 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version --------- Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
… analysis pyright (rysweet#2728) * fix: Windows platform clarity + static analysis uses pyright rysweet#2477: README says "Windows (via WSL or native)" instead of "Windows not directly supported". Static analysis workflow source updated to use pyright instead of pylint + mypy. The .lock.yml needs recompilation via `gh aw compile`. Closes rysweet#2477 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * refactor: split integrated_proxy.py from 4177 to 1467 lines (65% reduction) Extract 6 focused modules from the monolithic integrated_proxy.py: - exceptions.py (117 lines): All exception classes - models.py (305 lines): Pydantic models and constants - monitoring.py (330 lines): Logging, formatters, error logger - azure_errors.py (418 lines): Error classification, retry, fallback manager - conversion.py (1041 lines): Anthropic↔Azure/LiteLLM conversions - streaming.py (741 lines): Tool streaming, response handlers Backward compatibility preserved via re-exports in integrated_proxy.py. Closes rysweet#2637 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: remove opus[1m] default from Copilot CLI launcher The Copilot CLI uses different model identifiers than Claude Code. "opus[1m]" is a Claude Code-specific alias not recognized by Copilot, causing startup failures. Now only passes --model when COPILOT_MODEL env var is explicitly set by the user, letting Copilot use its default. Closes rysweet#2729 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: remove pirate dialect from 3 documentation files Standardize language in PLUGIN_ARCHITECTURE.md, file-organization.md, and first-docs-site.md. Replaced "fer" → "for", "t'" → "to", "o'" → "of", "ye" → "you", "be loaded" → "are loaded", etc. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…sweet#2734) Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ysweet#2735) Closes rysweet#2478 Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When recipe context variables are declared but not provided via --context, the runner now infers values from: 1. AMPLIHACK_CONTEXT_<KEY> environment variables 2. Well-known env vars (AMPLIHACK_TASK_DESCRIPTION, AMPLIHACK_REPO_PATH) 3. Recipe YAML defaults (already worked, preserved) Explicit --context values always take precedence (highest priority). Inference is logged when --verbose is set. This enables running recipes without explicit context when the environment provides the values (e.g., from the smart-orchestrator or shell setup). Closes rysweet#2349 Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…hatches (rysweet#2741) * fix: make recipe runner MANDATORY for /dev — close all escape hatches Root cause: dev.md and SKILL.md presented the recipe runner as "PREFERRED" with fallback paths. LLMs treat documented fallbacks as alternatives and optimize for the simplest one, bypassing the 23-step workflow. Changes: - dev.md: Remove Options B/C. Single REQUIRED path. Add anti-bypass statement. - SKILL.md: Remove FALLBACK section and availability check. Single REQUIRED path. - USER_PREFERENCES.md: Added learned pattern (outside repo, persists via plugin). 7 escape hatches closed: "PREFERRED" → "REQUIRED", Options B/C removed, FALLBACK section removed, availability check removed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version --------- Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…ix) (rysweet#2752) * fix: add mode and working_dir params to ClaudeSDKAdapter.execute_agent_step The recipe runner passes mode=step.mode and working_dir to all adapters via the SDKAdapter protocol. ClaudeSDKAdapter was the only adapter missing these parameters, causing TypeError when the smart-orchestrator recipe ran. Added: - mode: str | None = None parameter (accepted but unused by SDK) - working_dir: str = "." parameter (accepted but unused by SDK) - 2 new tests: mode/working_dir acceptance + protocol signature match - Outside-in verified: recipe runner no longer fails on mode TypeError 7/7 adapter tests passing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version --------- Co-authored-by: Ubuntu <azureuser@amplihack-dev.ftnmxvem3frujn3lepas045p5c.xx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* feat: PostToolUse hook-based workflow enforcement guard (rysweet#2742) Add a PostToolUse hook that detects when /dev or dev-orchestrator is invoked but the recipe runner is never executed, and surfaces a hard WARNING after 3 tool calls without workflow evidence. Changes: - New workflow_enforcement_hook.py: Tracks /dev invocation state in /tmp/amplihack-workflow-state/, monitors for recipe runner calls, branch creation, TodoWrite Step patterns, and Agent launches as evidence of real workflow execution - Updated post_tool_use.py: Registers the new hook via tool_registry - Updated SKILL.md: Stronger enforcement language that's harder for Claude to rationalize away, documents the PostToolUse guard Closes rysweet#2742 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version * fix: add missing skill names + evidence patterns to workflow enforcement hook Add .claude:amplihack:dev and .claude:amplihack:default-workflow to DEV_SKILL_NAMES. Add TaskCreate as workflow evidence tool. Add gh pr create and gh issue create to bash evidence patterns. 10/10 outside-in test scenarios now pass: - 5 bypass detection scenarios (all fire warnings correctly) - 5 happy-path scenarios (all detect evidence correctly) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: detect /dev at UserPromptSubmit level for Copilot workflow enforcement Closes Copilot-specific escape hatch where /dev is treated as prose. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: use fixed session ID for cross-hook state sharing in Copilot Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: move /dev detection before strategy short-circuit Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: read prompt from both userMessage (Claude) and prompt (Copilot) keys Copilot CLI passes the user prompt in input_data["prompt"], while Claude Code uses input_data["userMessage"]. Now checks both. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: Copilot prompt key in classification reminder + formatting Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
… CLI docs (rysweet#2757) * fix: ClaudeSDKAdapter missing mode/working_dir params + README recipe CLI docs ClaudeSDKAdapter.execute_agent_step() was missing `mode` and `working_dir` parameters that the SDKAdapter protocol and all other adapters define. The RecipeRunner unconditionally passes these kwargs, causing a TypeError that made the SDK adapter completely unusable. Also adds `amplihack recipe` CLI examples to the README's Orchestration & Execution feature section so users can discover the recipe CLI commands. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version --------- Co-authored-by: Ubuntu <azureuser@devy.yb0a3bvkdghunmsjr4s3fnfhra.phxx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
… issues (rysweet#2609) * Initial plan * fix: prevent Issue Classifier cascade failures on [agentics] tracking issues - Add 'Skip automated tracking issues' step to pre_activation job that prevents activation for [agentics]-prefixed issues (failure notices, no-op tracking). These automated issues were causing cascade failures where each failure notice triggered more classifier runs that also failed. - Update issue-classifier.md to instruct the agent to always apply a label (never use noop in strict mode), with explanation of why noop causes CLI failures. Root cause: When the Issue Classifier failed on a real issue, the agentics system created a '[agentics] Issue Classifier failed' failure notice. This notice triggered the classifier again, which failed again, creating 9+ cascading failures. The pre_activation filter stops this cycle at the source. Co-authored-by: rysweet <18054722+rysweet@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: rysweet <18054722+rysweet@users.noreply.github.com>
* fix: add missing installed_at to copilot plugin config (rysweet#2751) Copilot CLI validates config.json with a strict schema requiring installed_at as a string on each installed_plugins entry. The register_copilot_plugin() function was missing this field, causing schema validation to fail and breaking the copilot CLI globally. Added installed_at with UTC ISO 8601 timestamp and 2 new tests. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version --------- Co-authored-by: Ubuntu <azureuser@devy.yb0a3bvkdghunmsjr4s3fnfhra.phxx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…sion race (rysweet#2758) * fix: use temp dir for recipe runner agent steps to prevent nested session race (rysweet#2758) The CLISubprocessAdapter was running child `claude -p` processes in the same working directory as the parent session, causing file write races on sessions.jsonl, settings.json, and Blarify indexing. Changes: - Agent steps now use tempfile.mkdtemp(prefix="recipe-agent-") as cwd, matching the multitask orchestrator's isolation pattern. - New _build_child_env() helper removes CLAUDECODE and propagates session tree env vars (AMPLIHACK_TREE_ID, AMPLIHACK_SESSION_DEPTH, etc.) with depth incremented by 1. - Temp directories are always cleaned up via shutil.rmtree in a finally block. - Bash steps also get session tree env propagation via the shared helper. Closes rysweet#2758 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version --------- Co-authored-by: Ubuntu <azureuser@devy.yb0a3bvkdghunmsjr4s3fnfhra.phxx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…rysweet#2762) * fix: deduplicate USER_PREFERENCES.md from 5 copies to 2 canonical sources Problem: USER_PREFERENCES.md existed in 5 places, all drifting apart: - .claude/context/ (canonical for Claude Code) - amplifier-bundle/context/ (canonical for Amplifier) - src/amplihack/.claude/context/ (build artifact - should not be tracked) - src/amplihack/amplifier-bundle/context/ (build artifact - should not be tracked) - docs/claude/context/ (dead copy - nothing reads it) Fix: - Trim both canonical copies from ~280 lines to ~40 (remove documentation bloat that belongs in /amplihack:customize help, not in context injection) - Remove 3 duplicate copies from git tracking - Add .gitignore entries for src/amplihack/ build artifact directories (build_hooks.py copies these at wheel build time and cleans up after) - Also removes accidentally tracked DISCOVERIES.md build artifacts - Fix PROJECT.md project name (amplihack5 -> amplihack) The build still works: verified wheel contains both USER_PREFERENCES.md files at correct paths (amplihack/.claude/context/ and amplihack/amplifier-bundle/context/). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: remove 106 stale build artifacts from git tracking build_hooks.py copies agents/, commands/, skills/ from .claude/ to src/amplihack/ at wheel build time, then cleans up after. These files were accidentally committed, preventing cleanup (safe_cleanup skips git-tracked files) and creating 151 uncommitted changes on every build. - Remove 104 tracked files from src/amplihack/agents/ (stale domain_agents, goal_seeking, teaching) - Remove 2 tracked files from src/amplihack/commands/ (stale recipe.md, uvx_helper.py) - Remove .amplihack/kuzu_db from tracking (binary DB, already in .gitignore) - Add .gitignore entries for all build artifact directories After this change, `uv build --wheel` properly cleans up all copied directories instead of skipping tracked files. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version --------- Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…t#2766) * fix: recipe bash steps use printf pattern to prevent quoting breakage (rysweet#2764) render_shell() wraps template values in shlex.quote() (single quotes), which breaks when placed inside double-quoted echo or heredoc strings. Fix: All bash steps now use printf '%s' where the shlex-quoted value is a standalone argument: - Display: printf 'Text: %s\n' {{var}} - Assign: VAR=$(printf '%s' {{var}}) - CLI args: capture to variable first, use "$VAR" Fixed 7 steps in default-workflow.yaml, 5+ steps in smart-orchestrator.yaml. Added 4 regression tests for quoting patterns. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version --------- Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…o-install (rysweet#2771) fix: target running interpreter in ensure_sdk_deps() for uvx compatibility Closes rysweet#2773
* fix: ensure /dev reliably invokes dev-orchestrator recipe runner Three root causes prevented /dev from reliably routing to the smart-orchestrator recipe runner: 1. Project settings.json was missing UserPromptSubmit hooks entirely, so the classification reminder and preference injection only fired from user-level config (if present). 2. When /dev was explicitly typed, the workflow_classification_reminder hook injected "invoke Skill(dev-orchestrator)" which competed with the command's own "run recipe runner directly" instructions, confusing the model with two different execution paths. 3. The /dev command buried execution instructions at line 143 of 182, after 140 lines of documentation. The model would lose focus before reaching the critical action. Fixes: - Add UserPromptSubmit hooks to project .claude/settings.json - Sync hooks to UVX template via scripts/sync_hooks.py - Skip classification reminder when /dev is explicitly invoked - Restructure dev.md: execution instructions first, reference last Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version * fix: make /dev a thin alias to dev-orchestrator skill Simplifies /dev from a 182-line document with duplicated recipe runner logic to a thin 51-line alias that invokes Skill(skill="dev-orchestrator"). Previously /dev duplicated the recipe runner execution code that already exists in the dev-orchestrator skill. Now there's a single source of truth: the skill defines execution, the command is just an entry point. Also ensures UserPromptSubmit hooks are in the UVX template (the actual source of truth for hook assembly at startup), not just project settings. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version * refactor: simplify /dev command to minimal alias (10 lines) Ruthless simplicity: frontmatter + one line of instruction. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * [skip ci] chore: Auto-bump patch version --------- Co-authored-by: Ubuntu <azureuser@devo.xh24nwhiyviedbtbx54dafh01e.dx.internal.cloudapp.net> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Fixes rysweet#2785 - Add guidance on interpreting test results for first-time contributors: - Added expected success output example - Added failure output explanation - Documented common failure causes (env vars, dependencies) - Added debugging tips and expected runtime
Adds a reading guide section before the Table of Contents that provides suggested paths for different user types: - New users: Quick Start -> Core Concepts -> Configuration - Contributors: Development -> CONTRIBUTING.md - Advanced users: Feature Catalog -> Documentation Navigator This addresses issue rysweet#2786 by helping beginners navigate the documentation more effectively.
- Added quick reference for Wabi-sabi, Zen-like minimalism, Occam's Razor - Explained Brick Philosophy terms: Brick, Stud, Regeneratable, Isolated - Clarified Vertical Slices and Iterative Implementation - Addresses issue: PHILOSOPHY.md uses unexplained philosophy concepts
- Added prerequisites note at top of README - Added Resources for Beginners section with links to learning materials - Addresses issue: Missing prerequisites statement
There was a problem hiding this comment.
Pull request overview
This PR updates top-level documentation to better onboard new contributors by adding prerequisites guidance and beginner-friendly references.
Changes:
- Added a prerequisites callout and a “Reading Guide” section to README.md.
- Added a “Resources for Beginners” section with external learning links to README.md.
- Expanded CONTRIBUTING.md with guidance on interpreting pytest output and common failure causes; added quick-reference glossaries to
.claude/context/PHILOSOPHY.md.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.
| File | Description |
|---|---|
| README.md | Adds onboarding guidance (prerequisites, reading guide, beginner resources) near the top of the project docs. |
| CONTRIBUTING.md | Adds a new section explaining test output and troubleshooting common test failures. |
| .claude/context/PHILOSOPHY.md | Adds short glossaries/term explanations to make philosophy docs more accessible to newcomers. |
Comments suppressed due to low confidence (1)
README.md:45
- The Table of Contents doesn’t include the newly added “Reading Guide” / “Resources for Beginners” sections, making navigation inconsistent with the rest of the README’s TOC-driven structure. Add TOC entries (or intentionally keep them out, but then consider removing the TOC expectation by moving these sections under an existing TOC item).
## 📖 Reading Guide
**New to amplihack?** Start with [Quick Start](#quick-start), then [Core Concepts](#core-concepts), then [Configuration](#configuration).
**Want to contribute?** Go to [Development](#development) and [CONTRIBUTING.md](CONTRIBUTING.md).
**Already familiar?** Check out [Feature Catalog](#feature-catalog) and [Documentation Navigator](#documentation-navigator).
---
## Table of Contents
- [Why amplihack?](#why-amplihack)
- [Quick Start](#quick-start)
- [Core Concepts](#core-concepts)
- [Feature Catalog](#feature-catalog)
- [Configuration](#configuration)
- [Documentation Navigator](#documentation-navigator)
- [Development](#development)
- [RustyClawd Integration](#rustyclawd-integration)
- [License](#license)
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
| --- | ||
|
|
||
| ## 📖 Reading Guide | ||
|
|
||
| **New to amplihack?** Start with [Quick Start](#quick-start), then [Core Concepts](#core-concepts), then [Configuration](#configuration). | ||
|
|
||
| **Want to contribute?** Go to [Development](#development) and [CONTRIBUTING.md](CONTRIBUTING.md). | ||
|
|
||
| **Already familiar?** Check out [Feature Catalog](#feature-catalog) and [Documentation Navigator](#documentation-navigator). | ||
|
|
||
| --- |
There was a problem hiding this comment.
README.md is now 613 lines, which exceeds the repo’s enforced limit of 600 lines (tests/test_readme_structure.py::test_total_length). To avoid CI failures, consider moving the new beginner resources to a dedicated docs page and linking to it here, or trimming other sections so the README stays within 350–600 lines.
| **Debugging tips:** | ||
| - Run with `-v` flag for detailed output: `pytest -v` | ||
| - Run a single test file to isolate issues: `pytest tests/test_example.py` | ||
| - Check the error traceback — it usually points to the exact line failing |
There was a problem hiding this comment.
The example pytest tests/test_example.py doesn’t correspond to an existing file in this repo (there is no tests/test_example.py). Using a non-existent path in the debugging tips will confuse contributors; switch to a real test file path (or keep it generic like pytest tests/test_some_feature.py).
| **What success looks like:** | ||
| ``` | ||
| ==================== 237 passed in 45.2s ==================== | ||
| ``` | ||
| All tests passing means your changes don't break existing functionality. |
There was a problem hiding this comment.
The “success” example hardcodes a specific test count/time (237 passed in 45.2s), which will go stale as tests are added/removed and as runtime varies by machine/CI. Consider using placeholders (e.g., X passed) and describing the meaning rather than pinning exact numbers.
| > **Key Terms Explained:** | ||
| > - **Brick** = A self-contained module with ONE clear responsibility (like a LEGO brick) | ||
| > - **Stud** = The public interface/contract that other modules connect to | ||
| > - **Regeneratable** = Can be rebuilt from scratch using AI without breaking the system | ||
| > - **Isolated** = All code, tests, and fixtures live inside the module folder |
There was a problem hiding this comment.
This “Key Terms Explained” blockquote duplicates the definitions immediately below in the existing “Key concepts” list (Brick/Stud/Regeneratable/Isolated). Keeping both will create drift; consider removing one of the two or making one a brief pointer to the other.
| > **Key Terms Explained:** | |
| > - **Brick** = A self-contained module with ONE clear responsibility (like a LEGO brick) | |
| > - **Stud** = The public interface/contract that other modules connect to | |
| > - **Regeneratable** = Can be rebuilt from scratch using AI without breaking the system | |
| > - **Isolated** = All code, tests, and fixtures live inside the module folder | |
| > **Key Terms Explained:** See the **Key concepts** list below for precise definitions of Brick, Stud, Regeneratable, and Isolated. |
| ## Why amplihack? | ||
|
|
||
| ## 📚 Resources for Beginners | ||
|
|
||
| New to some of these topics? Here are some resources to get you started: | ||
|
|
There was a problem hiding this comment.
The new “Resources for Beginners” H2 sits immediately after “## Why amplihack?” and before the “The Problem/The Solution” value proposition, which effectively makes the “Why amplihack?” section empty and nests the value proposition under “Resources” instead. This also pushes the “barebones / problem / solution / engineering system” keywords beyond the first 50 lines, likely failing tests/test_readme_structure.py::test_value_proposition_in_first_50_lines. Move Resources later (or make it a subheading under Why after the problem statement) so the value proposition stays near the top.
Summary
Added prerequisites note and beginner resources section to README.md.
Changes
Issue Reference
Fixes #2980