Choose how to run this agent
Download Agent
Choose how you want to use this agent:
Use Security Settings Key (Recommended)
Use the API key you've already saved in Security Settings. Quick and convenient!
- No need to re-enter API key
- Works offline after download
- Centralized key management
No API key found in Security Settings. Add one now
Enter API Key Manually
Enter your API key now for this specific agent download.
- Use different key for this agent
- One-time use (not saved)
- Works offline after download
Configure Agent Encryption
Description
Turn a meeting recording into a summary, key decisions, and action items, then ask follow-up questions — private and in-browser.
Source Code
# Accumulated transcript segments for this meeting: [{"source": name, "text": text}]
TRANSCRIPTS = []
async def _transcribe_audio(samples, name):
"""(JS-callable) Transcribe decoded audio samples and remember the result.
Underscore-prefixed so it is never exposed to the LLM as a tool. ``samples``
is a Float32Array of mono 16 kHz samples handed over by the page JS.
"""
text = (await agentop_ml.transcribe(samples)).strip()
TRANSCRIPTS.append({"source": name, "text": text})
return text
def _transcript_context():
return "\n\n".join(
f"[{i + 1}] (from {t['source']}) {t['text']}"
for i, t in enumerate(TRANSCRIPTS)
)
async def _generate_minutes():
"""(JS-callable) Turn the transcript into structured minutes via wllama."""
if not TRANSCRIPTS:
return "Upload a meeting recording first, then generate the minutes."
prompt = (
"You are given the TRANSCRIPT of a meeting. Produce concise minutes with "
"exactly these three sections, using this markdown:\n"
"## Summary\n(2-4 sentences)\n\n"
"## Key decisions\n(bullet list; write 'None recorded.' if none)\n\n"
"## Action items\n(bullet list of 'owner - task'; 'None recorded.' if none)\n\n"
"Use ONLY what is in the transcript; do not invent names or tasks.\n\n"
f"TRANSCRIPT:\n{_transcript_context()}"
)
return await process_user_query_wllama(
prompt, globals().get("TEMPLATE_SYSTEM_PROMPT", "")
)
async def process_user_query(query):
"""Free follow-up Q&A grounded ONLY in the meeting transcript.
Overrides the default router so context is deterministic (small local
models are unreliable at deciding to call tools themselves).
"""
if not TRANSCRIPTS:
return "No meeting has been transcribed yet - upload a recording first."
grounded_prompt = (
"Answer the QUESTION using ONLY the meeting TRANSCRIPT below. "
"If the answer is not in the transcript, say you could not find it. "
"Cite segment numbers like [1] where relevant.\n\n"
f"TRANSCRIPT:\n{_transcript_context()}\n\nQUESTION: {query}"
)
return await process_user_query_wllama(
grounded_prompt, globals().get("TEMPLATE_SYSTEM_PROMPT", "")
)
More by ozzo
Semantic Search
Search your own notes or documents by meaning, not keywords — instant results with no LLM download.
Voice Transcriber
Upload a voice note or audio file and get an instant transcript, then ask questions about it — all …
Document Q&A
Upload a PDF or text file and ask questions answered only from that document — fully in your browse…
Freelancer Tax Q&A Helper
Freelancer Tax Q&A Helper is a browser-executable AI agent template built on AgentOp. It runs entir…
ATS Resume Optimizer Agent
The ATS Resume Optimizer Agent helps you tailor your resume to specific job postings and stand out …
Contract Plain-Language Explainer Agent
Contracts are written by lawyers, for lawyers — but you’re the one signing them. The Contract Plain…