Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>KaigiBoxNew to Visual Studio Code? Get it now.
KaigiBox

KaigiBox

Beagle Ridge LLC

| (0) | Free
Meeting notes and minutes in VS Code — JSON metadata, markdown content, search, KachiBox action links.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

KaigiBox

Meeting notes and minutes in VS Code. (会議 — kaigi)

One JSON file per meeting with structured metadata and markdown fields. Browse by project / title / subtitle, edit in a custom sectioned editor, search across project and global stores, and link actions to KachiBox tasks.

  • Portable — plain JSON on disk; edit in the KaigiBox UI or open as raw JSON
  • Project + global — workspace meetings in .vscode/meetings plus an optional machine-wide folder
  • Structured — agenda, notes, decisions, attendees, actions, and custom fields in one file

Install: run from source (see For developers) or install a packaged .vsix when published.

KaigiBox meetings tree

KaigiBox meeting editor

KaigiBox search

Getting started

  1. Open a workspace folder in VS Code or Cursor.
  2. Click the comment icon in the Activity Bar to open KaigiBox → Meetings.
  3. Click New meeting in the welcome panel or the + button in the view title bar.
  4. Pick a template (or Blank meeting), choose Project or Global storage if prompted, and enter project / title / subtitle.
  5. The meeting opens in the KaigiBox Meeting editor. Click Save when you are done.

Meeting JSON files under .vscode/meetings/**/*.json or your global meetings folder open in the KaigiBox editor by default.

Sidebar — Meetings tree

The tree mirrors your on-disk folder layout:

{storage root}/
  {project}/
    {title}/
      {subtitle}/          ← optional third level
        YYYY-MM-DD-title.json
Root Meaning
Workspace (home icon) .vscode/meetings in the open workspace
Global (globe icon) ~/.kirokubox/meetings (or kaigibox.meetingsDirectory)

Toolbar (view title bar):

Button Action
+ New meeting (same as command palette)
Search Open the main-area search panel
Actions roll-up List every incomplete action; group, filter, mark done (checklist icon)
Refresh Reload the tree from disk
Today Show only meetings dated today (click again to clear)
This week Show meetings in the current calendar week (Sun–Sat)
Open actions Tree filter: meetings with at least one incomplete action
By project Pick a project name; only that project’s meetings remain
Show all Show every meeting; clears any active filter

The view title shows the active filter (e.g. Today, Project: Client Acme). KaigiBox: Filter Meetings Tree in the command palette offers the same options in one menu.

Context menu / inline actions:

Action When
New Meeting Here On a root, folder, or meeting — pre-fills project / title / subtitle from that location
Follow-up Meeting On a meeting — new meeting today in the same folder; copies agenda, attendees, and open actions; notes and decisions start empty
Duplicate Meeting On a meeting — new meeting today with a full copy of agenda, notes, decisions, attendees, and all actions
Drag and drop Drag a meeting onto a folder, storage root, or another meeting to move it into that location (multi-select supported); dropping across project ↔ global asks for confirmation
Move Meeting to… On a meeting — relocate between workspace (project) and global storage (confirmation required)
Delete Meeting On a meeting — permanently delete the JSON file (confirmation required; closes the editor tab)
Copy as Markdown On a meeting, folder, or storage root — copy to clipboard (folder/root exports all meetings inside)
Save as Markdown Same scope as copy — save a .md file via dialog
Rename Folder On a project, title, or subtitle folder
Delete Folder On a folder (deletes all meetings inside; confirmation required)

Follow-up and duplicate also appear in the command palette (KaigiBox: Follow-up Meeting, KaigiBox: Duplicate Meeting). With no tree selection, the command uses the active meeting editor tab or prompts you to pick a source meeting.

Copied meetings get a new id and today’s date. Action rows receive new ids; done flags and KachiBox links are cleared. Attendee Present checkboxes reset for the new session.

Meeting rows show a date label (Today, Yesterday, weekday, or formatted date). Open action items appear as a suffix, e.g. (2). Today’s meetings use a green icon; other dates use yellow.

Actions panel (sidebar)

Below the Meetings tree, the Actions webview shows storage summary and shortcuts:

