Skip to content

Local Agent Capture

Turn a sentence into a stored fact. This skill maps everyday phrasing to the la CLI so the user can capture relationships and commitments without leaving the chat — and without anything leaving the machine.

When to use

  • "Capture / log / note that ..." about a colleague, team, or commitment.
  • The user mentions meeting someone, who reports to whom, or who collaborates.
  • The user says "I owe X ..." or "X owes me ..." or sets a follow-up/deadline.
  • Mid-conversation asides worth keeping ("Bob raised flaky CI again").

Do not use this for general questions, web lookups, or anything that is not a person/relationship/note for the local org store.

What this captures

  • People — name, optional team, role, org, alias, tag, and the --me anchor (yourself).
  • Relationships (links)reports_to, collaborates_with (default), knows.
  • Notes — free text about a person or team, typed as requirement, followup, or observation, optionally a commitment (--owe = I owe them, --owed = owed to me) with an optional --due date.

The only tool you use

Run the la CLI via the shell. Never read or write the SQLite file directly, never use network tools. Every fact goes in through la.

Command grammar

la person add "NAME" [--team T] [--role R] [--org O] [--alias A]... [--tag T]... [--me]
la link add A B [--kind reports_to|collaborates_with|knows]
la note add "TEXT" [--for PERSON] [--kind requirement|followup|observation] \
                   [--status open|done] [--due YYYY-MM-DD] [--owe|--owed]

la person list [--team T]     # tabular, with ids
la note list                  # tabular, with ids
la link list                  # tabular, with ids

la who TEAM [--depth N]       # who I know on a team (1st/2nd degree)
la intro PERSON               # warm-intro route to someone
la brief PERSON               # dossier: relationships, notes, reach
la owe                        # open commitments I owe
la owed                       # open commitments owed to me

la delete person ID | la delete note ID | la delete link ID
la reset --yes                # wipe everything (DESTRUCTIVE)

PERSON/A/B accept a name (exact match, then case-insensitive substring) or a numeric id.

Natural language to command (study these)

User says You run
"I'm Nathan, set me as me" la person add "Nathan" --me
"Met Jane, she's a PM on SPEAR" la person add "Jane" --team SPEAR --role PM
"Add Alice Chen, staff eng, team SPEAR, also goes by Al" la person add "Alice Chen" --team SPEAR --role "Staff Eng" --alias Al
"Bob reports to Alice" la link add Bob Alice --kind reports_to
"I work with Carol" la link add Me Carol
"Note that Bob raised flaky CI in standup" la note add "raised flaky CI in standup" --for Bob
"I owe Dana the threat model by Friday" la note add "threat model" --for Dana --owe --kind requirement --due <Friday's date>
"Priya owes me the API doc" la note add "API doc" --for Priya --owed --kind requirement
"What do I owe?" la owe
"Who do I know on SPEAR?" la who SPEAR
"Brief me on Bob" la brief Bob

Procedure

  1. Anchor first. If the user has not set themselves, the reach queries (who/intro) cannot work. If la person list shows no me row and the user refers to "I"/"me", ask their name and run la person add "NAME" --me.
  2. Parse the sentence into the smallest set of la commands. One fact per command. A sentence may yield several (add the person, then the link, then a note).
  3. Resolve dates. Convert "Friday", "next week", "the 19th" to an absolute YYYY-MM-DD for --due. If the date is ambiguous, ask.
  4. Run the command(s).
  5. Read back. After a write, run the matching list/brief to confirm and show the user what was stored:
  6. after person addla person list
  7. after note addla note list (or la brief PERSON)
  8. after link addla link list
  9. Disambiguate, don't guess. If la reports a name is ambiguous, run la person list, show the candidates, and ask which id. Never invent an id.

Rules and anti-patterns

  • Never touch the database file, run migrations, or use sqlite3 directly — only la.
  • Never use web/network tools or echo captured content anywhere but la. This system's whole value is that data stays local.
  • Confirmation gate: la delete ... and la reset --yes are destructive. Only run them after the user explicitly confirms in this chat ("yes, delete").
  • Don't capture vague chatter as notes — capture facts and commitments.
  • Don't fabricate teams/roles the user didn't state; omit the flag instead.
  • Don't re-add a person who already exists; check la person list first when unsure, and add a note or link instead.

Compatibility

  • Requires the la CLI on PATH (this repo's local-agent/la wrapper or uv run local-agent).
  • Local-only: no network egress. The store is a single local SQLite file.
  • Intended to run under a local model (see local-agent/README.md → "Chat capture"); the privacy guarantee is auditable via local-agent/scripts/audit_egress.sh.