Two defects found while running /wiki-compile, both from tooling assuming
a path instead of resolving it.
1. Plaintext Syncro API keys. Mike's and Howard's live PSA keys were
copy-pasted into three command files, a script, and two catalog docs --
despite both already being vaulted at msp-tools/syncro and
msp-tools/syncro-howard. Replaced with reads from the SOPS vault via a
new sourced helper, .claude/scripts/syncro-env.sh. Write paths fail
closed; read-only paths degrade to skipped enrichment rather than a
wrong key. Per-user mapping is unchanged, so Syncro attribution is too.
2. Hardcoded repo root. wiki-compile/wiki-lint/inject-standards and
gen_b64.py hardcoded D:/claudetools; this machine is C:/claudetools.
syncro.md also read ~/.claude/identity.json before the repo copy -- the
same bug that made remediation-tool's consent-audit report a fully
consented tenant as RED. Root now resolves from the script's own
location, with identity.json claudetools_root as the override.
get-identity.sh had a chicken-and-egg bug: it read ${CLAUDETOOLS_ROOT:-.}
but never set it, so every caller had to already know the root. It now
self-resolves and exports CLAUDETOOLS_ROOT + VAULT_ROOT.
Verified: all three command setup blocks authenticate against live Syncro;
get-identity.sh works from any cwd and honors a pre-set root; gps-rmm
autoenroll resolves its key from the vault. security-review: no findings.
NOTE: both keys remain valid in git history. Rotation in the Syncro portal
is the required follow-up -- this commit does not resolve that exposure.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
95 lines
3.1 KiB
Markdown
95 lines
3.1 KiB
Markdown
# /inject-standards — Load relevant coding standards into context
|
||
|
||
Loads one or more standards files from `.claude/standards/` and displays their full content.
|
||
|
||
## Usage
|
||
|
||
```
|
||
/inject-standards — auto-select based on the current task
|
||
/inject-standards powershell/execution-pattern — load a specific standard by path
|
||
/inject-standards "syncro billing comment" — load standards relevant to a task description
|
||
/inject-standards syncro/comment-dedup syncro/time-entry-protocol — load multiple specific standards
|
||
```
|
||
|
||
## Procedure
|
||
|
||
Follow these steps exactly when /inject-standards is invoked:
|
||
|
||
### Step 1 — Parse $ARGUMENTS
|
||
|
||
- If $ARGUMENTS is empty: proceed to Step 2 (auto-select based on conversation context).
|
||
- If $ARGUMENTS contains one or more paths that match known standards slugs (e.g., `powershell/execution-pattern`, `syncro/comment-dedup`): skip Step 2, go directly to Step 3 with those paths.
|
||
- If $ARGUMENTS is a task description (plain English, not a path): use it as the query in Step 2.
|
||
|
||
### Step 2 — Auto-select relevant standards
|
||
|
||
1. Read `.claude/standards/index.yml`.
|
||
2. Review the descriptions for all entries.
|
||
3. Select the 2–5 standards most relevant to either:
|
||
- The task description in $ARGUMENTS, or
|
||
- The current conversation context (what has the user been working on?).
|
||
4. Prefer specificity: `syncro/comment-dedup` is more relevant than `conventions/no-emojis` for a Syncro billing task.
|
||
5. Always include `conventions/no-emojis` when writing any output that will go into scripts, logs, or client-facing text.
|
||
|
||
### Step 3 — Load and display the selected standards
|
||
|
||
For each selected standard (in order of relevance):
|
||
|
||
1. Read the file at `.claude/standards/<slug>.md`.
|
||
2. Display a header:
|
||
```
|
||
=== STANDARD: <slug> ===
|
||
```
|
||
3. Display the full file content (including frontmatter).
|
||
4. Add a blank line between standards.
|
||
|
||
### Step 4 — Report
|
||
|
||
After displaying all standards, print a one-line summary:
|
||
|
||
```
|
||
[INFO] Loaded N standards: <slug1>, <slug2>, ...
|
||
```
|
||
|
||
If auto-selection was used, briefly explain why each standard was chosen (one phrase per standard).
|
||
|
||
## Examples
|
||
|
||
**Specific standards:**
|
||
```
|
||
/inject-standards powershell/execution-pattern git/commit-style
|
||
```
|
||
Loads those two files directly and displays them.
|
||
|
||
**Task description:**
|
||
```
|
||
/inject-standards "writing a PowerShell script to check Windows service status"
|
||
```
|
||
Would select: `powershell/execution-pattern`, `conventions/no-emojis`, `conventions/output-markers`
|
||
|
||
**Syncro billing task:**
|
||
```
|
||
/inject-standards "billing Syncro ticket for emergency onsite"
|
||
```
|
||
Would select: `syncro/time-entry-protocol`, `syncro/comment-dedup`, `syncro/html-formatting`
|
||
|
||
**GuruRMM agent feature:**
|
||
```
|
||
/inject-standards "adding Linux temperature collection to the agent"
|
||
```
|
||
Would select: `gururmm/platform-parity`, `gururmm/build-pipeline`, `conventions/no-emojis`
|
||
|
||
**Empty (auto from context):**
|
||
```
|
||
/inject-standards
|
||
```
|
||
Reads the recent conversation, infers the task type, selects 2–5 most relevant standards.
|
||
|
||
## Standards index location
|
||
|
||
`.claude/standards/index.yml`
|
||
|
||
## Standards files location
|
||
|
||
`.claude/standards/<folder>/<name>.md`
|