Control Action
Calendar Open the month calendar view (same as KaigiBox: Calendar)
Save to Git Commit and push the whole git worktree for configured meetings roots (shown when the meetings folder is inside a git repo; includes sibling tasks/ / config/ when they share the repo, e.g. ~/.kirokubox)
Open folder Open the meetings directory in the OS file manager — when both project and global stores are active, opens the global folder (~/.kirokubox/meetings); project meetings remain under .vscode/meetings in the workspace

The footer shows which storage is active (project, global, or both), total meeting count, and an uncommitted-changes indicator when git sync applies. Use kaigibox.gitSyncTarget (both, project, or global) to choose which meetings folder(s) Save to Git uses to locate git repos; each sync commits the full repository worktree (not only meetings/).

Status bar

When kaigibox.showStatusBar is enabled (default), the status bar shows a compact summary, for example:

2 today · 5 open actions or 3 this week · 2 overdue

Click the item to open the Open actions roll-up panel. Hover for a full breakdown. Overdue open actions use the warning background color. Set kaigibox.showStatusBar to false to hide it.

Open actions roll-up

KaigiBox: Open Actions Roll-up (Ctrl+Shift+A / Cmd+Shift+A) opens a panel listing every incomplete action across project and global stores.

Feature Behavior
Group by Folder / person icons — Project or Assignee (unassigned actions grouped under Unassigned)
Filter Narrow by action text, assignee, meeting title, project, or due date
Open Click a row to open the meeting and jump to the Actions tab (row highlighted)
Mark done Check one or more actions, then Mark done — saves each affected meeting once

Overdue actions are highlighted in red; due-today actions use a warning accent. The panel refreshes when meetings change on disk.

Meeting editor

Header

Control Purpose
Save Writes JSON to disk; shows Save * when there are unsaved edits
Save menu (▼) Save as template…, Copy as markdown, Save as markdown…
Date Meeting date (YYYY-MM-DD); calendar icon opens the date picker
Project / Title / Subtitle Folder metadata; autocomplete suggests names from existing meetings and folders
Timestamps Created and updated times (hover for full ISO values)
Find Open in-meeting search (Ctrl+F while the editor is focused)
← Previous / Next → Jump to the older or newer meeting in the same series folder (same project / title / subtitle path); hidden when you are the only meeting in that folder

Changing project, title, or subtitle and saving moves the file to the matching folder. Changing date or title renames the JSON file.

Tabs

Tab Contents
Notes Primary meeting notes (markdown)
Agenda Pre-meeting agenda (markdown)
Attendees Name, email, role, company; Present checkbox; add from saved lists
Actions Action items with assignee, optional due date, done checkbox, KachiBox link
Decisions Decisions log (markdown)
Custom Fields defined in fields.json

Notes → action links

In Notes (rich or raw), select text and right-click:

