Use when the work-journal app asks which transcript utterances of an hour are bystander or personal non-work conversations to remove, and which spoken identifiers to redact.
87%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Headless skill for the work-journal app. The prompt names one input file. The app records audio around the user's laptop; this skill keeps other people's conversations and the user's private life out of the work journal.
{"drop":[],"redact":[]}.JSON object with exactly these fields:
day (string, YYYY-MM-DD) and hour (integer, 0-23).meetings: array of {id, app, start, end, participants} (start/end are HH:MM:SS). participants are the speaker labels heard in the meeting and names stored for it. app is the meeting app (e.g. zoom.us), or In person for a conversation detected only from voices near the laptop.known_people: names of people whose voices the user has enrolled (coworkers met in meetings).user_voice_enrolled: whether the user's own voice is enrolled. If false, the user's speech inside an In person meeting is labelled Speaker N like everyone else's.user_notes: corrections the user wrote about this recording, as {kind, from, to, title, context_lines}: kind is correction, from/to (HH:MM, to exclusive) the time range it covers, both absent for the whole day; join context_lines with spaces. Usually [].utterances: array of {index, time, track, speaker, text, context} in time order. time is HH:MM:SS. track is mic (the laptop microphone: the user and anyone nearby) or system (audio the computer played: calls, videos). You is the user. others, Speaker N and Speaker ? are unidentified voices; a name is a known voice. context: true lines were judged earlier and are given so you can follow the conversation. Never put a context line in redact. A drop range may include context lines when they belong to a conversation that the new lines now show is removable (e.g. a chat that started ambiguously); do not drop context lines for any other reason.Decide per conversation, then list the utterance index ranges to remove.
Remove (drop):
bystander: a conversation among people that does not include the user (You neither speaks in it nor is addressed by it) and is not part of a call or meeting. Typical: two unknown voices on the mic chatting about their weekend while the user is silent. In an In person meeting, judge the same way: it is a real meeting only if the user takes part (or, when user_voice_enrolled is false, if nothing shows the user is not one of the voices).personal_non_work: the user's own conversation with clearly non-work people about non-work matters: family, friends, partners, personal life (e.g. a call with a parent, dinner plans, a doctor's appointment). Both must hold: the other person is clearly not a coworker, and the topic is personal. This includes a whole call or meeting (any app, e.g. FaceTime) that is clearly a personal call with family or friends: drop both its mic and system lines.Keep (never drop):
app other than In person): it is work, unless the whole call is clearly a personal call with non-coworkers about personal matters (see personal_non_work).known_people or a meeting's participants who are named there are coworkers.User corrections (user_notes):
time is in its range). When it says to disregard, remove or ignore speech, drop exactly the speech it points to with reason user_note and confidence 1, even work talk and even when you would keep it. A correction that names only a range ("13:10-13:20 was people next to me, not me; disregard it") points to every non-context utterance in that range. One that names speakers, a track or a conversation ("disregard Speaker 3, the person next to me") points only to those utterances in its range: keep the rest, such as the user's own lines and a call's system track, unless the rules above drop them. Drop context lines only as the rules above allow.known_people or a meeting's participants is still a coworker, so keep. Drop the call as personal_non_work only when the rest of the recording shows both that he is not a coworker and that the topic is personal, as that rule requires. A correction that says who someone is never asks you to disregard their speech, so it never gives user_note.user_note as a reason without a correction asking for it.Ranges and confidence:
from and to are utterance indexes, inclusive, of consecutive utterances of one dropped conversation; reason is bystander, personal_non_work, or user_note (only for a correction, see above).confidence 0-1: 0.9+ when the text plainly shows it (e.g. "love you, mom"); 0.5-0.7 when it is a judgement call. Do not drop below 0.5; keep instead.Redact (redact), for every non-context utterance you keep:
{index, text} where text is the utterance's text unchanged except each identifier replaced by [redacted].redact.{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "privacy-filter output",
"type": "object",
"additionalProperties": false,
"required": [
"drop",
"redact"
],
"properties": {
"drop": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"from",
"to",
"reason",
"confidence"
],
"properties": {
"from": {
"type": "integer",
"minimum": 0
},
"to": {
"type": "integer",
"minimum": 0
},
"reason": {
"type": "string",
"enum": [
"bystander",
"personal_non_work",
"user_note"
]
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
}
}
},
"redact": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"index",
"text"
],
"properties": {
"index": {
"type": "integer",
"minimum": 0
},
"text": {
"type": "string"
}
}
}
}
}
}chandler767/WorkJournal
a1d9d08
Also appears in
since Oct 20, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.