scout

The single entry point for the Scout Application Capability Intelligence Platform

One package. One import. Everything you need to annotate your Flutter app's capabilities and work with the generated manifest — with zero transitive dependencies.

import 'package:scout/scout.dart';

What you get

1. Annotations for your production code

Mark screens and service methods so Scout understands your app:

@Capability(
  id: 'mark_attendance',
  label: 'Mark Attendance',
  category: 'Attendance Management',
  description: 'Record attendance for a class session. Requires class ID, date, and records.',
  permissions: ['attendance:write'],
  preconditions: ['authenticated_user', 'selected_class'],
  owner: 'attendance-team',
)
class MarkAttendanceScreen extends StatelessWidget { ... }
@Permission(
  id: 'attendance:write',
  label: 'Write Attendance',
  roles: ['teacher', 'admin'],
)
class AttendanceWritePermission {}
@Workflow(
  id: 'fee_payment_workflow',
  label: 'Pay Fees',
  steps: [
    WorkflowStep(order: 1, capabilityId: 'view_fee_structure'),
    WorkflowStep(order: 2, capabilityId: 'view_fee_dues'),
    WorkflowStep(order: 3, capabilityId: 'pay_fees_online'),
    WorkflowStep(order: 4, capabilityId: 'download_fee_receipt'),
  ],
)
class FeePaymentFlow {}

2. A typed model for reading scout.manifest.json

Consume the generated manifest in CLI tools, test assertions, custom integrations:

import 'dart:convert';
import 'dart:io';
import 'package:scout/scout.dart';

final json = jsonDecode(File('.scout/manifest.json').readAsStringSync());
final manifest = ScoutManifest.fromJson(json as Map<String, dynamic>);

// What can a teacher do?
final teacherCapabilities = manifest.capabilitiesForRole('teacher');
print(teacherCapabilities.map((c) => c.label).join('\n'));

// Find a specific capability
final cap = manifest.capabilityById('mark_attendance');
print(cap?.aiTool?.description);

// Access routes
for (final route in manifest.routes) {
  print('${route.path} [${route.access}]');
}

Annotations reference

Annotation Place on Purpose
@Capability screen classes, service methods Declare a named user capability
@Permission any class Declare a named permission for the registry
@Workflow any class Declare a multi-step capability sequence
@FeatureFlag screen classes Gate a capability behind a feature flag
@Owner any class Declare team ownership for diff notifications

@Capability fields

Field Type Required Description
id String yes Unique snake_case verb_noun identifier
label String yes Human-readable display name
category String yes Functional grouping (e.g. 'Attendance Management')
description String? Plain-English description for AI systems
permissions List<String> Required permission IDs (e.g. ['attendance:write'])
preconditions List<String> Required state keys (e.g. ['authenticated_user'])
relatedCapabilities List<String> Related capability IDs for AI navigation
analyticsEvent String? Analytics event emitted on use
owner String? Responsible team/individual
gdpr GdprClass none / personal / sensitive
offlineCapable bool Can function without network?

ScoutManifest model

The ScoutManifest class and its associated types provide a complete typed representation of scout.manifest.json. All classes have fromJson / toJson methods.

Key types

Class Description
ScoutManifest Top-level manifest
ScoutApp App metadata (name, version, roles, base URL)
CapabilityNode A single capability entry
AiTool OpenAI-compatible tool definition derived from a capability
RouteNode A route from scout_router analysis
ApiEndpointNode An endpoint from scout_openapi analysis
SchemaNode A data model schema
PermissionNode A declared permission
FeatureFlagNode A feature flag
WorkflowNode / WorkflowStep A multi-step workflow

Convenience methods on ScoutManifest

// Capabilities visible to a role (filtered by permission→role mapping)
manifest.capabilitiesForRole('teacher')

// Lookup by ID
manifest.capabilityById('mark_attendance')
manifest.routeById('attendance_mark_route')

Installation

# pubspec.yaml
dependencies:
  scout: ^0.1.0

If you only need the annotations (no manifest model), use scout_annotations instead — it's a strict subset with the same zero-dep guarantee.


The Scout workflow

# 1. Annotate your screens and services (this package)

# 2. Generate the capability graph
dart run build_runner build

# 3. Inspect the result
scout scan          # analyse + write .scout/manifest.json
scout serve         # MCP + REST server on localhost:4242
scout validate      # CI gate — fails on unlinked routes
scout diff          # detect breaking capability changes

Part of Scout

The full Scout platform consists of:

Package Role
scout (this) Annotations + manifest model — the developer entry point
scout_annotations Annotations only, for production code with strict zero-dep requirements
scout_openapi build_runner plugin: Dart → OpenAPI 3.0 spec
scout_router build_runner plugin: go_router → route manifest
scout_builder Orchestrates all passes → scout.manifest.json
scout_cli The scout command-line tool (14 commands)
scout_mcp MCP + REST server for AI agent integration

License

MIT

Libraries

scout
Scout — Application Capability Intelligence Platform.