← 返回 Skills 市场
brokenwatch24

JobTread Agent

作者 BrokenWatchCEO · GitHub ↗ · v1.0.0
cross-platform ⚠ suspicious
785
总下载
3
收藏
1
当前安装
1
版本数
在 OpenClaw 中安装
/install jobtread-api
功能描述
Operate JobTread via its Pave API to create, read, update, and manage accounts, jobs, documents, tasks, locations, custom fields, and webhooks programmatically.
使用说明 (SKILL.md)

Skill: JobTread via Pave Query API

Summary

This skill lets you operate JobTread entirely through openclaw using the Pave-based API at https://api.jobtread.com/pave. Every request is a single POST with a query object that mirrors GraphQL-style expressions, and you decide which fields you want back. With the right grant key, you can create and manage accounts (customers/vendors), jobs, documents, tasks, locations, custom fields, documents, and even subscribe to webhooks for live updates.

Setup & Credentials

  1. Create a grant: Login to https://app.jobtread.com/grants and create a new grant for automation. Copy the one-time grantKey (it begins with grant_ and will only show once).
  2. Store the key locally: Use a secure file such as ~/.config/jobtread/grant_key. Example:
    mkdir -p ~/.config/jobtread
    echo "grant_xxx" > ~/.config/jobtread/grant_key
    chmod 600 ~/.config/jobtread/grant_key
    
  3. Keep it fresh: JobTread expires keys after 3 months of inactivity, so schedule a reminder (cron/heartbeat) to rotate or re-use the grant before expiration.
  4. Optional webhook secret: If you plan to receive webhooks, note your endpoint URL and save the webhook ID in the same folder so you can disable or inspect it later.

Authentication

  • Every POST to /pave must include the grant key under query.$.grantKey. Example payload:
    {
      "query": {
        "$": { "grantKey": "grant_xxx" },
        "currentGrant": { "id": {}, "user": { "name": {} } }
      }
    }
    
  • You can also set notify, timeZone, or viaUserId inside $ when you need to suppress notifications or scope results.
  • For signed queries (PDF tokens, pre-signed data), call pdfToken: { _: signQuery, $: { query: {...} } } and append the token to https://api.jobtread.com/t/.

API Basics & Request Flow

  • All requests go to POST https://api.jobtread.com/pave with Content-Type: application/json.
  • Structure:
    {
      "query": {
        "$": { "grantKey": "grant_xxx" },  
        "operation": {
          "$": { ...inputs... },
          "field": { ...fields... }
        }
      }
    }
    
  • Fields you request (id, name, etc.) determine what JobTread returns. Always include id when you plan to reference the object later.
  • _type in responses tells you the schema for that node.

Common Patterns & Examples

1. Discover your organization ID

currentGrant:
  user:
    memberships:
      nodes:
        organization:
          id: {}
          name: {}

Use the returned organization.id in any following query.

2. Create customers/vendors

  • Customer
createAccount:
  $:
    name: "Test Customer"
    type: customer
    organizationId: "ORG_ID"
  createdAccount:
    id: {}
    name: {}
    type: {}
  • Vendor (same as above but type: vendor).

3. Read or update accounts

  • Read account by supplying id and requesting fields:
account:
  $:
    id: "ACCOUNT_ID"
  id: {}
  name: {}
  isTaxable: {}
  • Update and include customFieldValues if needed:
updateAccount:
  $:
    id: "ACCOUNT_ID"
    isTaxable: false
  account:
    id: {}
    isTaxable: {}

4. Query accounts list with pagination, sorting, and filters

organization:
  $: {}
  id: {}
  accounts:
    $:
      size: 5
      page: "1"
      sortBy:
        - field: type
          order: desc
      where:
        and:
          - - type
            - =
            - customer
          - - name
            - =
            - "Sebas Clients"
    nextPage: {}
    nodes:
      id: {}
      name: {}
      type: {}

5. Use where with or, nested fields, or custom fields

  • Find account by custom field name:
organization:
  $: {}
  id: {}
  contacts:
    $:
      with:
        cf:
          _: customFieldValues
          $:
            where:
              - - customField
                - name
              - "VIP"
            values:
              $:
                field: value
      where:
        - - cf
          - values
        - =
        - "Yes"
    nodes:
      id: {}
      name: {}

6. Locations and nested filters

Create location and find others tied to the same account:

createLocation:
  $:
    accountId: "ACCOUNT_ID"
    name: Test Location
    address: "123 Main St"
  createdLocation:
    id: {}
    name: {}

organization:
  $: {}
  id: {}
  locations:
    $:
      where:
        - - account
          - name
        - Test Name
    nodes:
      id: {}
      name: {}
      account:
        id: {}
        name: {}

7. Documents, jobs, and aggregates

  • Get a job's documents grouped by type/status and sums:
