Inspiration

Meeting details are scattered across emails, and they change: a room moves, a time shifts, an event is cancelled. Keeping a calendar correct means rereading threads and checking conflicts by hand. I wanted an agent that does the reading and checking, while I stay in charge of every change.

What it does

Agenda Assistant reads the inbox (read-only IMAP), finds meetings and appointments, and uses the newest email when plans change. It checks every slot against the calendar and shows a proposal table. It adds events only after I approve them. Vague requests ("quick call sometime") are not guessed: it asks. Conflicts are flagged, never overwritten. Instructions hidden inside emails are treated as data, not orders.

How I built it

  • Model: nvidia/nemotron-3-super-120b-a12b, served by Nebius Token Factory. Every reasoning step is a runtime call to the Token Factory API (the NemoClaw gateway log shows each call).
  • Runtime: NVIDIA NemoClaw (OpenClaw agent in an OpenShell sandbox). The agent's behavior is defined by two workspace files, SOUL.md (role and rules) and TOOLS.md.
  • Tools: a dependency-free Node CLI (tools/agenda.mjs) prints JSON: list emails, list events, check conflicts, add and remove events. Offline tests included.
  • Division of labor: the model understands language and dates; the code does the exact work (validating dates, detecting overlaps, saving events).
  • Real mailbox: a host-side script syncs recent emails over read-only IMAP (EXAMINE, BODY.PEEK) with cron, so the mailbox password never enters the sandbox.

Challenges

Sandbox files can arrive damaged after an upload, so I added checksums and write-and-sync helpers. Agent instruction files only load when a new session starts. Keeping the agent from guessing vague dates required explicit rules.

What I learned

Let the model handle language and let code handle exactness. Human approval for every change makes an always-available assistant safe to trust.

What's next

Always-on mode with a "seen emails" store, a today command for relative dates, and an automated evaluation of the sample inbox.

Built With

Share this project:

Updates

Submission history