fissible / verdict-console
Human-in-the-loop approval runtime and operator UI for Laravel AI agents governed by Verdict.
Requires
- php: ^8.3
- fissible/verdict: ^0.15
- illuminate/console: ^12.0||^13.0
- illuminate/contracts: ^12.0||^13.0
- illuminate/database: ^12.0||^13.0
- illuminate/routing: ^12.0||^13.0
- illuminate/support: ^12.0||^13.0
- illuminate/view: ^12.0||^13.0
- laravel/ai: ^0.11.0
Requires (Dev)
- larastan/larastan: ^3.9
- laravel/pint: ^1.29
- orchestra/testbench: ^10.0||^11.0
- pestphp/pest: ^4.6
- pestphp/pest-plugin-laravel: ^4.1
- pestphp/pest-plugin-type-coverage: ^4.0
- phpstan/extension-installer: ^1.4
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main
- v0.9.0
- v0.8.0
- v0.7.0
- v0.6.0
- v0.5.0
- v0.4.0
- v0.3.0
- v0.2.0
- v0.1.0
- dev-feat/119-integrity-core
- dev-docs/103-trace-design
- dev-feat/107-sink-review
- dev-docs/108-integrity-adr
- dev-feat/96-collision-reads
- dev-feat/47-issued-at
- dev-feat/48-review-lane
- dev-feat/46-receipt-transition-events
- dev-feat/verdict-015-compat
- dev-feat/102-fingerprint-pivots
- dev-fix/release-guard-order
- dev-feat/99-evidence-paged-read
- dev-docs/adapter-issue-migration
- dev-build/verdict-014
- dev-docs/v050-version-line
- dev-feat/vc69-approval-context-scope
- dev-feat/vc86-durable-retry
- dev-feat/vc68-approval-context
- dev-feat/vc45-approval-status-read
- dev-docs/v040-and-adapter-layering
- dev-feat/vc-22-blade-ops-views
- dev-feat/vc-20-blade-evidence-page
- dev-feat/vc-21-blade-chat-thread
- dev-feat/routes-registered-by-default
- dev-feat/vc-19-blade-approval-inbox
- dev-feat/vc-18-chat-entry-contract
- dev-docs/milestones-v030
- dev-feat/vc-16-execution-claims
- dev-feat/vc-17-config-inspection
- dev-feat/72-correlation-doctor-findings
- dev-feat/verdict-013-compatibility
- dev-feat/vc-14-conversation-correlation
- dev-feat/67-unauthorized-named-refusal
- dev-docs/track-adr-0001-followups
- dev-feat/vc-13-evidence-query
- dev-feat/63-verdict-012-compatibility
- dev-docs/adr-0001-amendment-verdict-0.12
- dev-feat/vc-15-incident-ledger
- dev-feat/vc-42-approval-item
- dev-ci/report-every-matrix-cell
- dev-docs/v0.2.0-changelog
- dev-feat/vc-12-tenancy
- dev-feat/vc-11-notifications
- dev-feat/vc-44-doc-corrections
- dev-feat/vc-43-close
- dev-feat/vc-41-approval-verbs
- dev-feat/vc-10-reconciliation
- dev-feat/vc-9-operational-state
- dev-fix/release-first-release
- dev-feat/vc-6-resolution-bridge
- dev-feat/vc-5-disposition-bridge
- dev-feat/unresumable-reason
- dev-docs/approval-manager-boundary
- dev-feat/vc-7-approver-authority
- dev-feat/vc-8-approval-presentation
- dev-feat/vc-3-preflight-doctor
- dev-feat/vc-2-resumable-agent-contract
- dev-feat/vc-4-pending-approval-store
- dev-feat/vc-1-walking-skeleton
This package is auto-updated.
Last update: 2026-09-02 15:47:30 UTC
README
Human-in-the-loop approval runtime and operator UI for Laravel AI agents governed by Verdict.
Status: pre-1.0, headless.
0.1.0ships the headless approval round trip — pause → authorized human decision → receipt transition → exact resume → execute at most once — driveable from your own code with no UI. Notifications, evidence projections, and the Blade / Livewire / Filament surfaces are specified indocs/design/0001-verdict-console-design.mdand land in later minors; build order is tracked inMILESTONES.md. Substantial decisions are recorded indocs/adr/; start with ADR 0001, the approval-surface contract — including the rule that a Verdictdenyis never approvable from the console.
What it is
Verdict decides at the tool boundary and records evidence; Laravel AI runs the agent and persists
conversations. Neither owns the tissue between them and a human. Verdict Console is that tissue plus
the operator surfaces: it turns a Verdict require_confirmation into a screen a person acts on,
drives the receipt → resume round trip, and presents what Verdict recorded.
It never decides (Verdict does), never persists conversations (Laravel AI does), and is never a second authorization authority. It owns the approval workflow and the UI.
Scope boundary (read first)
The receipt-backed approval loop exists only for Verdict BoundTool on an agent using Laravel
AI's RemembersConversations concern with a real (non-fake) gateway. Non-BoundTool approvals
are observable but not Verdict-drivable. See design §3.
Verdict require_review is a separate, gated review lane: it has no receipt and does not resume
an agent. Its durable review substrate shipped in Verdict 0.15 (#297, ADR 0035) with a
ReviewStatusReader read API; this package's reviewer-queue surface is tracked in #48, and until
it lands review items are not exposed here and decision evidence is not an inbox.
Package family
Install only the presentation stack you render in; all three sit on one headless core.
| Package | Contains |
|---|---|
fissible/verdict-console (this repo) |
Headless runtime + publishable Blade stubs (a working UI on install). |
fissible/verdict-console-livewire |
End-user chat with inline approval cards. |
fissible/verdict-console-filament |
Operator console (approval queue, evidence browser, alarms). |
Installation
composer require fissible/verdict-console:^0.9 php artisan vendor:publish --tag=verdict-console # config + the pending-approvals migration php artisan migrate php artisan verdict-console:doctor # preflight every silent trap before the first pause
Migrations are published, not auto-loaded: a console table must not appear on migrate without the
host asking for it. Publish only the config or only the migration with --tag=verdict-console-config
or --tag=verdict-console-migrations. Then bind the two host seams the round trip needs —
ResumableAgents (how to rebuild your agent from a stable key) and, if your conversations carry a
participant, ConversationParticipants — and define the approve-verdict-action Gate ability:
the shipped authority fails closed until you do.
Requirements
- PHP 8.3+
- Laravel 12 or 13
laravel/ai^0.11fissible/verdict^0.14
Development
composer install composer test # analyse + lint + type-coverage + pest
License
MIT — see LICENSE.md.