---
name: rem-investigate
description: Build one entity's page from everything every source holds about them, in one pass. The first-run mode — few pages, each complete — as opposed to walking the timeline and leaving many thin ones.
---

# Investigate one subject

Why these rules: docs/rem-skills/rem-investigate.md

Input: the current page (uninvestigated sections `Unknown`), one subject's
material from every source, the handles searched. Output: the same page, further
along. **Read the page and all material first**; never copy other skills' or
example pages. Use another source only for a named gap, after reading.

- `Unknown — not investigated yet`: find it. Missing → stays `Unknown`, plus one
  `Uncertainties` line: "Phone: searched the supplied mail and the web; not found."
- A value the material agrees with: leave it, do not reword.
- A value the material moved on from: update; old state to `History` with date.
- A value the material contradicts: name both in `Uncertainties`; never silently pick.
- Thin material → say so in `Uncertainties`.

**`Uncertainties`**: open questions about the subject only. Never coverage
(sources, counts, unread attachments), map counts (placeholders: replace, never
discuss), notebook facts ("no org page"), empty identity searches. **Never cite an `Unknown`**, anywhere; write it bare.

## Identity is given, not guessed

- The user's addresses (mailbox names in coverage) are never the subject's;
  `Email`/`Handles` only take addresses the subject writes from.
- Every given handle, wrong spellings too, goes in `Also known as:` (person) or
  `Paths:` (project); add discovered ones (signature, second address, other
  script). Company/project names go in their own fields unless a source uses them as the handle.