Menu item Behavior
Add action Creates a new action row, replaces the selection with a jump link, and switches to the Actions tab with the row highlighted
Link to Action: … (When the meeting already has actions) Links the selection to an existing action only — inserts [label](https://gitlab.com/joel.j.maleport/kaigibox/-/blob/HEAD/kaigibox-action:{id}) and stays on Notes

Click any action link in notes to jump to that action (tab switch and row highlight). Links are stored as [label](https://gitlab.com/joel.j.maleport/kaigibox/-/blob/HEAD/kaigibox-action:{id}) in the markdown source.

Markdown fields (Notes, Agenda, Decisions)

Each markdown tab has Rich and Raw modes:

  • Rich — WYSIWYG-style editing with lightweight formatting (headings, lists, bold, links, tables). Format applies markdown structure to the current content.
  • Raw — Edit the markdown source directly.

Inline HTML (raw and rich round-trip) — a small, sanitized subset of HTML is supported when you need styling markdown cannot express:

Tag Purpose
<span style="…"> Color, fonts, weight, decoration, background (see allowed properties below)
<mark> Highlight
<sub> / <sup> Subscript / superscript
<u> Underline
<small> Smaller text
<font color="…" face="…" size="…"> Legacy font tag (saved as a styled <span>)

Allowed style properties on <span>: color, background-color, background, font-family, font-size, font-weight, font-style, text-decoration, text-decoration-line, vertical-align, letter-spacing. <span> may also keep safe class and title values. Scripts, iframes, event handlers, and unsafe CSS (e.g. url()) are stripped.

Example in raw mode:

Decision: <span style="color:#1a7f37; font-weight:600">approved</span> — see <mark>section 4</mark>.

Standard markdown still covers headings, bold/italic, links, images, lists, blockquotes, code blocks, tables, and horizontal rules. Raw <div>, <p>, <br>, and strikethrough tags are not supported; use markdown paragraphs, single newlines for line breaks, and ~~strikethrough~~ where applicable.

Notes formatting toolbar — a horizontal toolbar at the bottom of Notes (visible in Maximize mode too) plus keyboard shortcuts when any markdown field is focused:

Shortcut Action
Ctrl+B / Cmd+B Bold
Ctrl+I / Cmd+I Italic
Ctrl+` Inline code
Ctrl+K Link (prompts for URL)
Ctrl+Shift+X Strikethrough (~~…~~)
Ctrl+Alt+1 … 3 Heading 1–3
Ctrl+Shift+8 Bullet list
Ctrl+Shift+7 Numbered list
Tab / Shift+Tab Indent / outdent list item or paragraph (Rich and Raw)
Ctrl+Shift+. Blockquote
Ctrl+Shift+- Horizontal rule
Alt+Shift+H Highlight (<mark>)
Alt+Shift+U Underline
Ctrl+Shift+I Insert image ![alt](https://gitlab.com/joel.j.maleport/gazobox/-/raw/main/kaigibox/path)

Toolbar buttons also cover text color (six swatches — yellow, green, blue, pink, white, black by default — plus + for custom), subscript, superscript, table template, and Tx (clear formatting). Customize swatches with kaigibox.notesFormatColors (array of hex colors).

Edits sync to the backing JSON document as you type (debounced). Use Save to persist to disk.

Undo / redo — While the KaigiBox meeting editor is focused, Ctrl+Z / Ctrl+Shift+Z (Mac: Cmd+Z / Cmd+Shift+Z) undo and redo edits in the webview. Ctrl+Y also redoes on Windows.

Recover unsaved edits — When kaigibox.backupDrafts is on (default), in-progress edits are backed up under ~/.kirokubox/config/drafts while you type. If you close VS Code without saving, reopening that meeting offers Recover unsaved edits or Discard and use saved file. Auto-save (kaigibox.autosaveIntervalSeconds, default 60) writes dirty meetings to disk periodically; set to 0 to disable.

Attendees

  • Type a name — autocomplete suggests people from other meetings (↑↓, Enter).
  • Check Present for attendees who joined; absent rows are styled muted.
  • Add from list… (footer dropdown) appends everyone from a saved roster in attendee-lists.json — see Attendee lists for where to create that file and the JSON format.
  • Email fields show a mailto: link when filled.

Actions and KachiBox

Link meeting actions to KachiBox tasks

  1. Add action rows in the Actions tab (optional Due date per action).
  2. Click Link to KachiBox on an action (requires KachiBox). A new task is created, KachiBox opens with that task’s checklist ready to edit. Default store: global (kaigibox.linkKachiboxTaskStorage).
  3. KaigiBox creates a task JSON under .vscode/tasks/{year}/ with sourceMeetingId, sourceActionId, and sourceMeetingPath. Metadata copied on link:
    • Due date → task dueDate
    • Meeting priority custom field (default field id priority) → task priority
    • Labels: meeting, project, title, subtitle, and assignee:… when set
  4. Linked / Open in KachiBox jumps to the linked task (including done or archived tasks); in KachiBox use Open meeting on linked tasks to return to the source meeting.
  5. Done syncs both ways when a linked task is completed or reopened.
  6. With kaigibox.syncLinkedActions (default on), action text, assignee, and due date sync when you save the meeting or edit the task in KachiBox.

KachiBox is optional; linking fails gracefully with a message if it is not installed.

Find in meeting

  • Ctrl+F (or Find in the header) opens the find bar.
  • Aa — match case; Whole words (default on) — token boundaries (e.g. Pilot does not match Copilot); .* — regular expression (disables whole words).
  • ↑ / ↓ cycle matches; status shows match index and a short snippet.
  • Highlights use the editor find-match theme color.

Search panel

KaigiBox: Search Meetings opens a full editor-tab search UI.

  • Type to search; results update after a short debounce.
  • Field dropdown limits search to one area (project, title, notes, actions, etc.) or All fields.
  • Preset dropdown: built-in Open actions and Last 30 days, plus entries from kaigibox.searchPresets in settings.
  • Search options: Whole words (default), Aa (match case), .* (regex), Fuzzy (typo-tolerant via Fuse.js; disables the strict toggles).
  • Empty query lists all meetings (or those matching the selected preset filter).
  • Default mode is whole-word phrase matching; set kaigibox.searchMode to fuzzy for fuzzy as the initial toggle state.
  • Click a result to open that meeting in the KaigiBox editor.
  • Result cards show project path, date, Project / Global scope badge, and a match excerpt when applicable.

Go to Meeting

KaigiBox: Go to Meeting (Ctrl+Shift+G / Cmd+Shift+G) opens a quick pick of meetings by title and date. Recently opened meetings appear first.

Calendar view

KaigiBox: Calendar (Ctrl+Shift+C / Cmd+Shift+C) opens a month grid in the main editor area. Week rows run Sunday through Saturday, matching the This week tree filter.

Feature Behavior
Month navigation Previous / next month; Today jumps to the current date
Day cells Dots or counts show days that have meetings; today and the selected day are highlighted
Day list Click a day to list meetings on that date; click a row to open the meeting
Search Filter meetings from the calendar (field dropdown, whole words, Aa, regex, fuzzy) — matching days highlight on the grid; results list replaces the day list while search is active

Also available from the sidebar Actions panel Calendar button or the Meetings welcome links.

Commands

Command Description
KaigiBox: Show Meetings Focus the Meetings sidebar
KaigiBox: New Meeting Create a meeting (template + location prompts)
New Meeting Here Create under the selected tree node
KaigiBox: Search Meetings Open search panel
KaigiBox: Calendar Month calendar of meetings; search and open by date
KaigiBox: Go to Meeting Quick pick to open a meeting by title and date
KaigiBox: Open Actions Roll-up All incomplete actions, grouped; jump to meeting; bulk mark done
KaigiBox: Import Markdown Meetings Import from a folder (see below)
KaigiBox: Save as Template Save active meeting JSON as a template
KaigiBox: Open Meeting as JSON Reopen with the built-in text editor
KaigiBox: Open Meeting Open by file path or meeting id (API / KachiBox)
KaigiBox: Find in Meeting Focus find bar in the custom editor
KaigiBox: Save Meeting Save the active KaigiBox meeting (Ctrl+S / Cmd+S in the custom editor)
KaigiBox: Refresh Refresh sidebar tree
Delete Meeting Permanently delete the selected meeting file (tree context menu; confirmation required)
Rename Folder / Delete Folder Folder operations in the tree
KaigiBox: Set Meeting Action Done Internal — KachiBox sync for linked actions
KaigiBox: Follow-up Meeting New session from an existing meeting (open actions, standing agenda)
KaigiBox: Duplicate Meeting Full copy of an existing meeting as a new file today
KaigiBox: Move Meeting to… Move a meeting between project and global stores
KaigiBox: Filter Today / This Week / Open Actions / By Project Sidebar tree filters (toggle off by clicking again or Show All Meetings)
KaigiBox: Filter Meetings Tree Combined filter quick pick
KaigiBox: Show All Meetings Clear the active tree filter
KaigiBox: Copy as Markdown Copy meeting(s) as markdown (tree, editor save menu, or quick pick)
KaigiBox: Save as Markdown Save meeting(s) to a .md file
KaigiBox: Show Log Open the KaigiBox output panel (scan warnings, meeting folder paths)

Keyboard shortcuts

Shortcut (Windows / Linux) Mac Command
Ctrl+Shift+M Cmd+Shift+M New meeting
Ctrl+Alt+F Cmd+Alt+F Search meetings
Ctrl+Shift+G Cmd+Shift+G Go to meeting
Ctrl+Shift+C Cmd+Shift+C Calendar
Ctrl+Shift+A Cmd+Shift+A Open actions roll-up (status bar click opens the same panel)
Ctrl+Shift+L Cmd+Shift+L Show log
Ctrl+S Cmd+S Save meeting (KaigiBox editor only)
Ctrl+F Cmd+F Find in meeting (KaigiBox editor only)

Ctrl+Alt+F / Cmd+Alt+F opens meeting search (leaves VS Code Find in Files on Ctrl+Shift+F).

Storage and settings

Setting Default Description
kirokubox.homeDirectory (empty → ~/.kirokubox) Shared global home for KaigiBox and KachiBox (meetings/, config/, tasks/)
kaigibox.storageLocation automatic automatic loads both project and global meetings when a workspace is open; project or global use one store
kaigibox.meetingsDirectory (empty → ~/.kirokubox/meetings) Global meetings folder; supports ~
kaigibox.configDirectory (empty → ~/.kirokubox/config) Global templates, fields.json, attendee lists
kaigibox.autoRefresh true Refresh tree and search when meeting files change on disk
kaigibox.backupDrafts true Back up in-progress meeting edits to ~/.kirokubox/config/drafts; Recover unsaved edits on reopen
kaigibox.autosaveIntervalSeconds 60 Auto-save open meetings every N seconds when dirty (0 = off)
kaigibox.notesFormatColors ["#ffe140","#93c83e","#007fff","#ee0c8d","#ffffff","#000000"] Notes toolbar text-color swatches (hex); + still opens custom picker
kaigibox.gitSyncTarget both Which meetings folder(s) Save to Git uses to find git repos (both, project, or global); each sync commits the whole worktree
kaigibox.showStatusBar true Status bar summary (this week / open actions / overdue); click opens open-actions roll-up
kaigibox.notifyFollowUpDates true Notifications when follow-up date fields are due or overdue
kaigibox.followUpDateFieldIds ["followUpDate"] Custom field ids to watch (plus any with notifyWhenDue in fields.json)
kaigibox.searchMode wholeWord Default search panel mode: wholeWord or fuzzy
kaigibox.searchUseIndex true Cache flattened meeting text by file mtime for faster search
kaigibox.searchPresets [] Named presets: { "label", "query?", "field?", "project?" }
kaigibox.linkKachiboxTaskStorage global Store for new tasks from Link to KachiBox: global (kachibox.tasksDirectory) or project (.vscode/tasks)
kaigibox.syncLinkedActions true Sync linked action text, assignee, and due date with KachiBox tasks
kaigibox.linkPriorityFieldId priority Meeting custom field used as KachiBox priority when linking

On-disk layout

Scope Meetings Config
Project .vscode/meetings/{project}/{title}/{subtitle}/ .vscode/kaigibox/ — fields.json, attendee-lists.json, templates/
Global ~/.kirokubox/meetings/… (same folder shape) ~/.kirokubox/config/ — same files as project config

Legacy paths .kaigibox/meetings/**/*.json and .kirokubox/meetings/**/*.json are registered for the custom editor selector. Data in ~/.kaigibox or ~/.kachibox migrates to ~/.kirokubox on first activation.

Move between project and global

When kaigibox.storageLocation is automatic and a workspace is open, Move Meeting to… relocates a meeting JSON between .vscode/meetings and the global folder. KaigiBox asks for confirmation, preserves folder layout (project / title / subtitle), closes the old editor tab, and reopens the meeting at the new path. Requires both stores to be visible in the tree.

You can also drag a meeting onto the other storage root (or a folder under it) in the tree; cross-store drops use the same confirmation. Dragging onto a folder within the same store updates project / title / subtitle and moves the file without a prompt.

Meeting JSON file

{
  "id": "b8c9d0e1f2033445",
  "project": "Personal",
  "title": "1-1",
  "subtitle": "Manager check-in",
  "date": "2026-05-27",
  "createdAt": "2026-05-27T10:00:00.000Z",
  "updatedAt": "2026-05-27T10:30:00.000Z",
  "agenda": "- Wins\n- Blockers",
  "decisions": "- Agreed to …",
  "notes": "## Discussion\n\n…",
  "attendees": [
    { "name": "Alex", "email": "alex@example.com", "role": "Engineer", "present": true }
  ],
  "actions": [
    { "id": "act-001", "text": "Follow up", "assignee": "Alex", "dueDate": "2026-06-15", "done": false, "kachiboxTaskId": "abc123" }
  ],
  "customFields": { "client": "Acme" },
  "templateId": "tmpl-one-on-one"
}

Filename pattern: {date}-{title-slug}.json (adds a short id suffix if the name collides).

Canonical folder names come from the directory path on load; the editor displays human-readable project / title / subtitle values.

Templates

Templates live in:

  • .vscode/kaigibox/templates/*.json (project)
  • ~/.kirokubox/config/templates/*.json (global)

Create via Save as template… (save menu or command). New meetings can pick any loaded template from the quick pick.

Templates copy agenda, notes, decisions, attendees, actions (new ids, unlinked), and custom fields. Action done flags and KachiBox links are cleared.

Custom fields

Define fields in .vscode/kaigibox/fields.json and/or ~/.kirokubox/config/fields.json (project overrides global for the same id):

[
  { "id": "client", "label": "Client", "type": "text" },
  { "id": "followUpDate", "label": "Follow-up date", "type": "date" },
  { "id": "recordingUrl", "label": "Recording", "type": "url" },
  { "id": "riskScore", "label": "Risk score", "type": "number" },
  {
    "id": "priority",
    "label": "Priority",
    "type": "select",
    "options": [
      { "value": "low", "label": "Low" },
      { "value": "medium", "label": "Medium" },
      { "value": "high", "label": "High" }
    ],
    "default": "medium"
  },
  { "id": "confidential", "label": "Confidential", "type": "boolean" },
  { "id": "priorMeeting", "label": "Prior meeting", "type": "meeting" }
]
Type Editor control Stored value
text Text input string
date Date picker YYYY-MM-DD string
url URL input string
number Number input number
select Dropdown (options[].value / label) string
boolean Checkbox true / false
meeting Meeting picker + Open linked meeting id

meeting fields list other meetings (project + global), newest first. Open jumps to the linked meeting. Exports resolve meeting refs to project / title (date).

Follow-up date notifications

When a watched date custom field is due today or overdue, KaigiBox shows a VS Code notification (at most once per day per meeting and field value). Click Open meeting to jump to that meeting’s Custom tab context.

Watched fields:

  • ids listed in kaigibox.followUpDateFieldIds (default: followUpDate)
  • any date field with "notifyWhenDue": true in fields.json
Setting Default Description
kaigibox.notifyFollowUpDates true Enable or disable follow-up date notifications
kaigibox.followUpDateFieldIds ["followUpDate"] Extra field ids to watch

Attendee lists

Saved rosters for the Attendees tab Add from list… dropdown. Add the file manually under your config folder, or use Edit lists… on the Attendees tab to create and open it (same places as fields.json and templates/).

Where to put the file

Scope Full path (defaults)
Project (this workspace) {workspace}/.vscode/kaigibox/attendee-lists.json
Global (all workspaces) ~/.kirokubox/config/attendee-lists.json

Override the global config root with kirokubox.homeDirectory or kaigibox.configDirectory if you use a custom layout.

Tips

  • Create the .vscode/kaigibox or ~/.kirokubox/config folder if it does not exist yet.
  • In the sidebar Actions panel, Open folder opens your global config directory when both project and global stores are active (otherwise the meetings/tasks folder for the active store).
  • KaigiBox: Show Log lists resolved project/global paths at activation — useful on Remote or WSL.
  • After you add or edit attendee-lists.json, the Add from list… dropdown in open meetings updates automatically (or use Edit lists… on the Attendees tab to open the file).

Project vs global

KaigiBox loads both files when kaigibox.storageLocation is automatic and a workspace is open. Lists are merged by id:

  • Same id in project and global → project wins.
  • Different id values → both appear in Add from list….

Use project for team-specific rosters in git; use global for personal lists you reuse across repos.

File format

  • Filename: attendee-lists.json (note the hyphen and plural lists).
  • Root: a JSON array of list objects (not a single object).
  • Encoding: UTF-8.

Each list object:

Property Required Description
id yes Stable id (letters, numbers, hyphens). Used internally; not shown in the dropdown.
name yes Label shown in Add from list…
attendees yes Array of people to append when the list is chosen

Each person in attendees:

Property Required Description
name yes Display name
email no Shown in the Email column; enables mailto: when filled
role no Job title or role for this roster
company no Organization
present no Ignored when seeding from a list — rows are always added with Present unchecked; check attendees who joined this meeting

Invalid JSON or a missing file is treated as an empty list (no error in the UI; the dropdown only shows Add from list…).

Example

~/.kirokubox/config/attendee-lists.json (global):

[
  {
    "id": "team-core",
    "name": "Core team",
    "attendees": [
      {
        "name": "Alex Rivera",
        "email": "alex.rivera@example.com",
        "role": "Tech lead",
        "company": "Example Corp"
      },
      {
        "name": "Sam Chen",
        "email": "sam.chen@example.com",
        "role": "Engineer",
        "company": "Example Corp"
      }
    ]
  },
  {
    "id": "acme-stakeholders",
    "name": "Acme stakeholders",
    "attendees": [
      {
        "name": "Morgan Blake",
        "email": "morgan.blake@acme.example",
        "role": "VP Engineering",
        "company": "Acme Corp"
      }
    ]
  }
]

Project-only example — .vscode/kaigibox/attendee-lists.json in your repo:

[
  {
    "id": "sprint-review",
    "name": "Sprint review panel",
    "attendees": [
      { "name": "Jordan Lee", "role": "Product" },
      { "name": "Pat Nguyen", "email": "pat@example.com", "role": "Staff engineer" }
    ]
  }
]

Using a list in a meeting

  1. Open a meeting → Attendees tab.
  2. At the bottom, choose a name from Add from list… (not the placeholder row).
  3. KaigiBox appends one row per person in that list (existing rows are kept).
  4. Check Present for people who attended; edit or remove rows as needed.
  5. Save the meeting — attendees are stored in the meeting JSON, not in attendee-lists.json.

Choosing the same list again adds duplicate rows if those people are already on the sheet — remove extras manually or pick the list once per meeting.

Import markdown meetings

KaigiBox: Import Markdown Meetings reads a folder tree:

{import root}/
  {project}/
    {subject}/
      {title}/
        notes.md
      notes.md          ← subtitle omitted; filename stem becomes subtitle
  • Body → notes
  • Optional YAML front matter (--- … ---): project, title, subject, subtitle, date, agenda, decisions
  • Imported meetings are saved under the project or global store you choose

Export markdown

Copy or save meetings as a readable .md file for sharing outside VS Code.

Source Scope
Meeting row (context menu) That meeting
Folder or storage root (context menu) All meetings under that path
Editor Save menu (▼) Current meeting (includes unsaved edits in the form)
Command palette Active meeting, tree selection, or quick pick (single / multi)

Exported markdown includes project, date, agenda, notes, attendees, actions (checkboxes), decisions, and custom fields. Multi-meeting exports are separated by --- and tagged with <!-- kaigibox-export v1 -->.

Default filename: {date}-{title}.md for one meeting; {folder}-export-{date}.md for a folder.

Raw JSON editing

  • Reopen Editor With → Text Editor on a meeting file, or
  • KaigiBox: Open Meeting as JSON

Prefer Save in the KaigiBox editor for normal edits; it keeps the text document buffer and disk in sync. External saves trigger a refresh in the webview.

Troubleshooting

Issue What to try
Tree empty Confirm workspace folder is open; check kaigibox.storageLocation; create a meeting
Save blocked / “file is newer” Close and reopen the meeting; use KaigiBox Save, not only Ctrl+S on a stale JSON tab
KachiBox link fails Install KachiBox; for linkKachiboxTaskStorage project, open a workspace with a writable .vscode/tasks; for global, check kachibox.tasksDirectory
Template not in new-meeting list Save to project vs global; reload window after adding files manually
Search finds nothing Try All fields; enable Fuzzy or disable Whole words; shorten or split the query
Custom fields missing Add fields.json under .vscode/kaigibox or global config; reopen meeting
Bad meeting JSON file Fix or remove it; KaigiBox skips unreadable files — details in Output → KaigiBox or KaigiBox: Show Log
Missing meetings / wrong folder KaigiBox: Show Log lists project/global paths at activation; check kaigibox.meetingsDirectory on Remote/WSL

Output log

View → Output → KaigiBox (or KaigiBox: Show Log) records:

  • Meeting directory roots at activation
  • Skipped invalid meeting JSON, duplicate meeting ids, unreadable directories
  • Invalid template files, save/link errors, and import summaries

For developers

cd KaigiBox
npm install
npm run compile   # or: npm run watch

Press F5 to launch an Extension Development Host (preLaunchTask compiles first).

Script Purpose
npm run compile TypeScript → out/
npm run watch Rebuild on save
npm run vscode:prepublish Production compile before packaging

Contributor and architecture notes: doc/DEVELOPING.md.

Companion task extension: KachiBox (../Kachibox relative to this repo when checked out side by side).

License

MIT — see repository package.json.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft