v1.1.1: wbox skills sync + skill doc improvements - #6
Conversation
New `wbox skills sync` command copies firm/ files from one installed platform to one or more others, with wizard-style prompts when run without flags. Closes #4. Also folds in skill content improvements from a real-world usage review: - SKILL.md gains a "Common Recipes" section (find-then-act lookup, multi-line content with shell-special characters) - Patterns to Know surfaces --frame and a "don't infer flag names" reminder - references/notes.md notes that attachments are web-UI only Bumps to 1.1.1. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7f368017fd
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if t.id == source.id: | ||
| typer.echo(f"Error: target {t.id!r} is the same as the source.", err=True) |
There was a problem hiding this comment.
Reject targets that map to the same firm path
The sync guard only compares platform IDs, but claude-code-user and claude-code-project can resolve to the same directory (for example when cwd == $HOME, both point under ~/.claude/skills/wealthbox-crm/firm). In that case this check passes, then shutil.copytree(src_firm, tgt_firm, dirs_exist_ok=True) attempts to copy a directory onto itself and raises shutil.Error, aborting the command. Please validate target/source path equality (e.g., resolved firm paths) in addition to ID equality.
Useful? React with 👍 / 👎.
- doctor.py: _detect_token_source now loads .env after config-file step, matching get_client's resolution order. Previously wbox doctor would falsely report "token not configured" when only a .env file supplied the token, even though normal API commands authenticated fine. - install.ps1: surface non-zero exit code from finally block when a caught exception leaves $state == 'errored', so CI wrappers and bootstrap scripts can detect installer failures. - skills.py install_cmd: migrate legacy firm/ before the install loop runs. install_skill(force=True) deletes the existing skill dir, so pre-1.2 users running 'wbox skills install --force' could lose firm data before the migration step had a chance to copy it out. - skills.py uninstall_cmd: migrate legacy firm/ before deleting the skill dir. The help text already promised firm data is preserved; this makes that true for pre-1.2 layouts too. Codex's two skills-sync findings (PRs #6, #7) are obsolete — 'wbox skills sync' was removed when firm data became machine-level. The README \| finding (PR #12) is GFM-required to escape pipes inside table cells; the rendered README copy-paste path works correctly. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
wbox skills sync— copiesfirm/files from one installed platform to one or more others, with wizard-style prompts by default and--source/--target/--all-targets/--dry-run/--yesflags for non-interactive use. Closes Add Skills Sync Command #4.references/notes.mdimprovements from a real-world usage review: new "Common Recipes" section (find-then-act, multi-line content with shell-special characters),--frameand "don't infer flag names" surfaced in Patterns to Know, and a one-line note that attachments are web-UI only.Test plan
ruff check src/ tests/cleanpytest— 203 passed (including 7 new tests intest_skills_cli_sync.py)wbox --versionreports1.1.1wbox skills sync -hrenders the new commandfirm/notes.mdin source, runwbox skills syncinteractively, confirm target reflects source🤖 Generated with Claude Code