How to model UI-visible application jobs with the browser-safe @owlmeans/job contract, schemas and abstract HTTP/WS entrypoints. Auto-invoked when sharing job status between a server and browser without exposing queue mechanics.
Scanned 9/22/2026
Install to Claude Code
npx -y skills add owlmeans/common --skill job --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Job?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/owlmeans-job-common)More formats (shields.io, HTML) on the badges page.
---
name: job
description: How to model UI-visible application jobs with the browser-safe @owlmeans/job contract, schemas and abstract HTTP/WS entrypoints. Auto-invoked when sharing job status between a server and browser without exposing queue mechanics.
user-invocable: false
---
<!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
# @owlmeans/job
**Layer:** Shared domain contract
**Install:** `"@owlmeans/job": "^0.1.18-rc.0"` in `dependencies`
Use this package only when jobs are part of the application's domain—for example, an operator
screen that manages imports or an account screen that follows an export. It is not a queue API.
## Boundary
`JobView` is the only shape allowed across the browser boundary. It contains:
- opaque `id` and application-owned `kind`;
- normalized `JobViewStatus`;
- bounded public progress, summary, metadata, result and error;
- `cancellable` and public timestamps.
It deliberately has no queue name, processor name, technical id, payload, ownership field,
credential, retry/lock option, driver state or stack trace. Its schemas are closed against extra
top-level fields.
## Entrypoints
```typescript
import { declareJobEntrypoints } from '@owlmeans/job'
export const reportJobs = declareJobEntrypoints('report-jobs', {
path: '/reports/jobs',
parent: api.reports.base,
})
```
The returned `base`, `list`, `get`, `cancel` and `watch` declarations use only ordinary guarded
HTTP/WS routes. They carry no queue transport options. Aliases are derived with
`jobEntrypointAliases(root)` so client and server agree without importing backend code.
Public list filters are closed to `status`, `kind`, `page` and `size`. Do not add arbitrary
criteria or technical fields to the shared query. A product-specific filter belongs in a safe
domain field and must be translated by the server policy.
## Required halves
- Bind the declarations with `@owlmeans/server-job` and a mandatory `JobExposurePolicy` that
authenticates, scopes, resolves opaque ids, allowlists output and approves cancellation.
- Consume them with `@owlmeans/client-job`, which stores only `JobView` and `JobViewEvent`.
- Keep `@owlmeans/queue` and its driver in backend packages only.
## Key exports
| Export | Purpose |
|---|---|
| `JobView` / `JobViewStatus` | Public application job model |
| `JobViewSchema` / `JobViewListSchema` | Closed response validation |
| `JobListQuery` / `JobListQuerySchema` | Closed public filtering |
| `JobViewEvent` / `JOB_EVENT` | Sanitized socket frames |
| `declareJobEntrypoints` | Abstract HTTP/WS protocol group |
| `jobEntrypointAliases` | Stable derived aliases |
## Related
- `server-job` — backend mapper and policy bridge
- `client-job` — browser store and hooks
- `route` — generic routes remain transport-agnostic
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!