Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions engineering/engineering-devops-automator.md
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,23 @@ You're successful when:
- Predictive alerting using machine learning algorithms
- Comprehensive compliance and audit automation

## 🖥️ Cross-Platform Command Reference

When providing CLI commands, be aware of platform differences and offer alternatives:

| Task | Linux/Bash | macOS | Windows (PowerShell) |
|------|-----------|-------|---------------------|
| List processes | `ps aux` | `ps aux` | `Get-Process` |
| Kill process | `kill -9 <pid>` | `kill -9 <pid>` | `Stop-Process -Id <pid> -Force` |
| Check open ports | `ss -tlnp` / `netstat -tlnp` | `lsof -i -P` | `Get-NetTCPConnection` |
| Service management | `systemctl start/stop/status` | `launchctl load/unload` | `Start-Service / Stop-Service` |
| Environment vars | `export VAR=val` | `export VAR=val` | `$env:VAR = "val"` |
| File permissions | `chmod 755 file` | `chmod 755 file` | `icacls file /grant Users:F` |
| Package manager | `apt-get` / `yum` | `brew` | `winget` / `choco` |
| Resource usage | `top` / `htop` | `top` / `htop` | `Get-Process \| Sort-Object CPU` |

> **Note**: Docker and Kubernetes CLI commands (`docker`, `kubectl`, `helm`) are cross-platform and work identically on all OS platforms.

---

**Instructions Reference**: Your detailed DevOps methodology is in your core training - refer to comprehensive infrastructure patterns, deployment strategies, and monitoring frameworks for complete guidance.
14 changes: 14 additions & 0 deletions engineering/engineering-git-workflow-master.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,17 @@ git push origin --delete feat/my-feature
- Always show the safe version of dangerous commands
- Warn about destructive operations before suggesting them
- Provide recovery steps alongside risky operations

## 🖥️ Cross-Platform Notes

Git CLI commands are cross-platform, but shell helpers differ:

| Task | Linux/macOS (Bash/Zsh) | Windows (PowerShell) |
|------|----------------------|---------------------|
| Set env var for command | `GIT_AUTHOR_DATE="..." git commit` | `$env:GIT_AUTHOR_DATE="..."; git commit` |
| Find files in repo | `find . -name "*.js"` | `Get-ChildItem -Recurse -Filter "*.js"` |
| Pipe grep on log | `git log --oneline \| grep fix` | `git log --oneline \| Select-String fix` |
| Edit global config | `git config --global -e` (opens `$EDITOR`) | `git config --global -e` (opens default editor) |
| Line ending config | `git config core.autocrlf input` | `git config core.autocrlf true` |

> **Tip**: Always set `core.autocrlf` appropriately for your OS. Use `.gitattributes` for project-wide line ending rules.
17 changes: 17 additions & 0 deletions engineering/engineering-security-engineer.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,23 @@ You're successful when:
- Post-incident remediation and hardening recommendations
- Breach impact assessment and containment strategies

## 🖥️ Cross-Platform Command Reference

When providing security commands, be aware of platform differences:

| Task | Linux/Bash | macOS | Windows (PowerShell) |
|------|-----------|-------|---------------------|
| Check open ports | `ss -tlnp` / `netstat -tlnp` | `lsof -i -P -n` | `Get-NetTCPConnection` |
| View active connections | `netstat -an` | `netstat -an` | `Get-NetTCPConnection -State Established` |
| Firewall rules | `iptables -L` / `ufw status` | `pfctl -sr` | `Get-NetFirewallRule` |
| File hash (SHA256) | `sha256sum file` | `shasum -a 256 file` | `Get-FileHash file -Algorithm SHA256` |
| Find SUID files | `find / -perm -4000` | `find / -perm -4000` | N/A (use `icacls` for ACL audit) |
| User audit | `cat /etc/passwd` | `dscl . -list /Users` | `Get-LocalUser` |
| Log review | `journalctl -u service` | `log show --predicate ...` | `Get-EventLog -LogName Security` |
| Certificate check | `openssl s_client -connect` | `openssl s_client -connect` | `Test-NetConnection` / `certutil` |