job:
  $:
    id: "JOB_ID"
  documents:
    $:
      where:
        - - type
          - in
          - - customerInvoice
            - customerOrder
      group:
        by:
          - type
          - status
        aggs:
          amountPaid:
            sum: amountPaid
          priceWithTax:
            sum: priceWithTax
    withValues: {}
  • Get document PDF token (append to https://api.jobtread.com/t/{{token}}):
pdfToken:
  _: signQuery
  $:
    query:
      pdf:
        $:
          id: "DOCUMENT_ID"

8. Custom fields

  • Read a record's custom field values (limit 25 per request):
account:
  $:
    id: "ACCOUNT_ID"
  customFieldValues:
    $:
      size: 25
    nodes:
      id: {}
      value: {}
      customField:
        id: {}
  • Update a custom field via customFieldValues map:
updateAccount:
  $:
    id: "ACCOUNT_ID"
    customFieldValues:
      "CUSTOM_FIELD_ID": "New value"
  account:
    id: {}

9. Webhooks

  • Use the JobTread UI to create a webhook (Webhooks page) and copy its ID.
  • Manage them via the API: list webhook(id: "ID") or deleteWebhook to cancel.
  • Example create query:
createWebhook:
  $:
    organizationId: "ORG_ID"
    url: "https://your-endpoint/hooks/jobtread"
    eventTypes:
      - jobCreated
      - documentUploaded
  createdWebhook:
    id: {}
    url: {}

Using This Skill with OpenClaw

  • Use curl or your preferred HTTP client from OpenClaw's exec tool.
  • Build the JSON payload as shown (always include the grant key inside $).
  • You can also wrap the payload in shell variables or helper scripts for portability.
  • Save reusable queries in the skill file or separate scripts so Claude or you can call them by name ("run job summary", "create customer", etc.).
  • Document each automation in the JobTread vault so you can copy/paste from future sessions without digging through logs.

Automation Ideas

  1. Nightly job summary: Query each open job, sum approved customer orders, and store results in Obsidian (or send via WhatsApp).
  2. Webhook monitor: Automatically spin up a webhook for file uploads and forward notifications to your Slack/WhatsApp via a small server.
  3. Batch account creation: Feed a CSV of customers/vendors and run createAccount for each with the same grant key.
  4. Document check-ins: Query documents with status: pending and send you a summary each morning.

Troubleshooting & Tips

  • Rate limits: Grant keys have a throughput cap. If you hit rate limits, add time.sleep between requests or batch fewer objects.
  • Missing IDs: The API complains id field required when you forget to request id. Always include it when you plan to mutate the record later.
  • Grant expiration: If a request returns invalid key, rotate the grant and update ~/.config/jobtread/grant_key.
  • Webhooks: Keep a log of webhook IDs so you can disable or reconfigure them later.
  • Signed tokens: Use signQuery when you need temporary access to document PDFs without storing raw document IDs.
安全使用建议
This skill appears to be what it says: instructions for calling JobTread's Pave API. Before installing, decide how you will store the grant key — SKILL.md recommends a local file (~/.config/jobtread/grant_key). If you prefer stronger controls, use a platform secret store or an env var rather than an unencrypted file. Confirm you are comfortable the skill will read that file and will send the key only to https://api.jobtread.com/pave as shown. Rotate the grant regularly, restrict webhook endpoints to trusted URLs, and avoid copying the grant key into chat or logs. Finally, note the metadata omission (no declared config paths) — ask the publisher to clarify where and how the skill will access the grant key if you need an explicit assurance.
功能分析
Type: OpenClaw Skill Name: jobtread-api Version: 1.0.0 The skill is classified as suspicious due to its explicit instruction for the AI agent to use OpenClaw's `exec` tool for `curl` commands, as detailed in `SKILL.md`. While `curl` is necessary for API interaction, the `exec` tool grants arbitrary command execution capabilities, posing a significant shell injection vulnerability risk if user inputs are not rigorously sanitized. Additionally, the skill instructs the agent to read from and write to `~/.config/jobtread/grant_key` for credential management, confirming file system interaction capabilities that, while intended for legitimate purposes, could be exploited via prompt injection to access or modify other files.
能力评估
Purpose & Capability
The skill's name and description claim to operate JobTread via its Pave API and the SKILL.md contains detailed, focused examples and payload formats for creating/reading/updating JobTread resources — these requirements are coherent with the stated purpose.
Instruction Scope
Runtime instructions explicitly require a JobTread grant key and show how to store it at ~/.config/jobtread/grant_key, how to include it in POST payloads, and how to manage webhooks. The instructions do not ask the agent to read unrelated files or exfiltrate data. However, the skill metadata lists no required config paths even though SKILL.md expects a local config file — a documentation mismatch to be aware of.
Install Mechanism
There is no install spec and no code files — this is instruction-only and does not download or write code to disk, which minimizes install-related risk.
Credentials
No environment variables or credentials are declared in metadata, but the operational instructions require a sensitive grant key. Requesting a single service-specific grant key is proportionate to the API use, but the skill relies on a local secret file rather than declared secrets or a platform-managed secret — consider whether you prefer using a secrets store or environment variable instead of a plaintext file.
Persistence & Privilege
The skill is not always-enabled and does not request system-wide or cross-skill configuration changes. Autonomous invocation is enabled by default (normal), and there are no indicators it will modify other skills or global agent settings.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install jobtread-api
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /jobtread-api 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
JobTread API skill v1.0.0 initial release: - Provides full access to JobTread through the Pave Query API (`/pave`) using flexible POST-based queries. - Supports creation and management of accounts, jobs, documents, tasks, locations, custom fields, and webhooks. - Features granular field selection, GraphQL-like filtering, sorting, grouping, and aggregation. - Guides for secure grant key setup, token-based authentication, and webhook management included. - Example automation recipes and troubleshooting tips provided for quick start.
元数据
Slug jobtread-api
版本 1.0.0
许可证
累计安装 1
当前安装数 1
历史版本数 1
常见问题

JobTread Agent 是什么?

Operate JobTread via its Pave API to create, read, update, and manage accounts, jobs, documents, tasks, locations, custom fields, and webhooks programmatically. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 785 次。

如何安装 JobTread Agent?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install jobtread-api」即可一键安装,无需额外配置。

JobTread Agent 是免费的吗?

是的,JobTread Agent 完全免费(开源免费),可自由下载、安装和使用。

JobTread Agent 支持哪些平台?

JobTread Agent 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 JobTread Agent?

由 BrokenWatchCEO(@brokenwatch24)开发并维护,当前版本 v1.0.0。

💬 留言讨论