diff --git a/.ai-workspace/scripts/mktmpdir.py b/.ai-workspace/scripts/mktmpdir.py index bebf1bd..82e01f0 100644 --- a/.ai-workspace/scripts/mktmpdir.py +++ b/.ai-workspace/scripts/mktmpdir.py @@ -16,6 +16,7 @@ import argparse import datetime import secrets +import sys from pathlib import Path @@ -53,7 +54,11 @@ def main() -> None: relative_path = task_dir.relative_to(base_dir).as_posix() action = "Created" if created else "Using existing" - print(f"{action} task directory: {relative_path}") + # Status goes to stderr so that `$(mktmpdir.py)` captures the path alone. + # Emitting the prose on stdout made callers create directories literally + # named "Created task directory: .tmp/...". + print(f"{action} task directory: {relative_path}", file=sys.stderr) + print(relative_path) if __name__ == "__main__": diff --git a/GUIDE.md b/GUIDE.md index 0320629..d616dd6 100644 --- a/GUIDE.md +++ b/GUIDE.md @@ -84,6 +84,10 @@ Skills activate on their own — you just get better results. They live in `skil | `refactoring-patterns` | Measurement-driven refactoring — profile before, measure after, keep only if metrics improve. Bulk mode for 10+ files. | When you say "refactor", "clean up", or code has high complexity | | `verification-loop` | Unified engine behind `/verify`, `/quality-gate` — environment, types, lint, tests, review, security | When you invoke /verify or /quality-gate | | `brainstorming` | Design exploration before implementation — asks questions, proposes approaches, presents design for approval | When creative/design work is detected | +| `update-docs` | Matches a code diff against in-repo doc files and applies targeted updates to whatever went stale | When a change renames, removes, or adds APIs, fields, config keys, or CLI flags | +| `ci-guard` | Detects repos with no CI workflow (GitHub Actions, GitLab CI, CircleCI) and prompts you to add one. Skips repos marked research-only. | When you start work in a repo under `repositories/` | +| `semantic-versioning` | Reads conventional commit prefixes to decide whether the next release is major, minor, or patch | When you commit or push and the repo needs a version bump, or you ask about releases | +| `cost-speed-meter` | Records explicit timing measurements and recommends faster alternatives, such as unit over integration tests. Opt-in, not on every command. | When you ask to time a command or speed up a feedback loop | ### On-demand docs (agent-docs/) @@ -96,6 +100,7 @@ These are NOT loaded every session. Claude reads them only when the task require | `codebase-onboarding` | Systematic onboarding to unfamiliar codebases | | `writing-skills` | TDD methodology for creating new skills | | `subagent-driven-development` | Dispatching subagents per task with two-stage review | +| `workspace-development` | Modifying and extending this workspace (config, skills, commands, hooks) | --- @@ -120,6 +125,14 @@ Type the command name in the chat to run it. | `/focus` | Switch repos mid-session | Re-presents the repo menu, replaces current focus | | `/changelog` | Before a release | Generates a changelog grouped by intent from git history | | `/dep-check` | Periodic audit | Checks for unused deps, outdated versions, vulnerabilities, license issues | +| `/check-code` | Quick pass while coding | Lightweight Python lint and format check. Use `/verify` for the full workflow. | +| `/update-docs` | After code changes | Scans docs in the focused repo, matches them against the diff, proposes targeted updates | +| `/repo-sync` | Start of session | Fetches and reports which focused repos are behind the remote or have uncommitted changes | +| `/harness-lint` | Agent setup in CI | 97 deterministic rules plus system-level analysis. No LLM, fast, reproducible. | +| `/harness-review` | Agent setup audit | Reads every file and gives KEEP/REVIEW/REMOVE verdicts per component | +| `/harness-security` | Agent setup audit | Deterministic scanning combined with semantic security review | +| `/skill-review` | Authoring a skill | Deep static and qualitative evaluation of one skill, alone and in context | +| `/skill-verify` | Before installing a skill | Lint plus security in one pass, returns SAFE / CAUTION / UNSAFE | | `/toolkit` | First time / discovery | Shows everything available and recommends what to use | --- diff --git a/README.md b/README.md index 6b05af9..d719622 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,10 @@ Skills are knowledge that Claude carries in the background. You don't trigger th | `refactoring-patterns` | Measurement-driven refactoring with before/after metrics | | `verification-loop` | Powers `/verify`, `/quality-gate` (invoked on demand) | | `brainstorming` | Design exploration before implementation | +| `update-docs` | Detects docs made stale by a code diff, applies targeted updates | +| `ci-guard` | Flags repos under `repositories/` that have no CI workflow | +| `semantic-versioning` | Reads conventional commits to pick the next major/minor/patch | +| `cost-speed-meter` | Opt-in timing of commands, suggests faster feedback loops | ### Commands (you trigger these) @@ -69,6 +73,14 @@ Skills are knowledge that Claude carries in the background. You don't trigger th | `/focus` | Switch repos | Pick repos from a list | | `/changelog` | Before a release | Generate changelog grouped by intent | | `/dep-check` | Periodic audit | Check unused deps, outdated versions, vulnerabilities | +| `/check-code` | Quick pass | Lightweight Python lint and format check | +| `/update-docs` | After code changes | Find stale docs, propose targeted updates | +| `/repo-sync` | Start of session | Fetch and report repos that are behind or dirty | +| `/harness-lint` | Agent setup CI | 97 deterministic rules, no LLM, reproducible | +| `/harness-review` | Agent setup audit | Per-component KEEP/REVIEW/REMOVE verdicts | +| `/harness-security` | Agent setup audit | Deterministic scan plus semantic security review | +| `/skill-review` | Authoring a skill | Deep static and qualitative evaluation of one skill | +| `/skill-verify` | Before installing | Lint plus security in one pass: SAFE / CAUTION / UNSAFE | | `/toolkit` | Discovery | See everything available | ### Hooks (automatic safety nets) diff --git a/skills/python-patterns/references/api-clients.md b/skills/python-patterns/references/api-clients.md index 8b7dd02..2c8c7e6 100644 --- a/skills/python-patterns/references/api-clients.md +++ b/skills/python-patterns/references/api-clients.md @@ -15,14 +15,16 @@ LLM outputs often include markdown fences that break JSON parsing. Always clean ```python import json + def clean_llm_response(text): for prefix in ("```markdown", "```json", "```"): if text.startswith(prefix): - text = text[len(prefix):].strip() + text = text[len(prefix) :].strip() if text.endswith("```"): text = text[:-3].strip() return text + def parse_llm_json(text): text = clean_llm_response(text) try: diff --git a/skills/python-patterns/references/testing.md b/skills/python-patterns/references/testing.md index 353f564..07550ae 100644 --- a/skills/python-patterns/references/testing.md +++ b/skills/python-patterns/references/testing.md @@ -10,6 +10,7 @@ # DataFrame testing import pandas.testing as tm + def test_feature_engineering(): input_df = pd.DataFrame({"price": [100, 200], "quantity": [2, 3]}) result = add_total_column(input_df)