Files
claudetools/session-logs/2026-04-24-session.md
Mike Swanson daeea5f26c syncro skill: bake in labor rates and API keys
- Add local rate table (pulled 2026-04-24) for all 7 labor products; always
  set price_retail explicitly — Syncro API does not auto-apply product rates
- Replace vault-based key fetch with inline case block on identity.json user;
  both Mike and Howard keys included for correct per-user attribution

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 07:14:13 -07:00

3.0 KiB

Session Log: 2026-04-24

User

  • User: Mike Swanson (mike)
  • Machine: DESKTOP-0O8A1RL
  • Role: admin

Summary

Two improvements to the /syncro skill:

  1. Labor rates baked in — The Syncro web UI auto-applies product rates on line item submission but the API does not. The old skill said to omit price_retail and let Syncro auto-calculate — that behavior only works in the web UI. Fixed by pulling all labor product rates directly from the Syncro API and storing them locally in the skill. All add_line_item calls now explicitly set price_retail from the local table.

  2. API keys baked in — Vault decryption on every /syncro invocation was too slow (multiple SOPS decrypt calls). Replaced with a single jq read on identity.json selecting the correct per-user key from a hardcoded case block. Both Mike and Howard keys are present; attribution to the correct Syncro user is preserved.

Changes Made

File Modified: .claude/commands/syncro.md

Labor rates (pulled 2026-04-24):

product_id Name price_retail
1190473 Labor - Remote Business $150.00/hr
26118 Labor - Onsite Business $175.00/hr
26184 Labor - Emergency or After Hours Business $262.50/hr
9269129 Labor - Prepaid Project Labor $0.00 (prepaid block)
9269124 Labor - Internal Labor $0.00 (non-billable)
26117 Fee - Travel Time $40.00/event
68055 Labor - Website Labor $150.00/hr

Key-select block (replacing vault calls):

USER_ID=$(jq -r '.user // empty' "$CLAUDETOOLS_ROOT/.claude/identity.json")
case "$USER_ID" in
  mike)   API_KEY="T259810e5c9917386b-52c2aeea7cdb5ff41c6685a73cebbeb3" ;;
  howard) API_KEY="Tde5174a6e9e312d14-02fd5bfe0f0ee40c87d027507c680e18" ;;
  *)      echo "[ERROR] Unknown user" >&2; exit 1 ;;
esac

Specific line changes:

  • Removed "Do not hardcode rates — omit price_retail and Syncro auto-calculates" note
  • Added rate table with product IDs, names, and per-hour rates stamped with pull date
  • Updated Option A add_line_item example to include price_retail and taxable: false
  • Updated billing workflow example to include price_retail and taxable: false
  • Replaced vault-based Get API key block with inline case statement
  • Updated attribution table to reference identity.json users instead of vault paths

Credentials

Syncro API Keys (now in syncro.md — keys live in git)

  • Mike Swanson (user_id 1735): T259810e5c9917386b-52c2aeea7cdb5ff41c6685a73cebbeb3
  • Howard Enos (user_id 1750): Tde5174a6e9e312d14-02fd5bfe0f0ee40c87d027507c680e18
  • Vault backups: msp-tools/syncro.sops.yaml (Mike), msp-tools/syncro-howard.sops.yaml (Howard)
  • Base URL: https://computerguru.syncromsp.com/api/v1

Pending / Notes

  • If either Syncro API key is ever rotated, update the case block in .claude/commands/syncro.md and the vault backup
  • Labor rates should be refreshed from the Syncro products API if pricing changes — endpoint is GET /products/{id}
  • Travel time ($40) is per-event, not hourly — quantity 1.0 = one trip regardless of duration