Skip to main content
AIDiveForge AIDiveForge
📝

Meeting Summary Template

Productivity & Ops · by AIDiveForge · Apr 17, 2026 · Beginner · ✓ 1 verified compat

Turn a transcript into decisions and assigned actions without inventing commitments.

Get decisions, owners, deadlines, open questions and transcript references.

Free · 2 KB · SKILL.md, instructions and example files. Provide the transcript and its meeting date/timezone when relative dates matter.

A worked example

A small example to try before using your own data.

Input

2026-10-16 meeting. 00:20 Maya: We will ship the pilot, not the full rollout. 00:45 Leo: I will draft the pilot checklist by October 20. 01:10 Maya: Pricing is still undecided.

Expected result

{
  "decisions": [
    {
      "decision": "Ship the pilot",
      "source": "00:20"
    }
  ],
  "actions": [
    {
      "owner": "Leo",
      "action": "Draft pilot checklist",
      "due": "2026-10-20",
      "source": "00:45"
    }
  ],
  "open_questions": [
    "Pricing remains undecided (01:10)"
  ]
}

What to check: There is one decision and one assigned action; do not turn the unresolved pricing question into a decision.

Limits: The output reflects the transcript, not attendees’ later agreement. Ambiguous owners and dates stay unresolved.

Worked example included. Model-specific performance and vendor compatibility have not been benchmarked.

Installation options and other formats

Install this skill

An agent skill starts with SKILL.md. The ZIP also includes its examples and any helper scripts. Drop the file into your tool of choice — or pick a different format if you use Cursor, Windsurf, Copilot, or something else.

Download SKILL.md
python3 - <<'ADF_SKILL_INSTALL'
import hashlib, io, os, stat, tempfile, urllib.request, zipfile
from pathlib import Path, PurePosixPath
folder = "meeting-summary-template"
root = Path(os.environ.get('ADF_SKILL_ROOT', str(Path.home() / '.claude' / 'skills'))).expanduser()
destination = root / folder
if destination.exists() or destination.is_symlink():
    raise SystemExit('An installation already exists. Back it up and merge the ZIP deliberately.')
root.mkdir(parents=True, exist_ok=True)
request = urllib.request.Request("https://aidiveforge.com/skill/meeting-summary-template.zip", headers={'User-Agent': 'AIDiveForge-Resource-Installer/1.0 (+https://aidiveforge.com/skills/)'})
with urllib.request.urlopen(request, timeout=30) as response:
    data = response.read(8 * 1024 * 1024 + 1)
if len(data) > 8 * 1024 * 1024 or hashlib.sha256(data).hexdigest() != "1dc93a7ed754dfc641bb3feaccf14e4650d4d94b737723a2894b897eb253258b":
    raise SystemExit('The download did not match this reviewed bundle. No files were installed.')
with zipfile.ZipFile(io.BytesIO(data)) as archive, tempfile.TemporaryDirectory(prefix='.adf-skill-', dir=root) as temporary:
    members = archive.infolist()
    if len(members) > 100 or sum(m.file_size for m in members) > 16 * 1024 * 1024:
        raise SystemExit('Unexpected archive size')
    for member in members:
        name = PurePosixPath(member.filename)
        if name.is_absolute() or '..' in name.parts or not name.parts or name.parts[0] != folder or '\\' in member.filename or stat.S_ISLNK(member.external_attr >> 16):
            raise SystemExit('Unsafe archive entry; nothing was installed')
        target = Path(temporary).joinpath(*name.parts)
        if member.is_dir():
            target.mkdir(parents=True, exist_ok=True)
        else:
            target.parent.mkdir(parents=True, exist_ok=True)
            with target.open('xb') as stream:
                stream.write(archive.read(member))
    staged = Path(temporary) / folder
    if not (staged / 'SKILL.md').is_file() or destination.exists() or destination.is_symlink():
        raise SystemExit('The skill could not be installed without replacing existing data')
    os.rename(staged, destination)
print('Installed the complete skill folder:', destination)
ADF_SKILL_INSTALL

Claude Code: ~/.claude/skills/meeting-summary-template/SKILL.md. Codex: ~/.codex/skills/meeting-summary-template/SKILL.md. Keep the complete ZIP folder when helper scripts are included.

🧠 Why it works

There is one decision and one assigned action; do not turn the unresolved pricing question into a decision.

⚙️ How it works

  1. Identify participants and distinguish proposals, decisions, rejected options and unresolved questions.
  1. Extract action items only when the transcript supports an obligation; preserve the named owner.
  1. Resolve relative dates only from a known meeting date and timezone. Otherwise retain the original phrase and flag it.
  1. Attach a timestamp or quote locator to each decision and action; keep uncertain speaker attribution explicit.
  1. Return a short recap followed by the action table and open questions.

Description

Get decisions, owners, deadlines, open questions and transcript references.

Provide the transcript and its meeting date/timezone when relative dates matter.

Limits: The output reflects the transcript, not attendees’ later agreement. Ambiguous owners and dates stay unresolved.

Recommended Use

Tools and workflow packs this skill pairs well with. Forge picks are auto-generated from category + capability signals; Community picks are added by people who've used the pairing.