forge-cli
Debug and manage Laravel applications in production via Laravel Forge CLI and direct SSH. Activates when the user mentions production logs, debug production, forge, check production, run on server, production database, deploy, SSH to production, server logs, remote artisan, production error, or tinker production.
What this skill does
# Laravel Forge CLI
## Overview
Laravel Forge CLI allows managing Forge-provisioned servers from the command line. Use it for debugging production issues, checking logs, and running safe read-only commands.
## Setup
```bash
# Install globally
composer global require laravel/forge-cli
# Authenticate (opens browser)
forge login
# List available servers/sites
forge server:list
forge site:list
```
### PHP 8.4 Deprecation Warnings
Forge CLI triggers deprecation warnings with PHP 8.4. Create an alias to suppress them:
```bash
# Add to ~/.zshrc or ~/.bashrc
alias forge='php -d error_reporting="E_ALL & ~E_DEPRECATED" $(which forge)'
```
## Safe Read-Only Commands
These commands are safe to run without confirmation:
### View Logs
```bash
# Application logs (Laravel logs)
forge site:logs <site>
# Deployment logs
forge deploy:logs <site>
# PHP-FPM logs
forge php:logs
# Nginx logs
forge nginx:logs
```
### Status Checks
```bash
forge php:status
forge nginx:status
forge database:status
forge server:list
forge site:list
```
### Site Information
```bash
forge site:info <site>
```
## Direct SSH (Recommended for Complex Tasks)
The `forge command` subcommand has a known bug ("Event unresolvable"). Use direct SSH instead:
### Get Server IP
```bash
forge server:list
# Note the IP address for your server
```
### Run Remote Commands
> **Note:** If zero-downtime deployments are enabled, replace `/home/forge/<site>` with `/home/forge/<site>/current` in all commands below.
```bash
# Basic structure
ssh forge@<server-ip> "cd /home/forge/<site> && <command>"
# Examples:
# Check PHP version
ssh forge@<ip> "php -v"
# Run artisan commands (read-only)
ssh forge@<ip> "cd /home/forge/<site> && php artisan --version"
ssh forge@<ip> "cd /home/forge/<site> && php artisan route:list"
ssh forge@<ip> "cd /home/forge/<site> && php artisan config:show app"
# Check queue status
ssh forge@<ip> "cd /home/forge/<site> && php artisan queue:monitor"
# View recent logs
ssh forge@<ip> "tail -100 /home/forge/<site>/storage/logs/laravel.log"
```
### Tinker (Read-Only Queries)
```bash
# IMPORTANT: Use echo to see output, escape backslashes
ssh forge@<ip> "cd /home/forge/<site> && php artisan tinker --execute='echo App\\Models\\User::count();'"
# Query examples
ssh forge@<ip> "cd /home/forge/<site> && php artisan tinker --execute='echo App\\Models\\User::where(\"email\", \"like\", \"%@example.com\")->count();'"
# Get recent records
ssh forge@<ip> "cd /home/forge/<site> && php artisan tinker --execute='print_r(App\\Models\\User::latest()->first()->toArray());'"
```
## Destructive Operations (Require Confirmation)
These commands are blocked by the safety hook and require explicit user confirmation:
### Deployment
```bash
forge deploy <site> # Triggers deployment
forge deploy:reset <site> # Resets deployment script
```
### Environment Changes
**Always use `env:pull` and `env:push` for environment changes** - never edit `.env` directly via SSH with `sed` or `echo` (error-prone, no backup).
> **CRITICAL: Do NOT rename or copy the `.env.forge.<id>` file!**
>
> Forge CLI internally tracks the original `.env.forge.<site-id>` filename created by `env:pull`. Renaming it (e.g., `mv .env.forge.* .env`) or copying it (`cp .env.forge.* .env`) breaks this tracking and causes `env:push` to fail with:
> `"The environment variables for that site have not been downloaded."`
>
> **Edit the `.env.forge.<site-id>` file directly, then push.**
> **CRITICAL: Always use the scratchpad directory for env:pull/env:push operations!**
>
> The `forge env:pull` command creates files in the current working directory. If run from a project root, this can **overwrite the local `.env` file** and cause data loss.
>
> **ALWAYS `cd` to the scratchpad directory first** before running `env:pull` or `env:push`.
```bash
# 1. FIRST: Change to the scratchpad directory (REQUIRED)
cd <scratchpad-directory>
# 2. Pull current .env to scratchpad
# Creates .env.forge.<site-id> in current working directory
forge env:pull <site>
# Output: Environment Variables Written To [.env.forge.3023104]
# 3. Edit the .env.forge.<site-id> file DIRECTLY with your changes
# DO NOT rename or copy it — Forge tracks the original filename internally
# - Add new variables
# - Update existing values
# - Remove obsolete variables
# 4. Push back to production (DESTRUCTIVE)
# Forge will prompt: "Would You Like Update The Site Environment File
# With The Contents Of The File [.env.forge.<id>] (yes/no)"
# Pipe "yes" to confirm non-interactively
echo "yes" | forge env:push <site>
# 5. Clean up scratchpad files
rm -f .env.forge.*
# 6. Clear config cache on the server
ssh forge@<ip> "cd /home/forge/<site> && php artisan config:clear"
```
**Example workflow:**
```bash
# ALWAYS start by changing to scratchpad
cd <scratchpad-directory>
# Pull example.com .env to scratchpad
forge env:pull example.com
# Output: Environment Variables Written To [.env.forge.3023104]
# Edit the pulled file directly (DO NOT rename)
# Use the Edit tool to add/modify variables in .env.forge.3023104
# Push back (pipe "yes" for non-interactive confirmation)
echo "yes" | forge env:push example.com
# Clean up scratchpad
rm -f .env.forge.*
# Clear config cache on server
ssh forge@<ip> "cd /home/forge/example.com && php artisan config:clear"
```
**Common mistake — DO NOT do this:**
```bash
# WRONG: Renaming breaks Forge's internal file tracking
mv .env.forge.3023104 .env
forge env:push example.com # FAILS: "environment variables not downloaded"
# WRONG: Copying also breaks it
cp .env.forge.3023104 .env
forge env:push example.com # FAILS: same error
```
**Why use the scratchpad:**
- **Prevents overwriting local project `.env`** - critical safety measure
- Creates an isolated workspace for production env changes
- Scratchpad is session-specific and auto-cleaned
- Keeps production credentials out of project directories
**Why this workflow is safer:**
- Creates a local backup you can review before pushing
- Avoids shell escaping issues with special characters
- Prevents accidental concatenation or corruption
- Easy to diff changes before pushing
### Database Operations via SSH
```bash
# These are BLOCKED - require confirmation:
ssh forge@<ip> "... php artisan migrate"
ssh forge@<ip> "... php artisan db:seed"
ssh forge@<ip> "mysql -e 'DELETE FROM ...'"
ssh forge@<ip> "mysql -e 'UPDATE ...'"
ssh forge@<ip> "mysql -e 'DROP ...'"
ssh forge@<ip> "mysql -e 'TRUNCATE ...'"
```
## Deployment Script Location
**The deploy script is NOT stored on the server.** It's managed via:
- Forge web dashboard: Sites → [site] → Deployments → Deploy Script
- Forge API
When Forge deploys, it sends the script remotely and executes it. Deployment logs and provisioning scripts are stored in `/home/forge/.forge/`:
```
/home/forge/.forge/
├── provision-*.sh # Provisioning scripts (server setup)
├── provision-*.output # Provisioning output logs
├── daemon-*.log # Daemon/worker logs
└── scheduled-*.log # Scheduled task logs
```
## Deployment Modes
Forge supports two deployment modes:
### Standard Deployment (Default)
Site deployed directly to `/home/forge/<site>/`:
```
/home/forge/<site>/
├── app/
├── public/
├── storage/
├── .env
└── ...
```
Use `/home/forge/<site>` for commands.
### Zero-Downtime Deployment (Optional)
When enabled, Forge uses Envoyer-style releases:
```
/home/forge/<site>/
├── current -> releases/20240115120000 # Symlink to active release
├── releases/
│ ├── 20240115120000/ # Current release
│ ├── 20240114100000/ # Previous release
│ └── ...
├── storage/ # Shared storage
└── .env # Shared environment
```
Use `/home/forge/<site>/current` for commands.
**How to detect which mode:** Check if a `current` symlink exists:
```bash
ssh forge@<ip> "ls -la /home/forge/<site>/current 2>/dev/nulRelated in Cloud & DevOps
appbuilder-action-scaffolder
IncludedCreate, implement, deploy, and debug Adobe Runtime actions with consistent layout, validation, and error handling. Use this skill whenever the user needs to add actions to an App Builder project, understand action structure (params, response format, web/raw actions), configure actions in the manifest, use App Builder SDKs (State, Files, Events, database), deploy and invoke actions via CLI, debug action issues, or implement patterns such as webhook receivers, custom event providers, journaling consumers, large payload redirects, action sequence pipelines, and Asset Compute workers. Also trigger when users mention serverless functions in Adobe context, action logging, IMS authentication for actions, or cron-style scheduled actions.
orchestrating-datacloud
IncludedSalesforce Data Cloud product orchestrator for connect→prepare→harmonize→segment→act workflows. Use this skill when the user needs a multi-step Data Cloud pipeline, cross-phase troubleshooting, or data space and data kit management. TRIGGER when: user needs a multi-step Data Cloud pipeline, asks to set up or troubleshoot Data Cloud across phases, manages data spaces or data kits, or wants a cross-phase sf data360 workflow. DO NOT TRIGGER when: work is isolated to a single phase (use the matching phase-specific skill), the task is STDM/session tracing/parquet telemetry (use observing-agentforce), standard CRM SOQL (use querying-soql), or Apex implementation (use generating-apex).
github-project-automation
IncludedAutomate GitHub repository setup with CI/CD workflows, issue templates, Dependabot, and CodeQL security scanning. Includes 12 production-tested workflows and prevents 18 errors: YAML syntax, action pinning, and configuration. Use when: setting up GitHub Actions CI/CD, creating issue/PR templates, enabling Dependabot or CodeQL scanning, deploying to Cloudflare Workers, implementing matrix testing, or troubleshooting YAML indentation, action version pinning, secrets syntax, runner versions, or CodeQL configuration. Keywords: github actions, github workflow, ci/cd, issue templates, pull request templates, dependabot, codeql, security scanning, yaml syntax, github automation, repository setup, workflow templates, github actions matrix, secrets management, branch protection, codeowners, github projects, continuous integration, continuous deployment, workflow syntax error, action version pinning, runner version, github context, yaml indentation error
sf-datacloud
IncludedSalesforce Data Cloud product orchestrator for connect→prepare→harmonize→segment→act workflows. TRIGGER when: user needs a multi-step Data Cloud pipeline, asks to set up or troubleshoot Data Cloud across phases, manages data spaces or data kits, or wants a cross-phase `sf data360` workflow. DO NOT TRIGGER when: work is isolated to a single phase (use the matching sf-datacloud-* skill), the task is STDM/session tracing/parquet telemetry (use sf-ai-agentforce-observability), standard CRM SOQL (use sf-soql), or Apex implementation (use sf-apex).
fabric-cli
IncludedUse this skill for Fabric.so CLI workflows with the `fabric` terminal command: diagnose/install/login, search or browse a Fabric library, save notes/links/files, create folders, ask the Fabric AI assistant, manage tasks/workspaces, generate shell completion, check subscription usage, produce JSON output, and use Fabric as persistent agent memory. Do not use for Microsoft Fabric/Azure/Power BI `fab`, Daniel Miessler's Fabric framework, Python Fabric SSH, Fabric.js, or textile/fashion fabric.
lark
IncludedLark/Feishu CLI skills: lark-cli operations for docs, markdown, sheets, base, calendar, im, mail, task, okr, drive, wiki, slides, whiteboard, apps, approval, attendance, contact, vc, minutes, event. Use when the user needs to operate Lark/Feishu resources via lark-cli, send messages, manage documents, spreadsheets, calendars, tasks, OKRs, deploy web pages, or any Feishu/Lark workspace operations.