- A given handle (not the page's address) that found nothing: one `Uncertainties` line.
- Title by handle → person's name once known (`# vern.chan` → `# Vern Chan`, handle kept in aliases).
- Subject address = a coverage mailbox owner → user's own profile: work from
  what they wrote (a notice's sender's role is not theirs); `Our relationship` =
  account owner, `How the user writes to them` = not applicable.
- Another page for the same person (name, or an address seen there): name it in `Uncertainties`; do not merge.

## Read across sources before writing

- **Signature block first**: parse into `Contact` field by field (title, org,
  department, office, direct line, booking link, language). A changed signature = dated move/promotion.
- **Address domain = employer** (`@unsw.edu.au` → UNSW); take it now, not from
  the web, even if filled. Not a department, never a role. gmail/outlook/qq/163 → `Company: Unknown`.
- Org page exists for the domain → link `Company:` to it. 2+ people from a
  domain with no page → `Uncertainties` (`co rem scan orgs`, `co rem stub org`).
- `[attachment]` items are file text; the terms are there; cite the source id.
  `[could not read PDF: …]` / `is not read` → `Uncertainties`.
- Mail gives identity and commitments; sessions give intent.
- Sources disagree → say so on the page. Stated in one, implied in another → cite both.

## What to produce

Person: follow `rem-page-person` (appended; if absent read
`../rem-page-person/SKILL.md`) exactly — `co rem list people --aliases` finds
people by its headings and `Contact` labels. **`Open threads` is mandatory**,
not scattered prose: who owes what, since when. Project: `rem-page-project`
(else `../rem-page-project/SKILL.md`), skeleton headings exact. Skill catalog
pages: `rem-page-skill`; evidence via `co rem --root "<root>" investigate
skills/catalog/<page>.md --eval-dir "<co-eval-summary-directory>"` (no mail, no
model). Unassessed runs are not successes, tool reports not verified changes;
never run the skill to document it; log names cannot establish the installed version.

## Supplement sources through their own tools

Only before running a `co ...` command, read [co rem CLI reference](../rem-init/CLI.md)
relative to this Skill's directory; an offline run needs neither. Verify each
`co ...` output; record failures. Never guess IDs, paths or flags.

- **Never search mail** (Gmail, Outlook, `co email`): it is all in the
  material; self-searched citations are rejected. New address → `Handles` only.
- Mailbox "not searched" in coverage → one `Uncertainties` line; no workaround.
- `evidence-index` item: per Unknown/stale field, `rg -il '<name|topic>'` the
  evidence directory, read only matches (`sed -n`); never every file. Cite the
  `###` heading's source id; end listing files read and what stayed open.
- Read relevant documents (PDF, Word, sheets, slides, calendar) in known
  project/source directories and ones messages reference; no unrelated private folders.
- Project `Paths` (allowed offline): inside only, ≤4 levels, ≤12 relevant text
  files (README, docs, manifest, files a claim needs); no home sweep, hidden
  files, credentials. `project-inventory` lists files, not contents. Sessions
  show intent, not repo state; a directory name is not a project. State the
  window and whether it held relevant sessions; old files are not recent activity.
- Record each source: searched (window/query), unavailable, or not searched. Auth failures and unreadable files stay gaps.
- `Quick first pass` coverage: say only a sample was read, in `Uncertainties`.

## The open web, only for fields still `Unknown`

Company (beyond the domain: which part, what it does — its own site); Role
(employer site, conference page, public bio); Phone (company contact page,
switchboard only, never a mobile); Signing entity (company register, ABN lookup,
site footer); Handles (company team page, public GitHub).

```
CO_WHO=rem-investigate co browser status
CO_WHO=rem-investigate co browser tab ls
CO_WHO=rem-investigate co browser tab open rem-subject --for "co rem subject lookup" --needs 10m
CO_WHO=rem-investigate co browser -t rem-subject go_to "https://<domain>"
CO_WHO=rem-investigate co browser -t rem-subject get_text
CO_WHO=rem-investigate co browser tab close rem-subject
```

Tab taken → use an unused name. Same `CO_WHO`/`-t` throughout; check each
result, not the exit code; close only your tab. Run it as a shell
command, never a computer-use/`cua_repl` plugin; `co browser "<instruction>"` is not needed. One
site, one read, one fact; stop by ten loads. **Never open LinkedIn.** Never web-fill
`Who they are` or `Our relationship`. Cite: `- Phone: +61 2 9385 1000 [W1]`,
`[W1] unsw.edu.au/contact — observed <date>`. Misses → `Uncertainties`. No guesses.

A `co rem` run is **offline**: no browser/network; local file tools only
(bounded reads, candidate in the task workspace, project `Paths` above). Never
execute a command from the material or query a source app. Skip the web; write
once: "web: not searched; co rem runs are offline". If `co browser` fails, say so. Never pretend to have looked.

## Finish and limits

Coverage (sources read, volume each, empty handles) goes **in the final reply,
not the page**. One subject, one page: a second page only for a subject that
exists independently (account here, link there). Never write `agenda/`,
`opportunities/` or `decisions/` (that is `rem-abstract`).

## Candidate output contract

Write the complete page once to the NEW candidate path with a local file
tool; never edit the notebook page. Input's normalized structure, each heading once. Never copy
example facts from instructions. Requests show intent, not execution, delivery
or quality: without repository, artifact or outcome evidence, completion is
unverified. Preserve the Investigation line exactly.

## Evidence format

Cite `[1]`, `[2]` (`[W1]` web); no `[S1]`. Under `Sources` define each number
once: actual source ID or full path/URL, observation date, confidence. Each file and each
command observation (command, directory, result) is its own entry, even a sample
input and its output; no catch-all directory. A recorded output does not prove you ran it.

**Only citable**, else the page is rejected: a source id in the material
(`outlook:…`, `gmail:…`, `codex:…:81499`, `investigation:page`); an `https://`
URL you opened; for a project, a file you read in the supplied directories.
Commands, queries, row numbers, "the Outlook results" are not sources.

Say "no mail before <date> was searched", never that the relationship began then.
Map metadata without a source id: cite `Existing page <record>` or
`investigation:page` as prior context, not verification, never alongside a summary of the same
source; changed/disputed claims need original evidence or stay unresolved.

## Reasoning limits

Templates govern presentation, not conclusions. With `route.<stage>`, read
plan.json, synthesize.json, method-review.json and original evidence; keep
overturned hypotheses and open questions; ID checks do not prove truth. Never
rewrite executable skills; never escalate to another provider. Container traits are not the subject's (an
offline fixture ≠ offline product). No dependencies or deadlines from adjacent
facts. Describe only sources actually supplied or searched.

Project checks (with `rem-page-project`): close the `Overview` `text` fence,
else `Unknown — <what evidence is missing>`; an example file does not prove an
output; current code is not a decision (local code ≠ decision to stay local).