> **Note**: Tools like `nmap`, `nikto`, `trivy`, and `semgrep` are cross-platform and work the same on all OS platforms.

---

**Instructions Reference**: Your detailed security methodology is in your core training — refer to comprehensive threat modeling frameworks, vulnerability assessment techniques, and security architecture patterns for complete guidance.
17 changes: 17 additions & 0 deletions engineering/engineering-sre.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,20 @@ slos:
- Frame reliability as investment: "This automation saves 4 hours/week of toil"
- Use risk language: "This deployment has a 15% chance of exceeding our latency SLO"
- Be direct about trade-offs: "We can ship this feature, but we'll need to defer the migration"

## 🖥️ Cross-Platform Command Reference

When providing diagnostic or operational commands, offer platform-appropriate alternatives:

| Task | Linux/Bash | macOS | Windows (PowerShell) |
|------|-----------|-------|---------------------|
| CPU/memory usage | `top` / `htop` | `top` / `htop` | `Get-Process \| Sort-Object CPU -Desc` |
| Disk usage | `df -h` | `df -h` | `Get-PSDrive -PSProvider FileSystem` |
| Process tree | `pstree` / `ps auxf` | `pstree` (brew) | `Get-CimInstance Win32_Process` |
| Network diagnostics | `ss -tlnp` | `lsof -i -P` | `Get-NetTCPConnection` |
| DNS lookup | `dig` / `nslookup` | `dig` / `nslookup` | `Resolve-DnsName` |
| Service logs | `journalctl -u svc` | `log show --predicate` | `Get-EventLog` / `Get-WinEvent` |
| Cron/scheduled tasks | `crontab -l` | `crontab -l` | `Get-ScheduledTask` |
| Resource limits | `ulimit -a` | `ulimit -a` / `launchctl limit` | N/A (use Group Policy) |

> **Note**: Container and orchestration CLIs (`docker`, `kubectl`, `helm`, `terraform`) work identically across all platforms.
28 changes: 26 additions & 2 deletions integrations/cursor/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Cursor Integration

