# Startup AI Agents — Initial Configuration Verification Report

> Applied to the dev DB via `AgentsSeeder` (idempotent, versioned, audited).
> **Not git-committed.** Investor agents untouched. No new tables; uses existing
> `agent_action_policies` with `effective_from` / `effective_to` / `version`.

## 1. Created / reconciled Startup agents (all `agent_type=startup`)
| Agent key | Name | Source | Active |
|---|---|---|---|
| `intake_triage` | Intake Triage Agent | seed | ✅ |
| `prescreen` | Pre-screen Agent | seed | ✅ |
| `founder_response_analysis` | Founder Response Analysis Agent | seed | ✅ (new key) |
| `screening_call_analysis` | Screening Call Analysis Agent | seed | ✅ (new key) |
| `initial_due_diligence` | Initial Due Diligence Agent | seed | ✅ (new key) |
| `committee_analysis` | Committee Analysis Agent | seed | ✅ |
| `investment_memo` | Investment Memo Agent | seed | ✅ |

Older seed keys `founder_response`, `screening_call`, `initial_dd` were **retired** (soft-deleted; their active policies closed) so the canonical 7 stand alone.

## 2 & 3. Agent → Action assignments + final policy (active rows)
| Agent | Action | Policy |
|---|---|---|
| Intake Triage | move_to_review | **always_allow** |
| Intake Triage | reject | needs_approval |
| Pre-screen | request_more_info | needs_approval |
| Pre-screen | request_meeting | needs_approval |
| Pre-screen | reject | needs_approval |
| Founder Response Analysis | request_meeting | needs_approval |
| Founder Response Analysis | reject | needs_approval |
| Screening Call Analysis | move_to_initial_dd | needs_approval |
| Screening Call Analysis | reject | needs_approval |
| Initial Due Diligence | move_to_committee | needs_approval |
| Initial Due Diligence | reject | needs_approval |
| Committee Analysis | move_to_prelist | needs_approval |
| Committee Analysis | reject | needs_approval |
| Investment Memo | move_to_listing | needs_approval |

**Spec match: ALL 14 assignments match exactly ✓.** Stored as versioned rows
(`agent_action_policies`); unchanged assignments were left as-is (no version churn),
changed ones got a new version with the old superseded (`effective_to`). Audit `agent.policy_set`.

## 4. Missing action slugs
**None — 8/8 present** (`move_to_review, reject, request_more_info, request_meeting,
move_to_initial_dd, move_to_committee, move_to_prelist, move_to_listing`) under the startup
`action` label (`label_options`).

## 5. Where the assignments are visible
- **AI Agents** (user-menu → AI Agents → 🚀 Startup Agents tab) → **Manage** / agent name → **Agent Details → Assigned Actions** (the source-of-truth editor) — route `admin.agents.show`.
- **Actions** (sidebar Core → Actions → Startups tab) → Policy column shows assigned agents + 🤖 icon **only when assignments exist** → opens **Action Agent Policies** (`admin.actions.agent-policies`).
- API: `GET /api/v1/ai/action-policies/{agentKey}` (per agent), `GET /api/v1/ai/action-policies/{agent}/{action}` (resolve).

## 6. Example execution flow per agent
- **Intake Triage → move_to_review (always_allow):** Make `POST /agent-runs {agent_key:intake_triage, startup_id}` → `POST …/decision {action_slug:move_to_review}` → resolves always_allow → **executes immediately** (no approval) → startup moves to Review; `reject` instead → needs_approval → approval created, executes on approve.
- **Pre-screen → request_more_info:** decision → needs_approval → approval (pending) → admin approves → Numu sends the "request more info" action + its notifications.
- **Founder Response Analysis → request_meeting:** decision → needs_approval → approval → on approve, meeting-request action fires.
- **Screening Call Analysis → move_to_initial_dd:** decision → needs_approval → approval → on approve, startup → Initial DD.
- **Initial Due Diligence → move_to_committee:** decision → needs_approval → approval → on approve, startup → Committee.
- **Committee Analysis → move_to_prelist:** decision → needs_approval → approval → on approve, startup → Pre-list.
- **Investment Memo → move_to_listing:** decision → needs_approval → approval → on approve, startup → Listing.

(Every `needs_approval` path creates an `agent_approval_requests` row and executes **only after** approval; `reject` everywhere is needs_approval. Numu executes via `StartupLabelActionService` — notifications/automations/audit unchanged.)

## 7. Investor agents — unaffected
Investor agents count = **0** (none seeded; create-as-needed). The clean-sync touches only
seed-origin **startup** agents — investor rows, policies, and the Investor tab are untouched.

## Notes
- **Non-canonical agent present:** `test` (Name "test", `registered_by=admin_ui`) — created earlier via the UI; **left untouched** (clean-sync only retires seed agents). Total startup agents = 8 (7 canonical + `test`). Delete it from AI Agents if unwanted.
- Re-running `php artisan db:seed --class=AgentsSeeder` is idempotent and reconciles to this exact spec.
