A match score alone is not enough. Store hard gates as filterable fields and keep the agent’s reasoning as reviewable text. Scan gates first; read the rationale second.

(Diagram: opportunity + hard checks + agent judgment.)
Suggested shape
Opportunities (one row per project)
- Title, source/platform, URL, collected-at
- Hard fields (yes/no or selects): budget OK, skills cover, still hiring, timeline OK
- Status: review / worth contacting / needs info / skip
- Match score (number, optional ranking only)
- Why contact and risks / unknowns (long text)
- Optional: owner, next follow-up
Hard fields answer “does it clear the bar?”; text answers “why do we think that?”

(Local demo: agent writes land as change requests in Inbox.)

(Local demo: reviewers see before/after on status and rationale.)
Daily flow
- Agent ingests new listings and fills hard fields + draft rationale.
- You filter “still hiring = yes” and “budget OK = yes”, then sort by score or recency.
- Read rationale; if something is missing, set needs info and write what to verify.
- Promote to worth contacting or skip; with approvals on, merge via Inbox so the team shares one decision trail.
How to verify
- A “worth contacting” row should pass hard gates and have a concrete why—not only a score.
- A “needs info” row should list what is missing (e.g. no budget stated).
- Change-request history shows who flipped the status and when.
Boundaries
- Score-only lists can’t be audited or taught back to the agent.
- Stuffing rationale into the title makes filtering impossible.
- Keep skipped rows with a reason so the same listing doesn’t reappear as “new” next week.
That keeps shortlist decisions explainable while still letting the agent do the heavy collecting.