From zlp-harness
Use when the user asks for a weekly advisor check, student TODO follow-up, research supervision update, or current external updates for a zlp-harness Zulip stream.
How this skill is triggered — by the user, by Claude, or both
Slash command
/zlp-harness:zlp-advisorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Run a weekly advisor pass over the harness Zulip stream: read the last week of discussion, audit student TODOs, find current reliable external updates from the last month, and draft a concise Zulip post. This skill is for recurring supervision; do not use it for ordinary one-off replies.
Run a weekly advisor pass over the harness Zulip stream: read the last week of discussion, audit student TODOs, find current reliable external updates from the last month, and draft a concise Zulip post. This skill is for recurring supervision; do not use it for ordinary one-off replies.
Use exact dates in summaries. Default "last week" to the last 7 calendar days ending today unless the user specifies a different weekly window.
Read CLAUDE.md first for project conventions. Resolve the workspace path from make zulip-config, then update the archive through the Makefile, never by calling zlp directly:
eval "$(make zulip-config | sed 's/^\([^=]*\)=\(.*\)$/CFG_\1=\x27\2\x27/')"
WS_DIR="${ZULIP_WORKSPACE_DIR:-$CFG_ZULIP_WORKSPACE_DIR_DEFAULT}"
find "$WS_DIR" -path '*/.*' -prune -o -name '*.md' -print -quit 2>/dev/null
# Empty result: first run
make zulip-pull IMPORT_HISTORY=1
# Otherwise
make zulip-pull
If the pull fails because credentials are missing, stop and invoke zlp-onboard. If the stream has no messages in the selected window, say so and still offer to search for current external updates.
From $WS_DIR, read messages whose YAML timestamp falls in the selected date window. Parse at least:
sender_full_nametimestampsubjectpermalink_archive.attachmentsOpen attachments referenced by _archive.attachments. Read 3-5 neighboring messages in the same topic when a TODO or technical claim needs context.
Produce a private working summary grouped by topic:
- <date> [<topic>] <sender>: <gist> (<permalink>)
Identify students from project notes, recurring Zulip participants, or explicit user input. If a roster is ambiguous, ask the user once before posting.
Build one consolidated TODO table across the whole team — not a separate audit per student. Pull TODO-like commitments from this week and the previous weekly advisor/TODO thread. Treat these as TODOs:
TODO, to do, next week, plan, action itemFor every TODO, record: a one-line description, the owner, and a status. Statuses:
Do not invent completion status; rely on what Zulip actually shows. Do not overwrite a TODO with your own plan unless the draft clearly asks the owner to confirm or edit it.
Browse for updates published within the last 30 days (calendar days, ending today). Anything older is out of scope for this section. Before searching, read the Reliable update sources (zlp-advisor) section in CLAUDE.md if present and use it as the source policy.
Search based on:
CLAUDE.mdCLAUDE.mdPrefer reliable primary or near-primary sources:
Avoid unsourced social posts, SEO blogs, and generic news summaries unless the project domain specifically depends on them. If search results are weak, say so and post fewer (or zero) external updates rather than padding.
If CLAUDE.md has no reliable-source section, pause and ask the user to choose source types, keywords, and important names/venues to watch.
Deduplicate before recommending. For every candidate update, check:
.knowledge/INDEX.md and .knowledge/ filenames — skip if the arXiv ID, DOI, or title already appears.weekly advisor posts in $WS_DIR — skip if already recommended.Match on arXiv ID, DOI, or normalized title (lowercased, punctuation stripped). When in doubt, do not recommend; note it as a near-duplicate in your working notes instead.
Select 0-3 updates that survive both the recency and dedup filters. For each, record:
.knowledge/ reference)Use the topic weekly advisor unless the project says otherwise. Verify it:
make zulip-topics | grep -F "weekly advisor"
Draft in $CFG_ZULIP_DRAFTS_DIR/weekly-advisor-YYYY-MM-DD.md (the workspace's .drafts/ subdir, never inside the repo). Keep it short and human — a brief advisor note, not a report. Prefer short paragraphs and a few bullets.
Hi all, quick check-in for YYYY-MM-DD to YYYY-MM-DD.
<One short paragraph: the most important thing that moved this week, with a link.>
TODOs:
| TODO | Owner | Status |
| --- | --- | --- |
| <one-line task> | @<owner> | Done / In progress / At risk / New |
| <one-line task> | @<owner> | ... |
Recent reads (last 30 days):
- [<Title>](<url>) (<date>) — <one line on why it matters here>
Rules before showing the draft:
.knowledge/, prior Zulip messages, or earlier weekly-advisor posts. Drop the section entirely if nothing qualifies.Show the draft to the user first. Do not send until the user explicitly approves.
Before sending, verify the topic exists:
make zulip-topics | grep -F "weekly advisor"
If the topic does not exist, ask whether to create it or use another topic. Then send:
make zulip-send TOPIC="weekly advisor" MSG_FILE="$CFG_ZULIP_DRAFTS_DIR/weekly-advisor-YYYY-MM-DD.md"
make zulip-pull
After sending, confirm that the post was mirrored back into the workspace archive; retry make zulip-pull once if needed.
.knowledge/, recent Zulip, and prior weekly-advisor posts — no duplicates.| Mistake | Fix |
|---|---|
| Treating this as a normal reply | This is a weekly supervision pass: TODO audit plus current external updates. |
| Splitting TODOs into per-student sections | One consolidated table; flag the owner in the row. |
| Assigning new work while ignoring existing TODOs | Carry prior TODOs forward as rows first, then add new rows only when they do not conflict. |
| Inventing completion status | Use what Zulip actually shows; mark At risk when there is no acknowledgement. |
| Generic encouragement | Tie feedback to a specific TODO row. |
| Guessing student status | Use Zulip evidence; mark unknown or blocked when evidence is absent. |
| Posting stale "latest" updates | Only include sources published within the last 30 days. |
| Recommending a paper already in the library | Check .knowledge/INDEX.md, recent Zulip, and prior weekly-advisor posts before listing. |
| Listing papers without relevance | Each update must say how it helps this project. |
| Padding the updates section | 0-3 entries; drop the section if nothing qualifies. |
| Sending without approval | Always show the draft and wait for explicit approval. |
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub giggleliu/zlp-harness --plugin zlp-harness