···3131* [Filtering Events](#filtering-events)
3232* [Queue Integration](#queue-integration)
3333* [Configuration](#configuration-1)
3434+* [Programmatic Usage](#programmatic-usage)
3435* [Available Commands](#available-commands)
3536* [Testing](#testing)
3637* [External Resources](#external-resources)
···601602 \App\Signals\NewPostSignal::class,
602603 \App\Signals\NewFollowSignal::class,
603604],
605605+```
606606+607607+---
608608+609609+## Programmatic Usage
610610+611611+You can start and stop the consumer programmatically using the `Signal` facade:
612612+613613+```php
614614+use SocialDept\Signal\Facades\Signal;
615615+616616+// Start consuming events (uses mode from config)
617617+Signal::start();
618618+619619+// Start from a specific cursor
620620+Signal::start(cursor: 123456789);
621621+622622+// Check which mode is active
623623+$mode = Signal::getMode(); // Returns 'jetstream' or 'firehose'
624624+625625+// Stop consuming events
626626+Signal::stop();
627627+```
628628+629629+The facade automatically resolves the correct consumer (Jetstream or Firehose) based on your `config('signal.mode')` setting. This allows you to:
630630+631631+- Switch between modes by changing configuration
632632+- Start consumers from application code (e.g., in a custom command)
633633+- Integrate Signal into existing application workflows
634634+635635+```php
636636+// Example: Start consumer based on environment
637637+if (app()->environment('production')) {
638638+ config(['signal.mode' => 'jetstream']); // Use efficient Jetstream
639639+} else {
640640+ config(['signal.mode' => 'firehose']); // Use comprehensive Firehose for testing
641641+}
642642+643643+Signal::start();
604644```
605645606646---