mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-14 17:40:37 +02:00
Automatically import skills from new GitHub project repositories and update enabled sources in the background. Preserve project-derived access, saved selections, immutable execution versions and explicit pins; add legacy adoption, refresh and connection repair in Sources. Include durable scheduling and bounded work credits, production Storybook journeys, real GitHub-to-routine acceptance receipts and final-head CI/security/Greptile qualification. Co-Authored-By: Paperclip <noreply@paperclip.ing>
83 lines
5.0 KiB
Markdown
83 lines
5.0 KiB
Markdown
---
|
||
navigation: {"section":"Automation and structured work","sectionOrder":60,"order":10}
|
||
---
|
||
|
||
# Routines, schedules, and triggers
|
||
|
||
Operators define repeatable work, configure its inputs and triggers, run it on demand or automatically, and inspect the execution history and resulting tasks.
|
||
|
||
Implementation: [routine list](../../ui/src/pages/Routines.tsx), [routine detail](../../ui/src/pages/RoutineDetail.tsx), [trigger editor](../../ui/src/components/routine-triggers/TriggerWizard.tsx).
|
||
|
||
Agent access: [companion](../agent-access-map/routines.md).
|
||
|
||
## Sub-features
|
||
|
||
- `definition`: save the request, agent, project, variables, and execution context.
|
||
- `triggers`: configure supported schedules/webhooks or other offered triggers.
|
||
- `run-now`: supply inputs and create an observable routine execution.
|
||
- `history`: inspect resulting tasks and past outcomes.
|
||
- `management`: organize, pause/disable, archive, and distinguish plugin-managed routines.
|
||
|
||
## How to get to it (user POV)
|
||
|
||
### `routine-editor`
|
||
|
||
Open `/routines`, create one, and inspect `/routines/:routineId` and its edit sections.
|
||
|
||
### `trigger-history`
|
||
|
||
Use the routine's trigger controls and Runs/Recent Runs/Audit links; lists also
|
||
offer Run now. **History** records configuration versions, not executions.
|
||
|
||
## Driving it with Playwright and the Paperclip CLI
|
||
|
||
Preconditions: follow the [baseline](./README.md#before-driving-a-journey). Use a disposable routine, deterministic test agent, and harmless target. Record schedule timezone and enabled state.
|
||
|
||
### `routine-editor`
|
||
|
||
Automated: [routine detail helper](../../ui/src/pages/RoutineDetail.test.tsx) tests project-selector options, not the rendered editor. [Routine service](../../server/src/__tests__/routines-service.test.ts) covers server contracts. Saving and running through the editor remain manual checks.
|
||
|
||
Manual: Save an agent, request, project, and a required variable. Reload and inspect the saved definition. Run now with a distinguishable input, follow the resulting task, and verify its output and history entry. Check a missing required input.
|
||
|
||
Variables are detected from `{{name}}` placeholders; mark a detected variable
|
||
Required and verify missing input prevents Run routine. Configuration can be
|
||
checked without model credentials. A successful subprocess run alone does not
|
||
complete the generated task or establish a useful task output.
|
||
|
||
### `trigger-history`
|
||
|
||
Automated: [trigger wizard](../../ui/src/components/routine-triggers/TriggerWizard.test.tsx) is component coverage; [routine integration](../../server/src/__tests__/routines-e2e.test.ts) is server integration rather than a provider-wide browser proof.
|
||
|
||
Manual: Set a near-term disposable schedule or authorized test webhook, verify one eligible execution and its source trigger, then disable it and confirm further invocations stop. Inspect a failed execution without losing its history. Remove the temporary trigger after testing.
|
||
|
||
## Gotchas
|
||
|
||
- Saving a schedule does not prove the scheduler invoked it.
|
||
- Timezone, overlap/concurrency rules, and plugin ownership affect behavior.
|
||
- A routine run’s task must still respect pause, access, and budget gates.
|
||
- Managed idle hosts may use the [routine wake protocol](../../doc/idle-sleep-safety.md#scheduled-routine-wake-protocol)
|
||
to sleep between supported future runs. The host must save a durable alarm
|
||
and verify the same generation before stopping. Local execution and catch-up
|
||
remain unchanged. Unsupported triggers and other pending work keep it awake.
|
||
|
||
### Latest skill references
|
||
|
||
Routine instructions retain stable skill mentions. After a project source syncs an
|
||
upstream change, the next execution uses the latest installed version without waiting
|
||
on GitHub. Record the resolved version before/after and verify a resumed execution
|
||
keeps its original version. Private skill references require current project access
|
||
for both the agent and its responsible person.
|
||
|
||
### Storybook verification
|
||
|
||
#### `run-now`
|
||
|
||
Scope: ui
|
||
Storybook: Mount RoutineRunVariablesDialog through actual RoutineDetail with required/default inputs, project/workspace overrides, pending, blocked and failed submission. RunButton-only no-op examples do not supply/run inputs.
|
||
Production: POST /routines/{id}/run must validate variables, create one attributed execution/task and obey pause/access/budget gates; inspect actual task outcome separately.
|
||
Sources: Source: [RoutineRunVariablesDialog.tsx](../../ui/src/components/RoutineRunVariablesDialog.tsx), [RoutineDetail.tsx](../../ui/src/pages/RoutineDetail.tsx), [routines.ts](../../server/src/routes/routines.ts). Tests: [RoutineRunVariablesDialog.test.tsx](../../ui/src/components/RoutineRunVariablesDialog.test.tsx), [routines-service.test.ts](../../server/src/__tests__/routines-service.test.ts), [routines-e2e.test.ts](../../server/src/__tests__/routines-e2e.test.ts)
|
||
|
||
### Documentation scope: Routines, pipelines, cases, and status cards
|
||
|
||
All four capabilities have recipes. Trigger/provider/timezone combinations, custom case schemas, stage automation types, and summarizer quality need deeper cases.
|