td-ai-tools 1.3.4 → 1.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/package.json +1 -1
  2. package/skills/forge-cli/SKILL.md +30 -16
  3. package/skills/forge-cli/references/api-v2-certificates-and-security.md +28 -0
  4. package/skills/forge-cli/references/api-v2-databases-and-backups.md +35 -0
  5. package/skills/forge-cli/references/api-v2-overview.md +102 -0
  6. package/skills/forge-cli/references/api-v2-php-services-recipes.md +64 -0
  7. package/skills/forge-cli/references/api-v2-processes-and-scheduler.md +67 -0
  8. package/skills/forge-cli/references/api-v2-sites.md +84 -0
  9. package/skills/forge-cli/references/command-reference-v2.md +145 -0
  10. package/skills/shopify-lint/SKILL.md +1 -1
  11. package/skills/shopify-lint/theme-check-theory/.theme-check.example.yml +4 -0
  12. package/skills/shopify-lint/theme-check-theory/README.md +43 -2
  13. package/skills/shopify-lint/theme-check-theory/configs/recommended.yml +4 -0
  14. package/skills/shopify-lint/theme-check-theory/src/checks/hardcoded-text.test.ts +6 -10
  15. package/skills/shopify-lint/theme-check-theory/src/checks/hardcoded-text.ts +0 -11
  16. package/skills/shopify-lint/theme-check-theory/src/checks/required-liquid-doc.test.ts +46 -0
  17. package/skills/shopify-lint/theme-check-theory/src/checks/required-liquid-doc.ts +111 -0
  18. package/skills/shopify-lint/theme-check-theory/src/index.test.ts +2 -0
  19. package/skills/shopify-lint/theme-check-theory/src/index.ts +3 -0
  20. package/skills/forge-cli/references/api-databases-and-backups.md +0 -48
  21. package/skills/forge-cli/references/api-overview.md +0 -90
  22. package/skills/forge-cli/references/api-php-services-recipes.md +0 -88
  23. package/skills/forge-cli/references/api-sites.md +0 -135
  24. package/skills/forge-cli/references/api-ssl-and-security.md +0 -41
  25. package/skills/forge-cli/references/api-workers-and-scheduler.md +0 -77
  26. package/skills/forge-cli/references/command-reference.md +0 -176
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "td-ai-tools",
3
- "version": "1.3.4",
3
+ "version": "1.3.6",
4
4
  "description": "Install agent skills and packs into your project",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,22 +1,33 @@
1
1
  ---
2
2
  name: forge-cli
3
- version: 1.0.0
4
- description: Manage Laravel Forge servers, sites, and provisioned resources from the terminal with the Laravel Forge CLI, falling back to the Forge HTTP API (Statamic-relevant endpoints documented here) for anything the CLI does not cover. Use when the user wants to inspect Forge state, switch active servers, deploy sites, update environment variables, view logs, run remote commands, use Tinker, manage services like PHP, Nginx, daemons, and databases, or perform Statamic site setup tasks the CLI lacks a verb for (site/SSL/git/worker/scheduler/backup/recipe/composer-auth management).
3
+ description: Manage Laravel Forge organizations, servers, sites, and provisioned resources with Forge CLI 2.x, falling back to the organization-scoped Forge HTTP API v2 for operations the CLI does not cover. Use for deploys, environment files, logs, remote commands, Tinker, PHP, Nginx, databases, background processes, sites, SSL, scheduled jobs, backups, recipes, or Composer credentials.
5
4
  ---
6
5
 
7
6
  # Laravel Forge CLI
8
7
 
9
8
  ## Core Workflow
10
9
 
11
- 1. Start with `forge` to confirm the CLI is installed and to inspect available commands.
12
- 2. Check the active server before making changes:
10
+ 1. Confirm the installed package and inspect the available commands:
13
11
 
14
12
  ```bash
13
+ forge --version
14
+ composer global show laravel/forge-cli
15
+ forge list --raw
16
+ ```
17
+
18
+ 2. Check the active organization and server before making changes:
19
+
20
+ ```bash
21
+ forge organization:current
22
+ forge organization:list
23
+ forge organization:switch organization-slug
15
24
  forge server:current
16
25
  forge server:list
17
26
  forge server:switch staging
18
27
  ```
19
28
 
29
+ Switching organizations clears the active server. Select the server again after an organization switch.
30
+
20
31
  3. If the task needs SSH access, verify connectivity first:
21
32
 
22
33
  ```bash
@@ -36,7 +47,7 @@ forge site:list
36
47
  forge deploy
37
48
  forge deploy example.com
38
49
  forge deploy:logs
39
- forge deploy:logs 12345
50
+ forge deploy:logs example.com
40
51
  ```
41
52
 
42
53
  ### Environment Variables
@@ -70,31 +81,34 @@ forge database:shell my-database-name --user=my-user
70
81
  forge php:status 8.5
