answer

Calendar queries, schedule questions, meeting history, task queries, people profiles, initiative status, and organizational context. Handles "When did I meet X?", "What's my schedule?", "Am I free?",

SKILL.md

GitHub

Answer: Fast Lookup Protocol

Answer questions by searching across TARS information sources in priority order. Provide answers in BLUF (Bottom Line Up Front) format with source citations.


Source priority — hybrid retrieval

Priority Source / tool Contains Confidence
1 Memory files — mcp__tars_vault__search_by_tag(tag="tars/<type>", …) + read_note Durable facts, relationships, decisions, preferences High
2 Tier-A FTS5 — mcp__tars_vault__fts_search(scope="memory", query=…) Keyword/BM25 over short structured notes High
3 Task notes — mcp__tars_vault__search_by_tag(tag="tars/task", …) + task integration (resolve_capability(capability="tasks")) Action items, deadlines, assignments High
4 Journal entries — mcp__tars_vault__search_by_tag(tag="tars/journal", …) + semantic Meeting summaries, briefings, wisdom High
5 Tier-B semantic — mcp__tars_vault__semantic_search(scope="journal|transcripts|contexts", …) Paraphrase/quote recall over prose Medium-High
6 Transcript archives — full-read fallback when semantic returned low scores Verbatim quotes High (verbatim)
7 Integration sources — resolve_capability(capability="calendar|tasks|project-tracker|…") Schedule, live data from provider MCPs High
8 (last) Web search External information Medium-Low — flag explicitly