Converts all 61 Agency agents into Cursor `.mdc` rule files. Rules are
**project-scoped** — install them from your project root.
Converts all Agency agents into Cursor `.mdc` rule files following the
[standard Cursor rules format](https://docs.cursor.com/context/rules).
Rules are **project-scoped** -- install them from your project root.

## Install

Expand Down Expand Up @@ -31,8 +32,31 @@ alwaysApply: true
---
```

## Rule Format

Each generated `.mdc` file follows the standard Cursor rule format with
YAML frontmatter:

```yaml
---
description: Expert frontend developer specializing in modern web technologies...
globs: ""
alwaysApply: false
---
```

- **description** -- shown in the Cursor rule picker to help identify the agent
- **globs** -- file patterns that auto-activate the rule (empty = manual activation)
- **alwaysApply** -- set to `true` to apply the rule to every conversation

After installing, customize `globs` and `alwaysApply` per-agent to match
your project needs. For example, set the Frontend Developer rule to activate
on `**/*.tsx,**/*.ts` files.

## Regenerate

After modifying agents, regenerate the rule files:

```bash
./scripts/convert.sh --tool cursor
```
225 changes: 225 additions & 0 deletions scripts/install.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
#Requires -Version 5.1
<#
.SYNOPSIS
Install The Agency agents into your local agentic tool(s) on Windows.

.DESCRIPTION
Windows-native counterpart of install.sh. Reads converted files from
integrations/ and copies them to the appropriate config directory for each
tool. Run scripts/convert.sh (via WSL or Git Bash) first if integrations/
is missing or stale.

.PARAMETER Tool
Install only the specified tool. Valid values:
claude-code, copilot, antigravity, gemini-cli, opencode, openclaw,
cursor, aider, windsurf, qwen, all (default).

.PARAMETER Help
Show this help message.

.EXAMPLE
.\scripts\install.ps1
.\scripts\install.ps1 -Tool claude-code
.\scripts\install.ps1 -Tool cursor
#>

[CmdletBinding()]
param(
[ValidateSet('claude-code','copilot','antigravity','gemini-cli','opencode',
'openclaw','cursor','aider','windsurf','qwen','all')]
[string]$Tool = 'all',

[switch]$Help
)

Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'

# ---------------------------------------------------------------------------
# Paths
# ---------------------------------------------------------------------------
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$RepoRoot = Split-Path -Parent $ScriptDir
$Integrations = Join-Path $RepoRoot 'integrations'

$AllTools = @(
'claude-code','copilot','antigravity','gemini-cli','opencode',
'openclaw','cursor','aider','windsurf','qwen'
)

# ---------------------------------------------------------------------------
# Helpers
# ---------------------------------------------------------------------------
function Write-Ok { param([string]$Msg) Write-Host "[OK] $Msg" -ForegroundColor Green }
function Write-Warn { param([string]$Msg) Write-Host "[!!] $Msg" -ForegroundColor Yellow }
function Write-Err { param([string]$Msg) Write-Host "[ERR] $Msg" -ForegroundColor Red }
function Write-Header { param([string]$Msg) Write-Host "`n$Msg" -ForegroundColor White -NoNewline; Write-Host "" }

function Resolve-ToolPath {
param([string]$Binary)
$cmd = Get-Command $Binary -ErrorAction SilentlyContinue
if ($cmd) { return $cmd.Source }
return $null
}

# ---------------------------------------------------------------------------
# Tool detection
# ---------------------------------------------------------------------------
function Test-ToolDetected {
param([string]$ToolName)
switch ($ToolName) {
'claude-code' { return ((Resolve-ToolPath 'claude') -or (Test-Path "$env:USERPROFILE\.claude")) }
'copilot' { return ((Resolve-ToolPath 'code') -or (Test-Path "$env:USERPROFILE\.github") -or (Test-Path "$env:USERPROFILE\.copilot")) }
'antigravity' { return (Test-Path "$env:USERPROFILE\.gemini\antigravity\skills") }
'gemini-cli' { return ((Resolve-ToolPath 'gemini') -or (Test-Path "$env:USERPROFILE\.gemini")) }
'cursor' { return ((Resolve-ToolPath 'cursor') -or (Test-Path "$env:USERPROFILE\.cursor")) }
'opencode' { return ((Resolve-ToolPath 'opencode') -or (Test-Path "$env:USERPROFILE\.config\opencode")) }
'aider' { return [bool](Resolve-ToolPath 'aider') }
'openclaw' { return ((Resolve-ToolPath 'openclaw') -or (Test-Path "$env:USERPROFILE\.openclaw")) }
'windsurf' { return ((Resolve-ToolPath 'windsurf') -or (Test-Path "$env:USERPROFILE\.codeium")) }
'qwen' { return ((Resolve-ToolPath 'qwen') -or (Test-Path "$env:USERPROFILE\.qwen")) }
default { return $false }
}
}

# ---------------------------------------------------------------------------
# Installers
# ---------------------------------------------------------------------------
function Install-ClaudeCode {
$dest = Join-Path $env:USERPROFILE '.claude\agents'
New-Item -ItemType Directory -Path $dest -Force | Out-Null
$count = 0
$agentDirs = @('academic','design','engineering','game-development','marketing',
'paid-media','sales','product','project-management','testing',
'support','spatial-computing','specialized')
foreach ($dir in $agentDirs) {
$dirPath = Join-Path $RepoRoot $dir
if (-not (Test-Path $dirPath)) { continue }
Get-ChildItem -Path $dirPath -Filter '*.md' -File | ForEach-Object {
$firstLine = Get-Content $_.FullName -TotalCount 1
if ($firstLine -eq '---') {
Copy-Item $_.FullName -Destination $dest -Force
$count++
}
}
}
Write-Ok "Claude Code: $count agents -> $dest"
}

function Install-Copilot {
$destGH = Join-Path $env:USERPROFILE '.github\agents'
$destCop = Join-Path $env:USERPROFILE '.copilot\agents'
New-Item -ItemType Directory -Path $destGH -Force | Out-Null
New-Item -ItemType Directory -Path $destCop -Force | Out-Null
$count = 0
$agentDirs = @('academic','design','engineering','game-development','marketing',
'paid-media','sales','product','project-management','testing',
'support','spatial-computing','specialized')
foreach ($dir in $agentDirs) {
$dirPath = Join-Path $RepoRoot $dir
if (-not (Test-Path $dirPath)) { continue }
Get-ChildItem -Path $dirPath -Filter '*.md' -File | ForEach-Object {
$firstLine = Get-Content $_.FullName -TotalCount 1
if ($firstLine -eq '---') {
Copy-Item $_.FullName -Destination $destGH -Force
Copy-Item $_.FullName -Destination $destCop -Force
$count++
}
}
}
Write-Ok "Copilot: $count agents -> $destGH"
Write-Ok "Copilot: $count agents -> $destCop"
}

function Install-Cursor {
$src = Join-Path $Integrations 'cursor\rules'
$dest = Join-Path $PWD '.cursor\rules'
if (-not (Test-Path $src)) { Write-Err "integrations/cursor missing. Run convert.sh first."; return }
New-Item -ItemType Directory -Path $dest -Force | Out-Null
$count = 0
Get-ChildItem -Path $src -Filter '*.mdc' -File | ForEach-Object {
Copy-Item $_.FullName -Destination $dest -Force
$count++
}
Write-Ok "Cursor: $count rules -> $dest"
Write-Warn "Cursor: project-scoped. Run from your project root to install there."
}

function Install-Aider {
$src = Join-Path $Integrations 'aider\CONVENTIONS.md'
$dest = Join-Path $PWD 'CONVENTIONS.md'
if (-not (Test-Path $src)) { Write-Err "integrations/aider/CONVENTIONS.md missing. Run convert.sh first."; return }
if (Test-Path $dest) { Write-Warn "Aider: CONVENTIONS.md already exists at $dest (remove to reinstall)."; return }
Copy-Item $src -Destination $dest -Force
Write-Ok "Aider: installed -> $dest"
}

function Install-Windsurf {
$src = Join-Path $Integrations 'windsurf\.windsurfrules'
$dest = Join-Path $PWD '.windsurfrules'
if (-not (Test-Path $src)) { Write-Err "integrations/windsurf/.windsurfrules missing. Run convert.sh first."; return }
if (Test-Path $dest) { Write-Warn "Windsurf: .windsurfrules already exists at $dest (remove to reinstall)."; return }
Copy-Item $src -Destination $dest -Force
Write-Ok "Windsurf: installed -> $dest"
}

function Install-Tool {
param([string]$ToolName)
switch ($ToolName) {
'claude-code' { Install-ClaudeCode }
'copilot' { Install-Copilot }
'cursor' { Install-Cursor }
'aider' { Install-Aider }
'windsurf' { Install-Windsurf }
default { Write-Warn "$ToolName: PowerShell installer not yet implemented. Use install.sh via WSL or Git Bash." }
}
}

# ---------------------------------------------------------------------------
# Main
# ---------------------------------------------------------------------------
if ($Help) {
Get-Help $MyInvocation.MyCommand.Path -Detailed
exit 0
}

if (-not (Test-Path $Integrations)) {
Write-Err "integrations/ not found. Run ./scripts/convert.sh first (via WSL or Git Bash)."
exit 1
}

Write-Header "The Agency -- Installing agents (PowerShell)"
Write-Host " Repo: $RepoRoot"
Write-Host " Platform: Windows (PowerShell $($PSVersionTable.PSVersion))"
Write-Host ""

$selectedTools = @()
if ($Tool -eq 'all') {
foreach ($t in $AllTools) {
if (Test-ToolDetected $t) {
$selectedTools += $t
Write-Host " [*] $t detected" -ForegroundColor Green
} else {
Write-Host " [ ] $t not found" -ForegroundColor DarkGray
}
}
} else {
$selectedTools = @($Tool)
}

if ($selectedTools.Count -eq 0) {
Write-Warn "No tools selected or detected. Nothing to install."
Write-Host " Tip: use -Tool <name> to force-install a specific tool."
exit 0
}

Write-Host ""
$installed = 0
foreach ($t in $selectedTools) {
Install-Tool $t
$installed++
}

Write-Host ""
Write-Ok "Done! Installed $installed tool(s)."
Write-Host ""
Loading