71
82
  forge php:restart 8.5
72
83
  forge nginx:logs access
73
- forge daemon:restart
84
+ forge background-process:list
85
+ forge background-process:restart 12345
74
86
  ```
75
87
 
88
+ `daemon:*` remains a legacy alias in CLI 2.x. Prefer `background-process:*`.
89
+
76
90
  ## Decision Guide
77
91
 
78
- - Need server context first: use `server:current`, `server:list`, or `server:switch`.
92
+ - Need context first: use `organization:*`, then `server:*`.
79
93
  - Need site-level work: use `site:list`, `deploy`, `env:*`, `site:logs`, `command`, or `tinker`.
80
94
  - Need service health or maintenance: use `{resource}:status`, `{resource}:logs`, `{resource}:restart`, or `{resource}:shell`.
81
95
  - Need a secure shell on the box: confirm `ssh:test`, then use `forge ssh`.
82
- - Need something the CLI does not expose (creating sites, issuing SSL, wiring up workers, the Laravel scheduler, backups, recipes, Composer auth for Statamic Pro, etc.): drop down to the Forge HTTP API see the API references below.
96
+ - Need something the CLI does not expose (creating sites, issuing SSL, background-process creation, the Laravel scheduler, backups, recipes, Composer auth for Statamic Pro, etc.): use the Forge HTTP API v2 references below.
83
97
 
84
98
  ## When the CLI Is Not Enough
85
99
 
86
- The CLI is intentionally narrow. For Statamic site tasks it does not cover, call the Forge HTTP API directly. Authentication, IDs, and error handling are documented in [references/api-overview.md](references/api-overview.md); start there before reaching for an endpoint table.
100
+ The CLI is intentionally narrow. For Statamic site tasks it does not cover, call the Forge HTTP API directly. Authentication, organization scope, IDs, pagination, and v1-to-v2 migration rules are documented in [references/api-v2-overview.md](references/api-v2-overview.md); start there.
87
101
 
88
102
  Picking the right reference:
89
103
 
90
- - Creating or reconfiguring a site, wiring a Git repo, editing the deployment script or Nginx, viewing deployment history, registering webhooks → [references/api-sites.md](references/api-sites.md).
91
- - Queue workers, generic daemons, scheduled jobs, the Laravel scheduler integration, maintenance mode → [references/api-workers-and-scheduler.md](references/api-workers-and-scheduler.md).
92
- - MySQL/Postgres databases, database users, scheduled backups, restores → [references/api-databases-and-backups.md](references/api-databases-and-backups.md).
93
- - Let's Encrypt or imported certificates, HTTP basic auth security rules (e.g. locking down `/cp`) → [references/api-ssl-and-security.md](references/api-ssl-and-security.md).
94
- - Installing/patching PHP, OPCache toggles, service start/stop/restart, server log files, saved Recipes, Composer auth for `composer.statamic.com` and other private repos → [references/api-php-services-recipes.md](references/api-php-services-recipes.md).
104
+ - Sites, domains, deployment scripts and history, commands, logs, webhooks, deploy keys → [references/api-v2-sites.md](references/api-v2-sites.md).
105
+ - Background processes, scheduled jobs, Laravel Scheduler, maintenance mode, and the removal of queue workers in v2 → [references/api-v2-processes-and-scheduler.md](references/api-v2-processes-and-scheduler.md).
106
+ - Database schemas, database users, backups, and restores → [references/api-v2-databases-and-backups.md](references/api-v2-databases-and-backups.md).
107
+ - Domain certificates and HTTP basic-auth security rules → [references/api-v2-certificates-and-security.md](references/api-v2-certificates-and-security.md).
108
+ - PHP versions, service actions, recipes, and Composer credentials → [references/api-v2-php-services-recipes.md](references/api-v2-php-services-recipes.md).
95
109
 
96
- Operations not relevant to Statamic (WordPress installs, Horizon/Octane/Reverb/Pulse/Inertia SSR daemons, server provisioning, load balancers, deprecated MySQL endpoints) are deliberately omitted — fall back to the [official API docs](https://forge.laravel.com/api-documentation) if one of those comes up.
110
+ The v2 route tables are not complete request-schema documentation. Before a mutating request, confirm the body in the [official API v2 documentation](https://laravel.com/forge/docs/api-reference/introduction) or the current `laravel/forge-sdk` 4.x source. Never substitute a remembered API v1 payload.
97
111
 
98
112
  ## Reference
99
113
 
100
- Read [references/command-reference.md](references/command-reference.md) when you need the fuller CLI command set, examples, or reminders about how the active server affects command behavior.
114
+ Read [references/command-reference-v2.md](references/command-reference-v2.md) for the supported CLI 2.x command families and active-context behavior.
@@ -0,0 +1,28 @@
1
+ # Forge API v2 — Certificates and Security Rules
2
+
3
+ Paths are relative to `https://forge.laravel.com/api`; `{org}` is the organization slug.
4
+
5
+ ## Domain Certificates
6
+
7
+ API v2 manages certificates beneath a specific site domain. Resolve the domain ID first; do not pass a hostname where `{domainId}` is expected.
8
+
9
+ | Operation | Method | Path |
10
+ | --- | --- | --- |
11
+ | List domains | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains` |
12
+ | List / create certificates | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}/certificates` |
13
+ | Get active certificate | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}/certificates/active` |
14
+ | Get / delete certificate | GET / DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}/certificates/{certificateId}` |
15
+ | Perform certificate action | POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}/certificates/{certificateId}/actions` |
16
+
17
+ Certificate creation and action payloads differ by certificate type and operation. Check the current v2 schema for Let's Encrypt, imported certificates, DNS validation, installation, and activation. The API v1 endpoints such as `/certificates/letsencrypt`, `/install`, and `/activate` must not be reused.
18
+
19
+ Before replacing or deleting an active production certificate, verify the domain, certificate ID, renewal state, and rollback path.
20
+
21
+ ## Security Rules (HTTP Basic Auth)
22
+
23
+ | Operation | Method | Path |
24
+ | --- | --- | --- |
25
+ | List / create | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/security-rules` |
26
+ | Get / update / delete | GET / PUT / DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/security-rules/{ruleId}` |
27
+
28
+ Security-rule payloads contain sensitive credentials. Never print passwords or commit them. A path-specific rule can protect a staging site or `/cp`, but confirm its routing effect and remove unintended double authentication before launch.
@@ -0,0 +1,35 @@
1
+ # Forge API v2 — Databases and Backups
2
+
3
+ Paths are relative to `https://forge.laravel.com/api`; `{org}` is the organization slug. Many Statamic sites are flat-file and do not require a database. Database backups also do not cover Statamic content, assets, or other files on disk.
4
+
5
+ ## Database Schemas
6
+
7
+ | Operation | Method | Path |
8
+ | --- | --- | --- |
9
+ | List / create | GET / POST | `/orgs/{org}/servers/{serverId}/database/schemas` |
10
+ | Get / delete | GET / DELETE | `/orgs/{org}/servers/{serverId}/database/schemas/{databaseId}` |
11
+ | Synchronize | POST | `/orgs/{org}/servers/{serverId}/database/schemas/synchronizations` |
12
+
13
+ API v2 calls databases schemas. There is no update-schema endpoint in the current SDK.
14
+
15
+ ## Database Users
16
+
17
+ | Operation | Method | Path |
18
+ | --- | --- | --- |
19
+ | List / create | GET / POST | `/orgs/{org}/servers/{serverId}/database/users` |
20
+ | Get / update / delete | GET / PUT / DELETE | `/orgs/{org}/servers/{serverId}/database/users/{userId}` |
21
+ | Update database password | PUT | `/orgs/{org}/servers/{serverId}/database/password` |
22
+
23
+ Confirm whether an update replaces the full database-access set before changing a user. Never expose database passwords in command output or logs.
24
+
25
+ ## Backup Configurations and Instances
26
+
27
+ | Operation | Method | Path |
28
+ | --- | --- | --- |
29
+ | List / create configurations | GET / POST | `/orgs/{org}/servers/{serverId}/database/backups` |
30
+ | Get / update / delete configuration | GET / PUT / DELETE | `/orgs/{org}/servers/{serverId}/database/backups/{configurationId}` |
31
+ | List instances / run now | GET / POST | `/orgs/{org}/servers/{serverId}/database/backups/{configurationId}/instances` |
32
+ | Get / delete instance | GET / DELETE | `/orgs/{org}/servers/{serverId}/database/backups/{configurationId}/instances/{backupId}` |
33
+ | Restore instance | POST | `/orgs/{org}/servers/{serverId}/database/backups/{configurationId}/instances/{backupId}/restores` |
34
+
35
+ Backup configuration payloads vary by storage provider. Verify the provider-specific schema before creation. Treat restores and deletions as destructive: resolve IDs with GET requests and confirm the target database first.
@@ -0,0 +1,102 @@
1
+ # Forge HTTP API v2 Overview
2
+
3
+ Use the HTTP API when Forge CLI 2.x does not expose the required resource mutation. These references cover the API v2 routes most relevant to Statamic and Laravel operations.
4
+
5
+ ## Authentication and Transport
6
+
7
+ - Base URL: `https://forge.laravel.com/api`
8
+ - Authentication: `Authorization: Bearer <FORGE_API_TOKEN>`
9
+ - Headers: `Accept: application/json` and `Content-Type: application/json`
10
+ - Do not append `/v1`; that is the deprecated legacy API.
11
+ - Do not print, log, or commit API tokens.
12
+
13
+ Use a token supplied by the user or already available in the process environment. Do not read stored CLI credentials from disk merely to discover a token.
14
+
15
+ ```bash
16
+ curl -sS "https://forge.laravel.com/api/orgs" \
17
+ -H "Authorization: Bearer $FORGE_API_TOKEN" \
18
+ -H "Accept: application/json"
19
+ ```
20
+
21
+ ## Organization Scope
22
+
23
+ Most API v2 resources are scoped to an organization slug:
24
+
25
+ ```text
26
+ /orgs/{organizationSlug}/servers/{serverId}/...
27
+ ```
28
+
29
+ Resolve context before composing a request:
30
+
31
+ ```bash
32
+ forge organization:current
33
+ forge organization:list
34
+ forge server:current
35
+ forge server:list
36
+ forge site:list
37
+ ```
38
+
39
+ Useful discovery routes:
40
+
41
+ | Operation | Method | Path |
42
+ | --- | --- | --- |
43
+ | List organizations | GET | `/orgs` |
44
+ | Get organization | GET | `/orgs/{organizationSlug}` |
45
+ | List servers | GET | `/orgs/{organizationSlug}/servers` |
46
+ | Get server | GET | `/orgs/{organizationSlug}/servers/{serverId}` |
47
+ | List sites on a server | GET | `/orgs/{organizationSlug}/servers/{serverId}/sites` |
48
+ | Get a site within an organization | GET | `/orgs/{organizationSlug}/sites/{siteId}` |
49
+
50
+ ## API v1 to v2 Migration Rules
51
+
52
+ - Base URL changed from `/api/v1` to `/api`.
53
+ - Most paths gained `/orgs/{organizationSlug}`.
54
+ - Collection responses use a `data` envelope and cursor pagination.
55
+ - Daemons are now background processes; jobs are now scheduled jobs.
56
+ - Domains are first-class site resources and certificates are domain-scoped.
57
+ - Databases are under `/database/schemas`; database users are under `/database/users`.
58
+ - Service mutations use `/services/{service}/actions`.
59
+ - Queue-worker endpoints and Git repository management were removed from API v2.
60
+ - Many mutations return `202 Accepted` with no resource body. Follow with a GET after the asynchronous operation finishes.
61
+
62
+ Never translate only the host or prefix of an API v1 example. Verify the entire v2 path and payload.
63
+
64
+ ## Pagination and Responses
65
+
66
+ List responses are cursor-paginated. Follow the response links or cursor instead of assuming one page contains every resource. Raw responses generally wrap resources in `data`; content and log endpoints typically put text under `data.attributes` rather than returning bare text.
67
+
68
+ Common status codes:
69
+
70
+ | Code | Meaning |
71
+ | --- | --- |
72
+ | 200 / 201 | Successful read or creation |
73
+ | 202 | Accepted asynchronous mutation; poll or follow with GET |
74
+ | 204 | Successful response with no body |
75
+ | 401 / 403 | Missing, invalid, or insufficiently scoped token |
76
+ | 404 | Wrong organization slug or resource ID, or unavailable endpoint |
77
+ | 422 | Validation failure; inspect the response body before retrying |
78
+ | 429 | Rate limited; back off and retry |
79
+
80
+ ## Safe Request Pattern
81
+
82
+ Prefer explicit variables and inspect with GET before a mutation:
83
+
84
+ ```bash
85
+ FORGE_API_BASE="https://forge.laravel.com/api"
86
+ ORGANIZATION_SLUG="example-org"
87
+ SERVER_ID="123"
88
+ SITE_ID="456"
89
+
90
+ curl -sS \
91
+ -H "Authorization: Bearer $FORGE_API_TOKEN" \
92
+ -H "Accept: application/json" \
93
+ "$FORGE_API_BASE/orgs/$ORGANIZATION_SLUG/servers/$SERVER_ID/sites/$SITE_ID"
94
+ ```
95
+
96
+ For writes, add `Content-Type: application/json` and a payload verified against the current v2 docs. Confirm exact IDs with a read-only request first, and get explicit approval before destructive deletions not already requested.
97
+
98
+ ## Sources
99
+
100
+ - [Forge API v2 introduction](https://laravel.com/forge/docs/api-reference/introduction)
101
+ - [Forge SDK](https://laravel.com/forge/docs/sdk)
102
+ - [Forge CLI](https://laravel.com/forge/docs/cli)
@@ -0,0 +1,64 @@
1
+ # Forge API v2 — PHP, Services, Recipes, and Composer Credentials
2
+
3
+ Paths are relative to `https://forge.laravel.com/api`; `{org}` is the organization slug.
4
+
5
+ ## PHP Versions and Configuration
6
+
7
+ | Operation | Method | Path |
8
+ | --- | --- | --- |
9
+ | List / install versions | GET / POST | `/orgs/{org}/servers/{serverId}/php/versions` |
10
+ | Get / update / delete version | GET / PUT / DELETE | `/orgs/{org}/servers/{serverId}/php/versions/{phpVersionId}` |
11
+ | Get / set CLI version | GET / PUT | `/orgs/{org}/servers/{serverId}/php/cli-version` |
12
+ | Get / set default site version | GET / PUT | `/orgs/{org}/servers/{serverId}/php/site-version` |
13
+ | Get / update FPM config | GET / PUT | `/orgs/{org}/servers/{serverId}/php/versions/{phpVersionId}/configs/fpm` |
14
+ | Get / update CLI config | GET / PUT | `/orgs/{org}/servers/{serverId}/php/versions/{phpVersionId}/configs/cli` |
15
+ | Get / update pool config | GET / PUT | `/orgs/{org}/servers/{serverId}/php/versions/{phpVersionId}/configs/pool` |
16
+ | Get OPCache state | GET | `/orgs/{org}/servers/{serverId}/php/opcache` |
17
+ | Enable / configure OPCache | POST | `/orgs/{org}/servers/{serverId}/php/opcache` |
18
+ | Disable OPCache | DELETE | `/orgs/{org}/servers/{serverId}/php/opcache` |
19
+
20
+ `{phpVersionId}` is the v2 resource ID, not a remembered v1 `php84` path segment. Installation payloads still identify a requested version, but verify the supported value and the project’s PHP requirement before changing production.
21
+
22
+ ## Service Actions
23
+
24
+ Service operations use a shared action route:
25
+
26
+ ```text
27
+ POST /orgs/{org}/servers/{serverId}/services/{service}/actions
28
+ ```
29
+
30
+ Supported SDK service names are `nginx`, `mysql`, `postgres`, `redis`, `php`, and `supervisor`. A restart payload is:
31
+
32
+ ```json
33
+ {"action":"restart"}
34
+ ```
35
+
36
+ Use the CLI for supported restarts:
37
+
38
+ ```bash
39
+ forge nginx:restart
40
+ forge database:restart
41
+ forge php:restart 8.5
42
+ ```
43
+
44
+ Do not reuse API v1 paths such as `/nginx/reboot`, `/mysql/stop`, or `/services/restart`.
45
+
46
+ ## Recipes
47
+
48
+ | Operation | Method | Path |
49
+ | --- | --- | --- |
50
+ | List / create | GET / POST | `/orgs/{org}/recipes` |
51
+ | Get / update / delete | GET / PUT / DELETE | `/orgs/{org}/recipes/{recipeId}` |
52
+ | List runs / run recipe | GET / POST | `/orgs/{org}/recipes/{recipeId}/runs` |
53
+ | Get run | GET | `/orgs/{org}/recipes/{recipeId}/runs/{runId}` |
54
+
55
+ Recipes can run privileged scripts. Inspect the complete script, target servers, and execution user before starting a run.
56
+
57
+ ## Composer Credentials
58
+
59
+ | Operation | Method | Path |
60
+ | --- | --- | --- |
61
+ | List / create | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/composer/credentials` |
62
+ | Get / update / delete | GET / PUT / DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/composer/credentials/{repository}` |
63
+
64
+ Use this for `composer.statamic.com` and other private repositories. Treat usernames, tokens, passwords, and license keys as secrets; do not print them in logs or include them in documentation examples.
@@ -0,0 +1,67 @@
1
+ # Forge API v2 — Background Processes and Scheduling
2
+
3
+ Paths are relative to `https://forge.laravel.com/api`; `{org}` is the organization slug.
4
+
5
+ ## Queue Workers Were Removed from API v2
6
+
7
+ The old `/sites/{siteId}/workers` API is not available in v2. Do not call it or try to translate it by adding organization scope.
8
+
9
+ For a long-running Laravel or Statamic queue consumer, create a server background process whose command changes into the site directory and runs the appropriate `queue:work` command. Confirm the exact command, site user, working directory, and process count with the project before creating it. If the Forge dashboard offers a higher-level queue-worker workflow, prefer that for worker-specific settings.
10
+
11
+ ## Background Processes
12
+
13
+ API v2 renamed daemons to background processes.
14
+
15
+ | Operation | Method | Path | Notes |
16
+ | --- | --- | --- | --- |
17
+ | List | GET | `/orgs/{org}/servers/{serverId}/background-processes` | Cursor-paginated |
18
+ | Create | POST | `/orgs/{org}/servers/{serverId}/background-processes` | Verify current body schema |
19
+ | Get | GET | `/orgs/{org}/servers/{serverId}/background-processes/{processId}` | — |
20
+ | Update | PUT | `/orgs/{org}/servers/{serverId}/background-processes/{processId}` | Often returns 202 |
21
+ | Restart/action | POST | `/orgs/{org}/servers/{serverId}/background-processes/{processId}/actions` | For restart: `{"action":"restart"}` |
22
+ | Read log | GET | `/orgs/{org}/servers/{serverId}/background-processes/{processId}/log` | Content is in `data.attributes.content` |
23
+ | Delete | DELETE | `/orgs/{org}/servers/{serverId}/background-processes/{processId}` | Destructive |
24
+
25
+ CLI 2.x provides read and restart operations:
26
+
27
+ ```bash
28
+ forge background-process:list
29
+ forge background-process:status 12345
30
+ forge background-process:logs 12345
31
+ forge background-process:restart 12345
32
+ ```
33
+
34
+ The `daemon:*` aliases remain for compatibility, but skill instructions and new automation should use `background-process:*`.
35
+
36
+ ## Scheduled Jobs
37
+
38
+ Forge v2 supports server-scoped and site-scoped jobs.
39
+
40
+ | Scope | Operation | Method | Path |
41
+ | --- | --- | --- | --- |
42
+ | Server | List / create | GET / POST | `/orgs/{org}/servers/{serverId}/scheduled-jobs` |
43
+ | Server | Get / delete | GET / DELETE | `/orgs/{org}/servers/{serverId}/scheduled-jobs/{jobId}` |
44
+ | Server | Output | GET | `/orgs/{org}/servers/{serverId}/scheduled-jobs/{jobId}/output` |
45
+ | Site | List / create | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/scheduled-jobs` |
46
+ | Site | Get / delete | GET / DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/scheduled-jobs/{jobId}` |
47
+ | Site | Output | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/scheduled-jobs/{jobId}/output` |
48
+
49
+ For Statamic or Laravel applications, prefer the Scheduler integration when the application already defines its schedule. Use individual scheduled jobs only for independent cron commands.
50
+
51
+ ## Laravel Scheduler Integration
52
+
53
+ | Operation | Method | Path |
54
+ | --- | --- | --- |
55
+ | Status | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/integrations/laravel-scheduler` |
56
+ | Enable | POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/integrations/laravel-scheduler` |
57
+ | Disable | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/integrations/laravel-scheduler` |
58
+
59
+ ## Laravel Maintenance Mode
60
+
61
+ | Operation | Method | Path |
62
+ | --- | --- | --- |
63
+ | Status | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/integrations/laravel-maintenance` |
64
+ | Enable | POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/integrations/laravel-maintenance` |
65
+ | Disable | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/integrations/laravel-maintenance` |
66
+
67
+ Confirm enable payload options against the current v2 schema; do not reuse the old v1 maintenance payload without verification.
@@ -0,0 +1,84 @@
1
+ # Forge API v2 — Sites, Domains, Deployments, Commands, and Logs
2
+
3
+ Paths are relative to `https://forge.laravel.com/api`. Replace `{org}` with the organization slug. Confirm request bodies in the current API documentation before writing; API v1 payloads are not assumed compatible.
4
+
5
+ ## Sites and Domains
6
+
7
+ | Operation | Method | Path |
8
+ | --- | --- | --- |
9
+ | List all organization sites | GET | `/orgs/{org}/sites` |
10
+ | Get organization site | GET | `/orgs/{org}/sites/{siteId}` |
11
+ | List server sites | GET | `/orgs/{org}/servers/{serverId}/sites` |
12
+ | Create site | POST | `/orgs/{org}/servers/{serverId}/sites` |
13
+ | Update site | PUT | `/orgs/{org}/servers/{serverId}/sites/{siteId}` |
14
+ | Delete site | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}` |
15
+ | List domains | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains` |
16
+ | Create domain | POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains` |
17
+ | Get domain | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}` |
18
+ | Update domain | PATCH | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}` |
19
+ | Delete domain | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}` |
20
+
21
+ API v2 removed the old aliases endpoint. Manage each hostname through the domains collection. Git repository install, update, and delete operations were also removed from API v2; connect or change source control in the Forge dashboard.
22
+
23
+ ## Environment and Nginx
24
+
25
+ | Operation | Method | Path | Payload / response note |
26
+ | --- | --- | --- | --- |
27
+ | Get environment | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/environment` | Content is in `data.attributes.content` |
28
+ | Update environment | PUT | `/orgs/{org}/servers/{serverId}/sites/{siteId}/environment` | `environment`: full file content |
29
+ | Get site Nginx | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/nginx` | Content is in `data.attributes.content` |
30
+ | Update site Nginx | PUT | `/orgs/{org}/servers/{serverId}/sites/{siteId}/nginx` | `config`: full configuration |
31
+ | Get domain Nginx | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}/nginx` | Domain-specific configuration |
32
+ | Update domain Nginx | PUT | `/orgs/{org}/servers/{serverId}/sites/{siteId}/domains/{domainId}/nginx` | `config`: full configuration |
33
+
34
+ Prefer `forge env:pull` and `forge env:push` for interactive environment work. Always fetch the current Nginx configuration before replacing it.
35
+
36
+ ## Deployments and Deploy Keys
37
+
38
+ | Operation | Method | Path |
39
+ | --- | --- | --- |
40
+ | List deployments | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments` |
41
+ | Start deployment | POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments` |
42
+ | Get deployment | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/{deploymentId}` |
43
+ | Get deployment log | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/{deploymentId}/log` |
44
+ | Get deployment status | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/status` |
45
+ | Disable quick deploy | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/status` |
46
+ | Get deployment script | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/script` |
47
+ | Update deployment script | PUT | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/script` |
48
+ | Get deploy hook | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/deploy-hook` |
49
+ | Update deploy hook | PUT | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/deploy-hook` |
50
+ | Enable push-to-deploy | POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/push-to-deploy` |
51
+ | Disable push-to-deploy | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deployments/push-to-deploy` |
52
+ | Get / create deploy key | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deploy-key` |
53
+ | Delete deploy key | DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/deploy-key` |
54
+
55
+ Use `forge deploy` and `forge deploy:logs` for normal deployment operations. API v2 has no equivalent for the old reset-deployment-state endpoint.
56
+
57
+ ## Site Commands
58
+
59
+ | Operation | Method | Path |
60
+ | --- | --- | --- |
61
+ | List / run | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/commands` |
62
+ | Get / delete | GET / DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/commands/{commandId}` |
63
+ | Get output | GET | `/orgs/{org}/servers/{serverId}/sites/{siteId}/commands/{commandId}/output` |
64
+
65
+ Prefer `forge command example.com --command="..."` unless scripting through HTTP.
66
+
67
+ ## Site Logs
68
+
69
+ | Log | Read | Clear |
70
+ | --- | --- | --- |
71
+ | Nginx access | `GET .../sites/{siteId}/logs/nginx-access` | `DELETE .../sites/{siteId}/logs/nginx-access` |
72
+ | Nginx error | `GET .../sites/{siteId}/logs/nginx-error` | `DELETE .../sites/{siteId}/logs/nginx-error` |
73
+ | Application | `GET .../sites/{siteId}/logs/application` | `DELETE .../sites/{siteId}/logs/application` |
74
+
75
+ Each abbreviated path begins `/orgs/{org}/servers/{serverId}`. Prefer `forge site:logs --follow` for a live application-log tail.
76
+
77
+ ## Deployment Webhooks
78
+
79
+ | Operation | Method | Path |
80
+ | --- | --- | --- |
81
+ | List / create | GET / POST | `/orgs/{org}/servers/{serverId}/sites/{siteId}/webhooks` |
82
+ | Get / delete | GET / DELETE | `/orgs/{org}/servers/{serverId}/sites/{siteId}/webhooks/{webhookId}` |
83
+
84
+ The API v1 deployment-failure-email endpoint is not available in v2.
@@ -0,0 +1,145 @@
1
+ # Forge CLI 2.x Command Reference
2
+
3
+ This reference covers the currently supported Forge CLI 2.x command families.
4
+
5
+ ## Installation and Verification
6
+
7
+ Requirements:
8
+
9
+ - PHP 8.2 or newer
10
+ - Composer available globally
11
+
12
+ Install or upgrade within major version 2:
13
+
14
+ ```bash
15
+ composer global require "laravel/forge-cli:^2.0" --with-all-dependencies
16
+ ```
17
+
18
+ Verify both the executable and Composer package metadata:
19
+
20
+ ```bash
21
+ forge --version
22
+ composer global show laravel/forge-cli
23
+ forge list --raw
24
+ ```
25
+
26
+ If `forge --version` disagrees with Composer metadata, confirm `command -v forge` points to the Composer global binary. Package metadata is the reliable installed-package version; a release may contain a stale display string.
27
+
28
+ Authenticate:
29
+
30
+ ```bash
31
+ forge login
32
+ forge login --token="your-api-token"
33
+ forge logout
34
+ ```
35
+
36
+ For CI, set `FORGE_API_TOKEN` in the CI secret store. Never echo the token.
37
+
38
+ ## Active Organization and Server
39
+
40
+ CLI 2.x commands run in an active organization and usually an active server:
41
+
42
+ ```bash
43
+ forge organization:current
44
+ forge organization:list
45
+ forge organization:switch
46
+ forge organization:switch organization-slug
47
+
48
+ forge server:current
49
+ forge server:list
50
+ forge server:switch
51
+ forge server:switch production
52
+ ```
53
+
54
+ Aliases `org:current`, `org:list`, and `org:switch` are available. Switching organizations resets the active server, so choose the server again afterward.
55
+
56
+ ## SSH
57
+
58
+ ```bash
59
+ forge ssh:test
60
+ forge ssh:configure
61
+ forge ssh:configure --key=/path/to/public-key.pub --name=laptop-key
62
+ forge ssh
63
+ forge ssh server-name
64
+ ```
65
+
66
+ ## Sites
67
+
68
+ ```bash
69
+ forge site:list
70
+ forge open
71
+ forge open example.com
72
+ forge deploy
73
+ forge deploy example.com
74
+ forge deploy:logs
75
+ forge deploy:logs example.com
76
+ ```
77
+
78
+ The optional `deploy:logs` argument is a site name, not a deployment ID.
79
+
80
+ Environment files:
81
+
82
+ ```bash
83
+ forge env:pull
84
+ forge env:pull example.com
85
+ forge env:pull example.com .env
86
+ forge env:push
87
+ forge env:push example.com
88
+ forge env:push example.com .env
89
+ ```
90
+
91
+ Application logs and remote commands:
92
+
93
+ ```bash
94
+ forge site:logs
95
+ forge site:logs --follow
96
+ forge site:logs example.com --follow
97
+ forge command
98
+ forge command example.com --command="php artisan about"
99
+ forge tinker
100
+ forge tinker example.com
101
+ ```
102
+
103
+ If configuration is cached or a long-running process consumes environment values, deploy and restart that process after pushing `.env` changes.
104
+
105
+ ## Background Processes
106
+
107
+ ```bash
108
+ forge background-process:list
109
+ forge background-process:status
110
+ forge background-process:status 12345
111
+ forge background-process:logs
112
+ forge background-process:logs 12345 --follow
113
+ forge background-process:restart
114
+ forge background-process:restart 12345
115
+ ```
116
+
117
+ CLI 2.x retains `daemon:list`, `daemon:status`, `daemon:logs`, and `daemon:restart` as aliases. Prefer `background-process:*` in new instructions.
118
+
119
+ ## Database, Nginx, and PHP
120
+
121
+ ```bash
122
+ forge database:status
123
+ forge database:logs
124
+ forge database:restart
125
+ forge database:shell
126
+ forge database:shell database-name --user=database-user
127
+
128
+ forge nginx:status
129
+ forge nginx:logs
130
+ forge nginx:logs access
131
+ forge nginx:restart
132
+
133
+ forge php:status
134
+ forge php:status 8.5
135
+ forge php:logs
136
+ forge php:logs 8.5
137
+ forge php:restart
138
+ forge php:restart 8.5
139
+ ```
140
+
141
+ Use read-only status and log commands before restarts when diagnosing. Confirm organization and server context before any state-changing command.
142
+
143
+ ## Source
144
+
145
+ [Official Laravel Forge CLI documentation](https://laravel.com/forge/docs/cli)
@@ -40,7 +40,7 @@ python3 .agents/skills/shopify-lint/scripts/shopify_lint.py --path .
40
40
 
41
41
  The script identifies files changed since the current branch's merge-base, adds staged, unstaged, and untracked files, then runs three linters over that set and merges their results into one report:
42
42
 
43
- - **Theme Check** — `shopify theme check --output json`. The root `.theme-check.yml` directly requires the bundled `theme-check-theory` package from this skill directory. `DisallowedScriptOrStyleTag` reports inline executable `<script>` and all `<style>` tags in modified Liquid files while allowing external-source and JSON-data scripts. `HardcodedText` reports rendered hard-coded copy, except content inside Liquid `stylesheet`, `javascript`, and `schema` tags, and except text beginning with `--`, which is a CSS custom property name rather than copy. The generated `.theme-check.yml` also pins the upstream `StaticStylesheetAndJavascriptTags` to `error`, so Liquid written inside a `{% stylesheet %}` or `{% javascript %}` block always fails the lint.
43
+ - **Theme Check** — `shopify theme check --output json`. The root `.theme-check.yml` directly requires the bundled `theme-check-theory` package from this skill directory. `DisallowedScriptOrStyleTag` reports inline executable `<script>` and all `<style>` tags in modified Liquid files while allowing external-source and JSON-data scripts. `HardcodedText` reports rendered hard-coded copy, except content inside Liquid `stylesheet`, `javascript`, and `schema` tags, except text beginning with `--`, which is a CSS custom property name rather than copy, and except string arguments passed to `{% render %}` and `{% include %}`, which are as often class names or size tokens as copy. The generated `.theme-check.yml` also pins the upstream `StaticStylesheetAndJavascriptTags` to `error`, so Liquid written inside a `{% stylesheet %}` or `{% javascript %}` block always fails the lint.
44
44
  - **JavaScript** — ESLint's recommended rules plus the bundled `eslint-plugin-theory`, over modified `.js` and `.mjs` files *and* the JavaScript inside `{% javascript %}` blocks of modified `.liquid` files.
45
45
  - **CSS** — `stylelint-config-standard` through the bundled `stylelint-config-theory`, over modified `.css` files *and* the CSS inside `{% stylesheet %}` blocks of modified `.liquid` files.
46
46