Add Phase 5b — one-way repo -> global copy of .claude/commands/*.md after
the pull, so the CLI always loads the latest skills. Idempotent (only
new/changed files) and soft-failing (never aborts a sync). Fixes the drift
where the global command set lagged the repo (e.g. /syncro was ~3 weeks
stale, and feature-request/forum-post/inject-standards/shape-spec were
missing globally) because the automated script skipped the doc's Phase 3.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per Winter: leave appointment type blank unless user names one of the known
types. If omitting, include delivery method in ticket subject for calendar
visibility. Applies to both the gather-inputs table and the appointment POST.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Only set contact_id when ticket is opened by/regarding a named contact.
Removed address_id, appointment_owner, and do_not_invite fields from the
default gather step — these are edge cases, not routine inputs.
Updated preview template to reflect default primary contact behavior.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Billing now uses add_line_item directly; timer_entry/charge_timer_entry removed
- Added Verified Response Shapes table for all endpoints (tested live against ACG internal customer)
- Billing workflow rewritten as strict 5-step locked script with no branches
- Added STOP rule: never try alternative endpoints/formats on unexpected responses
- bot-alerts section: explicit success ([OK] + message_id) and failure ([WARNING]) criteria
- Updated feedback memory to supersede the old timer-first rule
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Howard (624667664501178379) gets his ID pinned (full trust). Rob
(261978810713505792) added under a new "Recognized — Restricted
(read-only)" tier: greeted by name, but informational responses only —
no writes, git, system changes, M365, or vault. Restarted bot.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add .claude/scripts/post-bot-alert.sh — reusable, soft-failing Discord
poster that reads the bot token from the SOPS vault (bot-token.sops.yaml,
credentials.bot_token) with a .env fallback, so it works from any machine.
Wire it into the /syncro skill: a Hard Rules pointer, a billing-workflow
step (17), and a "Post to #bot-alerts" reference section with the message
format and ticket/invoice/customer link mapping (computerguru.syncromsp.com).
Scoped to write ops (create/update/close/comment/bill/customer); reads post
nothing. Best-effort — never fails the Syncro write it follows.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the placeholder so the owner is recognized from his first
message. Restarted bot to load the change.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Her Discord username is @Winter (ID 624666486362996755); store both so
the match against the [DISCORD_CONTEXT] block is robust. Restarted bot.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the (note on first interaction) placeholder with her user ID
624666486362996755 so the bot matches her from the [DISCORD_CONTEXT]
block immediately. Restarted the bot to load the change.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add Winter to the bot's known team members with full trust, and note she
is the go-to person for Syncro questions (also flagged on the /syncro
skill row). Restarted the bot to load the updated system prompt.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Reverse the no-questions rule (bot can/should ask via persistent thread
sessions), add a headless-operation constraint (no Chrome/credential
windows/GUI auth at BEAST), and add a Task Loop (identify requester ->
do work -> anything else? -> offer Syncro -> /save). Restarted the bot
service to load the corrected system prompt.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Rewrote with verified IPs and confirmed drivers. All 8 printers created and
shared via GuruRMM 2026-05-20. Deferred: FrontDesk Epson (needs Epson
Universal driver), Health-206 Konica Minolta (needs KM PCL6 Universal driver).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Hook now tries D:/claudetools then C:/claudetools so it works on both
Mike's machine and Howard's without either needing machine-local config.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fixed Exchange.ManageAsApp missing from Security Investigator app registration
- Granted role directly in Cascades tenant via Graph API
- Investigated Alma Montt mailbox: no delivery blocks found, specific sender TBD
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add DISCORD_CLAUDE.md as the Discord bot's dedicated system prompt,
replacing the main CLAUDE.md for bot sessions. Covers: no-interactive
rules, Discord user authorization, vault/remediation guidance, /save
after every task, and formatting rules for Discord.
- config.py: add discord_system_prompt field (default: projects/discord-bot/
DISCORD_CLAUDE.md, overridable via env var).
- client.py: _load_system_prompt() now loads discord_system_prompt path
with fallback to CLAUDE.md if file is missing.
- message_handler.py: inject [DISCORD_CONTEXT] header into every agent
message containing Discord username, display name, user ID, channel,
and guild so the agent always knows who is asking.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Comprehensive session log documenting the fix for broken coordination hooks
across all machines. The UserPromptSubmit hook now auto-creates the required
.claude/current-mode file with "general" as default if missing.
Session highlights:
- Root cause analysis of missing machine-local mode file
- Implementation of auto-creation logic in check-messages.sh
- Documentation updates in CLAUDE.md and ONBOARDING.md
- Successful deployment and sync with 15 remote commits
- Zero manual setup required for future machines
Impact: Fixes coordination hooks permanently, prevents fresh-clone failures
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
HOWARD-HOME installs to C: not D:, causing sync.sh to fail with
"Not in a git working tree" on that machine.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Created SG-Mgmt-RW, SG-Sales-RO, SG-Activities-RW in OU=Groups.
Created SMB shares Management, Sales, Activities, Server on D:\Shares
with ABE enabled and correct NTFS ACLs per group.
Scripts run on CS-SERVER via GuruRMM 2026-05-20. AD doc updated to live state.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Points submodule to 9d917c3: security, quality, and three new UI pages
from the 2026-05-19 audit pass.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Updates guru-rmm submodule pointer to include the audit report
(reports/2026-05-19-rmm-audit.md) and updated UI_GAPS.md living doc
from the /rmm-audit skill run.
Note: .claude/CLAUDE.md (/rmm-audit command row) and
.claude/skills/rmm-audit/SKILL.md were committed in the prior
sync at 5ead5d4.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5-pass audit: API/route inventory, UI gap detection, Rust quality, TypeScript
quality, and data integrity/security. Produces timestamped reports in
projects/msp-tools/guru-rmm/reports/ and keeps UI_GAPS.md current.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Cloud-only M365 user created, SPB license assigned, SSPR group added,
CA/MFA audit, Syncro billing for tickets #109316879 and #110120097.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The UserPromptSubmit hook requires .claude/current-mode to determine work mode
and gate coordination lock checks. This file is machine-local (gitignored) but
had no initialization logic for fresh clones, causing hooks to fail.
Changes:
- check-messages.sh: Added auto-creation logic with "general" as default
- CLAUDE.md: Documented auto-initialization behavior
- ONBOARDING.md: Added machine-local configuration section
- session-logs/2026-05-19-session.md: Documented investigation and fix
Impact:
- Fixes coordination hooks on all machines
- Prevents first-clone hook failures
- No manual setup required
- Backwards compatible
Resolves: "cood hook seems to be broken on all my machines"
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>