sync: auto-sync from HOWARD-HOME at 2026-07-07 07:23:12
Author: Howard Enos Machine: HOWARD-HOME Timestamp: 2026-07-07 07:23:12
This commit is contained in:
@@ -29,6 +29,7 @@
|
|||||||
- [TickTick Integration](reference_ticktick_integration.md) — OAuth API integration, MCP server, SOPS vault creds, project/task CRUD.
|
- [TickTick Integration](reference_ticktick_integration.md) — OAuth API integration, MCP server, SOPS vault creds, project/task CRUD.
|
||||||
- [Client Docs Structure](reference_client_docs_structure.md) — clients/<name>/docs/ layout (overview, network, servers, cloud, security, rmm). Template: clients/_client_template/.
|
- [Client Docs Structure](reference_client_docs_structure.md) — clients/<name>/docs/ layout (overview, network, servers, cloud, security, rmm). Template: clients/_client_template/.
|
||||||
- [Client Wi-Fi Inventory](reference_client_wifi_inventory.md) — Building a fleet Wi-Fi list to connect onsite without asking. Passwords → vault `clients/<slug>/wifi.sops.yaml` (`credentials.<key>_ssid/_password`); readable index → `wiki/reference/client-wifi.md`. `/wifi` importer deferred (structure-only 2026-07-06).
|
- [Client Wi-Fi Inventory](reference_client_wifi_inventory.md) — Building a fleet Wi-Fi list to connect onsite without asking. Passwords → vault `clients/<slug>/wifi.sops.yaml` (`credentials.<key>_ssid/_password`); readable index → `wiki/reference/client-wifi.md`. `/wifi` importer deferred (structure-only 2026-07-06).
|
||||||
|
- [Discord read replies](feedback_discord_read_replies.md) — Discord DM replies don't come through coord/repo sync. Use `discord-dm.sh read <user>` to see if mike/winter/rob actually answered before assuming silence.
|
||||||
- [MSP Audit Scripts](reference_msp_audit_scripts.md) — server_audit.ps1 / workstation_audit.ps1 at projects/msp-tools/msp-audit-scripts/.
|
- [MSP Audit Scripts](reference_msp_audit_scripts.md) — server_audit.ps1 / workstation_audit.ps1 at projects/msp-tools/msp-audit-scripts/.
|
||||||
- [Pluto Build Server](reference_pluto_build_server.md) — Windows build VM: hostname PLUTO = Unraid VM "Claude-Builder" = 172.16.3.36 (all the same box). MSVC + WiX + Azure Trusted Signing. Drive via /rmm (agent enrolls as PLUTO) when SSH key isn't authorized.
|
- [Pluto Build Server](reference_pluto_build_server.md) — Windows build VM: hostname PLUTO = Unraid VM "Claude-Builder" = 172.16.3.36 (all the same box). MSVC + WiX + Azure Trusted Signing. Drive via /rmm (agent enrolls as PLUTO) when SSH key isn't authorized.
|
||||||
- [Coord /messages API shape](reference_coord_messages_api_shape.md) — GET /api/coord/messages returns {total,skip,limit,messages[]} NOT a bare array; parse .messages[], strip control chars, read flag may be null.
|
- [Coord /messages API shape](reference_coord_messages_api_shape.md) — GET /api/coord/messages returns {total,skip,limit,messages[]} NOT a bare array; parse .messages[], strip control chars, read flag may be null.
|
||||||
|
|||||||
26
.claude/memory/feedback_discord_read_replies.md
Normal file
26
.claude/memory/feedback_discord_read_replies.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
name: feedback_discord_read_replies
|
||||||
|
description: Discord DM replies are invisible to coord/repo sync — use `discord-dm.sh read <user>` to see if mike/winter/rob actually answered.
|
||||||
|
metadata:
|
||||||
|
type: feedback
|
||||||
|
---
|
||||||
|
|
||||||
|
When we DM someone via the `discord-dm` skill and wait on an answer, their reply does NOT
|
||||||
|
come through coord messages or repo sync — those channels never carry Discord replies. Before
|
||||||
|
telling the user "no reply yet / they didn't answer," READ the DM channel:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash .claude/scripts/discord-dm.sh read mike 10 # last 10 in the mike DM
|
||||||
|
bash .claude/scripts/discord-dm.sh read #dev-alerts # a channel
|
||||||
|
```
|
||||||
|
|
||||||
|
Output is oldest-first; lines marked `>>>` are from THEM (replies), indented lines are us.
|
||||||
|
|
||||||
|
**Why:** the bot participates in every DM channel it opened, so `GET /channels/<id>/messages`
|
||||||
|
returns full content — the Message Content privileged intent only gates gateway events, not this
|
||||||
|
REST fetch. Before adding `read` (2026-07-07, Howard flagged it) the wrapper was send-only, so
|
||||||
|
replies from mike/winter were silently missed.
|
||||||
|
|
||||||
|
**How to apply:** after DMing a question to mike/winter/rob, `read` that user to check for their
|
||||||
|
answer instead of assuming silence. Related: [[reference_community_forum]] is a different channel;
|
||||||
|
this is Discord DMs/channels via [[discord-dm]] (`.claude/scripts/discord-dm.sh`).
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
# Usage:
|
# Usage:
|
||||||
# discord-dm.sh <recipient> "message text"
|
# discord-dm.sh <recipient> "message text"
|
||||||
# echo "message text" | discord-dm.sh <recipient>
|
# echo "message text" | discord-dm.sh <recipient>
|
||||||
|
# discord-dm.sh read <recipient> [limit] # READ recent messages — SEE replies (default 15)
|
||||||
# discord-dm.sh list # show known users + channels
|
# discord-dm.sh list # show known users + channels
|
||||||
#
|
#
|
||||||
# <recipient> is one of:
|
# <recipient> is one of:
|
||||||
@@ -51,11 +52,29 @@ if [ -z "$RECIPIENT" ] || [ "$RECIPIENT" = "-h" ] || [ "$RECIPIENT" = "--help" ]
|
|||||||
sed -n '2,30p' "$0"; exit 1
|
sed -n '2,30p' "$0"; exit 1
|
||||||
fi
|
fi
|
||||||
if [ "$RECIPIENT" = "list" ]; then print_dir; exit 0; fi
|
if [ "$RECIPIENT" = "list" ]; then print_dir; exit 0; fi
|
||||||
|
|
||||||
|
# --- read mode: fetch recent messages so we can SEE replies (mike/winter/etc.).
|
||||||
|
# `discord-dm.sh read <user|#channel> [limit]` — reuses the recipient resolution,
|
||||||
|
# token, and DM-channel-open below, then prints history instead of sending. The
|
||||||
|
# bot participates in each DM channel it opened, so REST history returns full
|
||||||
|
# content (the Message Content intent only gates gateway events, not this fetch).
|
||||||
|
ACTION=send
|
||||||
|
if [ "$RECIPIENT" = "read" ] || [ "$RECIPIENT" = "inbox" ]; then
|
||||||
|
ACTION=read; shift
|
||||||
|
RECIPIENT="${1:-}"
|
||||||
|
[ -z "$RECIPIENT" ] && { echo "[ERROR] usage: discord-dm.sh read <user|#channel> [limit]" >&2; exit 1; }
|
||||||
|
fi
|
||||||
shift
|
shift
|
||||||
|
|
||||||
# --- message (remaining args, else stdin) ---
|
# --- message (send) or limit (read) ---
|
||||||
|
if [ "$ACTION" = "read" ]; then
|
||||||
|
READ_LIMIT="${1:-15}"
|
||||||
|
printf '%s' "$READ_LIMIT" | grep -qE '^[0-9]+$' || READ_LIMIT=15
|
||||||
|
[ "$READ_LIMIT" -gt 100 ] && READ_LIMIT=100
|
||||||
|
else
|
||||||
if [ "$#" -gt 0 ]; then MSG="$*"; elif [ ! -t 0 ]; then MSG="$(cat)"; else MSG=""; fi
|
if [ "$#" -gt 0 ]; then MSG="$*"; elif [ ! -t 0 ]; then MSG="$(cat)"; else MSG=""; fi
|
||||||
if [ -z "$MSG" ]; then echo "[ERROR] empty message — nothing sent" >&2; exit 1; fi
|
if [ -z "$MSG" ]; then echo "[ERROR] empty message — nothing sent" >&2; exit 1; fi
|
||||||
|
fi
|
||||||
|
|
||||||
# --- resolve recipient -> mode (dm|channel) + target id ---
|
# --- resolve recipient -> mode (dm|channel) + target id ---
|
||||||
MODE=""; TARGET=""; LABEL=""
|
MODE=""; TARGET=""; LABEL=""
|
||||||
@@ -99,6 +118,22 @@ if [ "$MODE" = "dm" ]; then
|
|||||||
TARGET="$CHID"
|
TARGET="$CHID"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# --- read mode: fetch + print recent messages, then exit (no send) ---
|
||||||
|
if [ "$ACTION" = "read" ]; then
|
||||||
|
MSGS="$(curl -s -m 20 "${auth[@]}" "$API/channels/${TARGET}/messages?limit=${READ_LIMIT}")"
|
||||||
|
if ! printf '%s' "$MSGS" | jq -e 'type=="array"' >/dev/null 2>&1; then
|
||||||
|
echo "[ERROR] could not read $LABEL: $(printf '%s' "$MSGS" | head -c 200)" >&2
|
||||||
|
bash "$ROOT/.claude/scripts/log-skill-error.sh" "discord-dm" "read history failed for $LABEL" --context "resp=$(printf '%s' "$MSGS" | head -c 80)" >/dev/null 2>&1
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
echo "[OK] discord-dm: last ${READ_LIMIT} message(s) in ${LABEL} (oldest first; '>>>' = reply from them, ' ' = us):"
|
||||||
|
printf '%s' "$MSGS" | jq -r 'reverse[] |
|
||||||
|
((if (.author.bot // false) then " " else ">>> " end)
|
||||||
|
+ (.timestamp[0:16]) + " " + .author.username + ": "
|
||||||
|
+ ((.content // "") | gsub("\n";" ")))'
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
# --- chunk: Discord caps content at 2000 chars (code 50035 on overflow).
|
# --- chunk: Discord caps content at 2000 chars (code 50035 on overflow).
|
||||||
# This tool's job is delivering LONG content intact, so split into <=1900-char
|
# This tool's job is delivering LONG content intact, so split into <=1900-char
|
||||||
# pieces (preferring newline boundaries) and send them in order — no markers
|
# pieces (preferring newline boundaries) and send them in order — no markers
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: discord-dm
|
name: discord-dm
|
||||||
description: "Send a Discord message to an org member DM or team channel via the ClaudeTools bot - copy-paste-friendly delivery of links/commands the terminal would mangle; address people by name (mike/howard/rob/winter). Triggers: DM <person> in discord, send that link to my discord, ping <person>."
|
description: "Send OR read Discord messages to/from an org member DM or team channel via the ClaudeTools bot - copy-paste-friendly delivery of links/commands the terminal would mangle, and READ replies (coord/repo sync does not carry Discord answers); address people by name (mike/howard/rob/winter). Triggers: DM <person> in discord, send that link to my discord, ping <person>, did <person> reply/answer, read discord replies, check discord DMs."
|
||||||
---
|
---
|
||||||
|
|
||||||
# discord-dm — direct Discord messaging to the org
|
# discord-dm — direct Discord messaging to the org
|
||||||
@@ -27,9 +27,26 @@ DMs** and deliberate channel posts.
|
|||||||
```bash
|
```bash
|
||||||
bash .claude/scripts/discord-dm.sh <recipient> "message text"
|
bash .claude/scripts/discord-dm.sh <recipient> "message text"
|
||||||
echo "message text" | bash .claude/scripts/discord-dm.sh <recipient>
|
echo "message text" | bash .claude/scripts/discord-dm.sh <recipient>
|
||||||
|
bash .claude/scripts/discord-dm.sh read <recipient> [limit] # READ recent messages — SEE replies (default 15)
|
||||||
bash .claude/scripts/discord-dm.sh list # print known users + channels
|
bash .claude/scripts/discord-dm.sh list # print known users + channels
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Reading replies (`read`)
|
||||||
|
|
||||||
|
Sends are one-way, but people **answer** — always `read` before assuming silence. The bot
|
||||||
|
participates in every DM channel it opened, so `GET /channels/<id>/messages` returns full
|
||||||
|
content (the Message Content privileged intent only gates *gateway* events, not this REST
|
||||||
|
fetch). Works for users and channels:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash .claude/scripts/discord-dm.sh read mike 10 # last 10 in the mike DM
|
||||||
|
bash .claude/scripts/discord-dm.sh read #dev-alerts # last 15 in #dev-alerts
|
||||||
|
```
|
||||||
|
|
||||||
|
Output is oldest-first; lines from **them** are marked `>>>`, lines from us are indented.
|
||||||
|
After DMing someone a question, `read` that user to check for their answer — coord/repo sync
|
||||||
|
does NOT carry Discord replies, so this is the only way to see them.
|
||||||
|
|
||||||
`<recipient>`:
|
`<recipient>`:
|
||||||
|
|
||||||
| Form | Effect |
|
| Form | Effect |
|
||||||
|
|||||||
@@ -3,29 +3,27 @@
|
|||||||
Online = ActiveConnections ProcessType==2 (guest agent connected). Recency = GuestInfoUpdateTime.
|
Online = ActiveConnections ProcessType==2 (guest agent connected). Recency = GuestInfoUpdateTime.
|
||||||
Rebuilt 2026-07-04. Staging installer pushed to all ONLINE machines (land in Staging -> reassign-staging.py).
|
Rebuilt 2026-07-04. Staging installer pushed to all ONLINE machines (land in Staging -> reassign-staging.py).
|
||||||
|
|
||||||
## ONLINE now (1)
|
## ONLINE now (2)
|
||||||
- IMC-PRINTSERVER [Instrumental Music Center] (1d)
|
- IMC-PRINTSERVER [Instrumental Music Center] (2d)
|
||||||
|
- WILLCOXDOTADMIN [Reliant Well Drilling and Pump Corporate] (0d)
|
||||||
|
|
||||||
## active <=14d (13)
|
## active <=14d (10)
|
||||||
- KAT1 [Business Services of Tucson LLC] (0d)
|
- KAT1 [Business Services of Tucson LLC] (1d)
|
||||||
- HSM-CATHY [Horseshoe Management] (3d)
|
- IMC-M-EDSERVICE [Instrumental Music Center] (0d)
|
||||||
- IMC-M-EDSERVICE [Instrumental Music Center] (4d)
|
|
||||||
- LAPTOP-PNVA9G51 [Instrumental Music Center] (6d)
|
- LAPTOP-PNVA9G51 [Instrumental Music Center] (6d)
|
||||||
- REPAIRADMIN [Instrumental Music Center] (3d)
|
- REPAIRADMIN [Instrumental Music Center] (4d)
|
||||||
- PLS-SERVER [PUTT LAND SURVEYING, INC.] (9d)
|
- PLS-SERVER [PUTT LAND SURVEYING, INC.] (10d)
|
||||||
- LAPTOP-73UDDTTK [Pro-Tech Services] (3d)
|
- DESKTOP-ARNPE1U [Safesite] (4d)
|
||||||
- WILLCOXDOTADMIN [Reliant Well Drilling and Pump Corporate] (3d)
|
- DESKTOP-V3H99FC [Safesite] (4d)
|
||||||
- DESKTOP-ARNPE1U [Safesite] (3d)
|
|
||||||
- DESKTOP-V3H99FC [Safesite] (3d)
|
|
||||||
- DESKTOP-V9F9L23 [Safesite] (0d)
|
- DESKTOP-V9F9L23 [Safesite] (0d)
|
||||||
- JEREE [Stamback Septic] (3d)
|
- JEREE [Stamback Septic] (4d)
|
||||||
- DESKTOP-6HT5SJ9 [The Marc Group] (0d)
|
- DESKTOP-6HT5SJ9 [The Marc Group] (0d)
|
||||||
|
|
||||||
## stale 15-45d (4)
|
## stale 15-45d (4)
|
||||||
- GND-L-3 [Grabb & Durando Law Office] (22d)
|
- GND-L-3 [Grabb & Durando Law Office] (23d)
|
||||||
- DESKTOP-KRHQ5TS [Instrumental Music Center] (17d)
|
- DESKTOP-KRHQ5TS [Instrumental Music Center] (18d)
|
||||||
- RWD-ALLENDESKTO [Reliant Well Drilling and Pump Corporate] (20d)
|
- RWD-ALLENDESKTO [Reliant Well Drilling and Pump Corporate] (20d)
|
||||||
- DESKTOP-FMDIK0Q [Safesite] (44d)
|
- DESKTOP-FMDIK0Q [Safesite] (45d)
|
||||||
|
|
||||||
## dead/no-session (58)
|
## dead/no-session (58)
|
||||||
- DESKTOP-SUFJR0J [Bill Tedards] (no SC)
|
- DESKTOP-SUFJR0J [Bill Tedards] (no SC)
|
||||||
@@ -40,22 +38,22 @@ Rebuilt 2026-07-04. Staging installer pushed to all ONLINE machines (land in Sta
|
|||||||
- Sheilaâs MacBook Pro [Heieck, Sheila] (no SC)
|
- Sheilaâs MacBook Pro [Heieck, Sheila] (no SC)
|
||||||
- HSM-RANDI [Horseshoe Management] (no SC)
|
- HSM-RANDI [Horseshoe Management] (no SC)
|
||||||
- HSM-SURFACE [Horseshoe Management] (no SC)
|
- HSM-SURFACE [Horseshoe Management] (no SC)
|
||||||
- DESKTOP-JQ0D38J [Instrumental Music Center] (107d)
|
- DESKTOP-JQ0D38J [Instrumental Music Center] (108d)
|
||||||
- DESKTOP-URV3UGR [Instrumental Music Center] (81d)
|
- DESKTOP-URV3UGR [Instrumental Music Center] (82d)
|
||||||
- IMC-EVENTS [Instrumental Music Center] (112d)
|
- IMC-EVENTS [Instrumental Music Center] (113d)
|
||||||
- IMC-L1-GRAPHICS [Instrumental Music Center] (no SC)
|
- IMC-L1-GRAPHICS [Instrumental Music Center] (no SC)
|
||||||
- PHIL [Instrumental Music Center] (no SC)
|
- PHIL [Instrumental Music Center] (no SC)
|
||||||
- PHIL2021LAPTOP [Instrumental Music Center] (143d)
|
- PHIL2021LAPTOP [Instrumental Music Center] (144d)
|
||||||
- PURCHASINGCOMP [Instrumental Music Center] (81d)
|
- PURCHASINGCOMP [Instrumental Music Center] (82d)
|
||||||
- LHLH [Little Hearts Little Hands] (no SC)
|
- LHLH [Little Hearts Little Hands] (no SC)
|
||||||
- WIN-KNVO6MUMMEM [Little Hearts Little Hands] (no SC)
|
- WIN-KNVO6MUMMEM [Little Hearts Little Hands] (no SC)
|
||||||
- CPC-chris-UZR6E [MVAN Enterprises Inc] (no SC)
|
- CPC-chris-UZR6E [MVAN Enterprises Inc] (no SC)
|
||||||
- DESKTOP-I7504C5 [MVAN Enterprises Inc] (no SC)
|
- DESKTOP-I7504C5 [MVAN Enterprises Inc] (no SC)
|
||||||
- Juneâs MacBook Pro [MVAN Enterprises Inc] (no SC)
|
- Juneâs MacBook Pro [MVAN Enterprises Inc] (no SC)
|
||||||
- MITCH-LAPTOP [MVAN Enterprises Inc] (140d)
|
- MITCH-LAPTOP [MVAN Enterprises Inc] (141d)
|
||||||
- DESKTOP-3VPT017 [Mineralogical Record] (no SC)
|
- DESKTOP-3VPT017 [Mineralogical Record] (no SC)
|
||||||
- DESKTOP-9QHSCIT [Mineralogical Record] (no SC)
|
- DESKTOP-9QHSCIT [Mineralogical Record] (no SC)
|
||||||
- DESKTOP-S1HPLDF [Multicultural Counseling Center] (66d)
|
- DESKTOP-S1HPLDF [Multicultural Counseling Center] (67d)
|
||||||
- PLS-FOUR [PUTT LAND SURVEYING, INC.] (no SC)
|
- PLS-FOUR [PUTT LAND SURVEYING, INC.] (no SC)
|
||||||
- PLS-FRONT [PUTT LAND SURVEYING, INC.] (no SC)
|
- PLS-FRONT [PUTT LAND SURVEYING, INC.] (no SC)
|
||||||
- PLS-LAPTOP [PUTT LAND SURVEYING, INC.] (no SC)
|
- PLS-LAPTOP [PUTT LAND SURVEYING, INC.] (no SC)
|
||||||
@@ -72,10 +70,10 @@ Rebuilt 2026-07-04. Staging installer pushed to all ONLINE machines (land in Sta
|
|||||||
- RELIANT-L01 [Reliant Well Drilling and Pump Corporate] (no SC)
|
- RELIANT-L01 [Reliant Well Drilling and Pump Corporate] (no SC)
|
||||||
- RELIANT-L02 [Reliant Well Drilling and Pump Corporate] (no SC)
|
- RELIANT-L02 [Reliant Well Drilling and Pump Corporate] (no SC)
|
||||||
- RELIANT-L03 [Reliant Well Drilling and Pump Corporate] (no SC)
|
- RELIANT-L03 [Reliant Well Drilling and Pump Corporate] (no SC)
|
||||||
- RWD-ALANLAPTOP [Reliant Well Drilling and Pump Corporate] (128d)
|
- RWD-ALANLAPTOP [Reliant Well Drilling and Pump Corporate] (129d)
|
||||||
- WILCOXADMIN [Reliant Well Drilling and Pump Corporate] (no SC)
|
- WILCOXADMIN [Reliant Well Drilling and Pump Corporate] (no SC)
|
||||||
- 1225-LENOVO-E16 [Safesite] (51d)
|
- 1225-LENOVO-E16 [Safesite] (52d)
|
||||||
- DESKTOP-QAR6D04 [Safesite] (144d)
|
- DESKTOP-QAR6D04 [Safesite] (145d)
|
||||||
- DEREK-LAPTOP [Stamback Septic] (no SC)
|
- DEREK-LAPTOP [Stamback Septic] (no SC)
|
||||||
- DESKTOP-1BS5JL4 [Stamback Septic] (no SC)
|
- DESKTOP-1BS5JL4 [Stamback Septic] (no SC)
|
||||||
- DESKTOP-JVLQQIJ [Stamback Septic] (no SC)
|
- DESKTOP-JVLQQIJ [Stamback Septic] (no SC)
|
||||||
@@ -83,6 +81,6 @@ Rebuilt 2026-07-04. Staging installer pushed to all ONLINE machines (land in Sta
|
|||||||
- STAMBACK-JBECK [Stamback Septic] (no SC)
|
- STAMBACK-JBECK [Stamback Septic] (no SC)
|
||||||
- STAMBACK-NEW06 [Stamback Septic] (no SC)
|
- STAMBACK-NEW06 [Stamback Septic] (no SC)
|
||||||
- STAMBACK-NEW06 [Stamback Septic] (no SC)
|
- STAMBACK-NEW06 [Stamback Septic] (no SC)
|
||||||
- LAPTOP-JMUNGO [The Marc Group] (56d)
|
- LAPTOP-JMUNGO [The Marc Group] (57d)
|
||||||
- DESKTOP-SRUOH4R [The Prairie Schooner] (no SC)
|
- DESKTOP-SRUOH4R [The Prairie Schooner] (no SC)
|
||||||
- DESKTOP-TS1P9MT [The Prairie Schooner] (no SC)
|
- DESKTOP-TS1P9MT [The Prairie Schooner] (no SC)
|
||||||
|
|||||||
Reference in New Issue
Block a user