CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

summarize-meeting

Use when the work-journal app asks to summarize a recorded meeting transcript into participants, summary, decisions, and action items.

Quality

86%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

The canonical home for this skill is summarize-meeting in chandler767/WorkJournal

SKILL.md
Quality
Evals
Security

summarize-meeting

Headless skill for the work-journal app. The prompt names one input file.

Rules

  • Read only the input file named in the prompt. Read nothing else and run no commands.
  • The input has one record per line. If the file is long, read it in parts (offset/limit) until you have read all of it, then answer.
  • Reply with ONLY one JSON object matching the schema below. No prose, no code fences.
  • Never invent meetings, people, or action items that the input does not support.
  • Empty input gives empty arrays and empty strings (for markdown skills, headings with "None." under each).

Input

JSON with meeting (id, app, start, end, title), transcript (t, speaker, text), and screens (descriptions of on-screen content). An imported recording (audio the user recorded on their phone) may also have user_note: {title, context_lines}, the user's own note about the recording; join context_lines with spaces. Any meeting may also have user_notes: notes the user wrote for the journal, each {kind, from, to, title, context_lines}. Join context_lines with spaces. from/to (HH:MM, to exclusive) is the time range a note covers; both are absent for a note on the whole day. Treat a context note like user_note.

Rules specific to this skill

  • The mic track speaker (You) is always the user; list it as {"speaker":"You","name":"","confidence":1} unless a name is given.
  • Name a remote speaker only when that speaker introduces themselves by name in the transcript (for example "Hi, I'm Priya") or from an on-screen participant label. Being addressed by name never names anyone: "thanks, Priya" does not say which speaker is Priya. Otherwise name is "".
  • confidence is 0-1; a self-introduction or a clear label is high, a weak inference below 0.7. Do not guess from voice or role.
  • List every distinct speaker label in participants.
  • summary: 2-4 sentences. decisions and action_items only when stated; owner is "" if unclear.
  • user_note is written by the user, not said in the meeting. Use it for context: what the event was, who was there, what the user cares about. Let it shape the summary's focus, but never report as said or decided anything only the note states. A person the note names becomes a speaker's name only when that speaker introduces themselves by it in the transcript. Being addressed by name never names anyone (Speaker 1 asking "Maya, what do you think?" does not say which speaker is Maya), and a matching topic (the note says Maya demoed, a speaker talks about a demo) is not enough, so name stays "".
  • A correction in user_notes is the user's own statement about what was recorded and can be used as given: a correction that explicitly names a speaker ("Speaker 2 at 15:00 is Maya") names that speaker, with confidence 1. Speech a correction says to disregard is left out of the summary.
  • Empty transcript gives {"participants":[],"summary":"","decisions":[],"action_items":[]}.

Output schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "summarize-meeting output",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "participants",
    "summary",
    "decisions",
    "action_items"
  ],
  "properties": {
    "participants": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "speaker",
          "name",
          "confidence"
        ],
        "properties": {
          "speaker": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "confidence": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          }
        }
      }
    },
    "summary": {
      "type": "string"
    },
    "decisions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "action_items": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "text",
          "owner"
        ],
        "properties": {
          "text": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          }
        }
      }
    }
  }
}
Repository

chandler767/WorkJournal

Path

.tessl/plugins/local/work-journal/skills/summarize-meeting/SKILL.md

Last updated
First committed

Canonical home

chandler767/WorkJournal
In sync

since Oct 14, 2026

Is this your skill?

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.