Key rules:

  • Never answer internal questions from web search alone. Exhaust internal sources first.
  • When a resolve_capability call returns status: "unavailable", follow the degradation messaging convention in skills/core/SKILL.md section "Degradation messaging convention".
  • If answering from LLM knowledge with no source, confidence is Low — flag explicitly.
  • Cite with wikilinks + chunk indices for Tier-B hits (e.g., [[2026-03-10 CSI Onsite Day 1]]#chunk-14). Citations point at canonical filenames returned by retrieval; if you need to construct a link from a name (rather than reuse one returned by search), call mcp__tars_vault__format_wikilink first — see core → "Wikilink discipline".
  • Emit telemetry answer_delivered with source_hit_tier array covering which priorities contributed.

Step 1: Parse query intent

Analyze the user's question to determine:

Dimension Examples
Intent type Schedule question, person lookup, meeting history, task query, initiative status, decision recall, general knowledge
Entities People, products, initiatives, vendors, competitors
Topics What the query is specifically about
Timeframe Today, tomorrow, this week, last meeting, a specific date, "ever"
Depth Quick fact (one-liner) vs. full context (detailed history)

Intent routing table

Intent Primary source Fallback chain
Schedule / "am I free" / "what's on my calendar" Calendar integration Journal → Memory
Person lookup / "who is" Memory (tars/person) Journal → Transcripts
Meeting history / "when did I meet" Journal (tars/meeting) Calendar → Transcripts
Task query / "what do I need to do" Task integration Journal (task extraction sections)
Initiative status / "how is X going" Memory (tars/initiative) Journal → Tasks
Decision recall / "what did we decide" Memory (tars/decision) Journal → Transcripts
General knowledge / "what do I know about" Memory (all types) Journal → Contexts → Transcripts

Step 2: Route to appropriate search

Schedule queries (calendar, agenda, meetings, availability, "am I free")

Start with the calendar integration FIRST.

cap = mcp__tars_vault__resolve_capability(capability="calendar")
  1. If cap.status == "connected", call cap.tools[*] dynamically (never hard-code mcp__apple_calendar__* or mcp__microsoft_365_*).
  2. If cap.status == "unavailable" and calendar is marked required: true in _system/integrations.md, state the specific connection error.
  3. Always resolve the target date to YYYY-MM-DD before querying.

After calendar data, enrich via:

  • Memory profiles for meeting attendees.
  • Task integration via resolve_capability(capability="tasks") for items due same day.

Person lookup

mcp__tars_vault__search_by_tag(tag="tars/person", query="<name>", limit=5)

If no exact match, resolve through the alias registry:

mcp__tars_vault__resolve_alias(name="<name>")

Then read the full profile:

mcp__tars_vault__read_note(file="<canonical name>")

If the person has meeting history, scan recent journal entries:

mcp__tars_vault__search_by_tag(tag="tars/meeting", query="<person name>", limit=5)

Meeting history

mcp__tars_vault__search_by_tag(tag="tars/meeting", query="<topic or person>", limit=10)

Read matching journal entries. If the user asks about a specific detail discussed in a meeting and the journal summary lacks it, call mcp__tars_vault__semantic_search(scope="transcripts", query=…) or proceed to transcript fallback (Step 3).

Task queries

cap = mcp__tars_vault__resolve_capability(capability="tasks")
# use cap.tools[*] dynamically for list/filter by owner, due date, status

For "what's overdue" on TARS-managed task notes:

mcp__tars_vault__search_by_tag(
  tag="tars/task",
  frontmatter={"tars-status": "open"},
  limit=50
)

Filter results where tars-due < today.

Initiative status

mcp__tars_vault__search_by_tag(tag="tars/initiative", query="<name>", limit=5)
mcp__tars_vault__read_note(file="<initiative name>")

Cross-reference with:

  • Recent journal entries mentioning the initiative.
  • Tasks linked to the initiative.
  • People involved.

Decision recall

mcp__tars_vault__search_by_tag(tag="tars/decision", query="<topic>", limit=10)

If not found in decisions, search journal entries:

mcp__tars_vault__search_by_tag(tag="tars/meeting", query="<topic>", limit=10)

Look for "Decisions" sections in meeting summaries.

General knowledge

Follow the full hierarchy:

  1. Memory: mcp__tars_vault__fts_search(scope="memory", query="<keywords>", limit=10).
  2. Tasks: resolve_capability(capability="tasks") + search_by_tag(tag="tars/task", …).
  3. Journal: mcp__tars_vault__semantic_search(scope="journal", query="<keywords>", limit=10).
  4. Contexts: mcp__tars_vault__semantic_search(scope="contexts", query="<keywords>", limit=5).
  5. Transcripts: if none of the above has the answer (see Step 3).
  6. Web: only if explicitly external information.

Before the first mcp__tars_vault__semantic_search call in a session, check whether _system/embedding-cache/ exists in the workspace. If it does not, emit this line once:

"First semantic search this session. Downloading embedding model (~80MB, one-time, takes ~30-60s)."

Cache a working-memory flag so the warning is not repeated in the same session.


Step 3: Transcript fallback — Issue 6

When memory, journal summaries, and other sources do not have enough detail to answer the question, fall back to archived transcripts.

When to use transcript fallback

  • User asks about a specific quote: "What exactly did Jane say about the timeline?"
  • User asks about a minor detail not in summaries: "Did anyone mention the budget number?"
  • User asks about meeting tone or dynamics: "Was there pushback on the proposal?"
  • Journal entry exists but lacks the specific detail requested

Transcript fallback pipeline

  1. Find relevant journal entries by date, person, or topic:

    mcp__tars_vault__search_by_tag(tag="tars/meeting", query="<criteria>", limit=5)
    
  2. Read the journal entry and check for a transcript link:

    mcp__tars_vault__read_note(file="<journal entry name>")
    

    Look for the tars-transcript property in frontmatter.

  3. If transcript exists, read it:

    mcp__tars_vault__read_note(file="<transcript name>")
    
  4. Search the transcript for the specific topic, quote, or detail the user is asking about.

  5. Return with citation:

    From the raw transcript of [[2026-03-21 Platform Review]]:
    Jane said at 2:15pm: "The timeline is aggressive but doable if we get
    the two backend hires by end of month."
    

Transcript search tips

  • Search by speaker name to find what a specific person said
  • Search by topic keywords to find relevant discussion segments
  • Use timestamps to locate specific moments
  • If the transcript is long (>15,000 words), search by section rather than reading the entire file

When transcripts don't exist

If the journal entry has no tars-transcript link, or the transcript was not archived:

  • Note: "No transcript archived for this meeting. Answer based on journal summary only."
  • Do NOT fabricate transcript content.

Step 4: Present answer in BLUF format

BLUF (Bottom Line Up Front): Lead with the direct answer, then provide supporting detail.

Format

**[Direct answer to the question]**

[Supporting detail with context]

---
Sources:
- [[memory/people/jane-smith.md]] — person profile
- [[journal/2026-03/2026-03-21-platform-review.md]] — meeting summary
- Calendar: Mar 21 event "Platform Review" at 2:00 PM

Examples

Query: "When did I last meet Jane?"

**You last met Jane Smith on March 21, 2026** at the Platform Review meeting (2:00-3:00 PM).

Topics discussed: Q3 timeline, backend hiring, mobile team staffing.
Key outcome: Jane approved 2 backend hires for Platform Rewrite.
Next meeting: Not yet scheduled.

---
Sources:
- [[journal/2026-03/2026-03-21-platform-review.md]]
- Calendar: Mar 21, 2:00 PM "Platform Review"

Query: "What did we decide about the API?"

**Decision: REST over GraphQL for the public API**, made on March 19, 2026.

Rationale: Broader ecosystem compatibility, lower barrier for external developers,
and alignment with existing internal tooling. GraphQL will remain for internal
services only.

Decided by: [[Jane Smith]] and [[Bob Chen]] during the API Architecture Review.

---
Sources:
- [[memory/decisions/api-architecture.md]]
- [[journal/2026-03/2026-03-19-api-architecture-review.md]]

Query: "What exactly did Bob say about the migration risk?"

**Bob Chen expressed concern about Q3 timeline risk** during the Platform Review
on March 21.

From the raw transcript of [[2026-03-21 Platform Review]]:
Bob said at 2:32pm: "I'm worried about the Q3 deadline. If we don't get the
database migration done by June, we're looking at a 6-week slip minimum.
The team is already stretched thin with the API work."

---
Sources:
- [[archive/transcripts/2026-03/2026-03-21-platform-review-transcript.md]] — verbatim
- [[journal/2026-03/2026-03-21-platform-review.md]] — summary

Step 5: Cite sources with wikilinks

Every piece of information in the answer must be traceable to a source. Use [[wikilinks]] for workspace files and explicit labels for integration sources.

Citation format

Source type Citation format
Memory file [[memory/people/jane-smith.md]]
Journal entry [[journal/2026-03/2026-03-21-platform-review.md]]
Transcript [[archive/transcripts/2026-03/...]] with "verbatim" label
Calendar Calendar: [date] [event title]
Task integration Tasks: [list name] — [task title]
Web search Web: [URL or search query] — flag as external
LLM knowledge Note: This is from general knowledge, not TARS memory — flag as low confidence

Step 6: Handle gaps honestly

If the answer cannot be found in any source:

**I don't have this information in memory, journal, or transcripts.**

Suggestions:
- Check your email for messages about [topic]
- This may have been discussed before TARS was active
- Would you like me to search the web for external information?
- If you know when this was discussed, I can check specific transcripts

Never fabricate an answer. Never hallucinate memory that doesn't exist. Never claim certainty when the source is ambiguous.

Empty-workspace response

When all internal tiers return zero results and the user appears new (_system/config.md tars-user-name is empty, or memory/ has fewer than three entity files), respond with:

Your workspace is new. I don't have stored context yet.

Three quick ways to seed it:
1. Paste a meeting transcript and run `/meeting`
2. Tell me a fact to remember: `/learn Sarah is the new VP Engineering`
3. Run `/briefing` to see what's set up so far

Run `/welcome` if this folder still needs setup, then use the guided first paste-or-upload workflow to see what TARS can extract.

Do not present this block when the user asked an external or general-knowledge question.

Partial answers

If some parts of the question can be answered but others cannot:

**Partial answer**: [what is known]

**Unknown**: [what could not be found]
I checked: [list of sources searched]. The [specific detail] was not captured.

Search mechanics

Index-first pattern (MANDATORY)

For vault searches, always use mcp__tars_vault__search_by_tag (tag + frontmatter filter) or fts_search / semantic_search — never scan folders:

mcp__tars_vault__search_by_tag(tag="tars/person", query="<name>", limit=5)
mcp__tars_vault__search_by_tag(tag="tars/meeting", frontmatter={"tars-date__gte": "2026-03-01"}, limit=10)
mcp__tars_vault__search_by_tag(tag="tars/decision", query="<topic>", limit=5)

Alias resolution

If an entity is not found by its primary name:

  1. Call mcp__tars_vault__resolve_alias(name="<name>").
  2. Try partial name matching: mcp__tars_vault__search_by_tag(tag="tars/person", query="<last name>", limit=5).
  3. Try related entities: search by initiative or team the person belongs to.

Date resolution

Always resolve dates before querying:

User says Resolve to
"today" Current date YYYY-MM-DD
"tomorrow" Current date + 1
"yesterday" Current date - 1
"this week" Monday to Sunday of current week
"last week" Monday to Sunday of previous week
"last meeting with X" Search journal by person, sort by date desc
"March" 2026-03-01 to 2026-03-31

Source attribution

Tag each piece of information with its confidence tier:

Source Confidence Display
Memory files High No special label needed
User input (this session) High No special label needed
Calendar/task integration High No special label needed
Journal entries High No special label needed
Transcript archives High Label as "verbatim"
Web search Medium-Low Flag explicitly: "From web search:"
LLM general knowledge Low Flag explicitly: "Note: from general knowledge, not TARS memory"

Context budget

Source Limit
Memory Search results + up to 5 targeted file reads
Journal Search results + up to 3 full entry reads
Transcripts Up to 2 transcript reads (only when journal insufficient)
Tasks Active list by default (other lists only if explicitly needed)
Calendar Target date(s) only
Contexts Up to 2 reads (only for deep-detail questions)

Self-evaluation — Issue 9

If any errors occur during lookup:

  1. Check _system/backlog/issues/ for existing issue with same error signature
  2. If exists: increment tars-occurrence-count, update tars-last-seen
  3. If new: create issue note with context
  4. Continue answering with available data — note the error to the user

Absolute constraints

  • NEVER answer internal questions from web search alone — exhaust internal sources first
  • NEVER hallucinate or fabricate memory, journal entries, or transcript content
  • NEVER claim calendar access is guaranteed. If the integration is unavailable or fails, report the specific connection state and continue with workspace sources.
  • NEVER skip alias checking when an entity is not found by primary name
  • NEVER present information without source citation
  • NEVER present LLM general knowledge as vault-sourced fact — always flag confidence level
  • ALWAYS query calendar integration for any question about schedule, agenda, meetings, availability, or "am I free"
  • ALWAYS resolve dates to YYYY-MM-DD format before any query
  • ALWAYS use BLUF format — lead with the direct answer
  • ALWAYS cite sources using [[wikilinks]] for workspace files
  • ALWAYS attempt transcript fallback (Issue 6) before saying "I don't know" for meeting-related questions
  • ALWAYS handle gaps honestly — say what was searched and what was not found
  • ALWAYS use mcp__tars_vault__search_by_tag (or fts_search / semantic_search) rather than folder scanning