ad-compliance-reviewer
Review ads and campaign setup for policy compliance on Meta (Facebook/Instagram), Google Ads, TikTok Ads, YouTube Ads, Amazon Ads, and DSP/programmatic.
Scan and remove sensitive data before publishing skills. Detect API keys, tokens, secrets, and personal info.
Suivez les instructions du dépôt pour votre agent. Consultez les fichiers et dépendances avant l’installation.
SkillHub CLI
skillhub install dalomeve/prepublish-privacy-scrubExaminez la source et la compatibilité, puis suivez les étapes d’installation.
Donnez le lien à votre agent et demandez-lui d’examiner instructions et dépendances avant d’expliquer les étapes.
Scan for sensitive data before publishing.
Publishing accidentally exposes:
function Test-PrivacyScan {
param([string]$path)
$sensitivePatterns = @(
'apiKey\s*[=:]\s*["\']?[A-Za-z0-9]',
'token\s*[=:]\s*["\']?[A-Za-z0-9]{10,}',
'secret\s*[=:]\s*["\']?[A-Za-z0-9]',
'password\s*[=:]\s*["\']?.+',
'Bearer\s+[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+',
'sk-[A-Za-z0-9]{32,}',
'OPENCLAW_\w+\s*[=:]\s*\S+',
'https://\S+\.ngrok\S+',
'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
)
$files = Get-ChildItem $path -Recurse -File |
Where-Object { $_.Extension -in @('.md', '.ps1', '.json', '.txt') }
$findings = @()
foreach ($file in $files) {
$content = Get-Content $file.FullName -Raw
foreach ($pattern in $sensitivePatterns) {
$matches = [regex]::Matches($content, $pattern, 'IgnoreCase')
foreach ($m in $matches) {
$findings += @{
File = $file.FullName
Pattern = $pattern
Match = $m.Value.Substring(0, [Math]::Min(20, $m.Value.Length)) + "..."
}
}
}
}
return $findings
}
function Invoke-PrivacyScrub {
param([string]$path)
$replacements = @{
'apiKey\s*[=:]\s*["\']?[^"''\s]+' = 'apiKey: "REDACTED"'
'token\s*[=:]\s*["\']?[^"''\s]+' = 'token: "REDACTED"'
'secret\s*[=:]\s*["\']?[^"''\s]+' = 'secret: "REDACTED"'
}
$files = Get-ChildItem $path -Recurse -File
foreach ($file in $files) {
$content = Get-Content $file.FullName -Raw
$modified = $false
foreach ($kv in $replacements.GetEnumerator())...
Ces informations proviennent de l’analyse indexée et peuvent être anciennes. Vérifiez les fichiers actuels.
# Pre-Publish Privacy Scrub
Scan for sensitive data before publishing.
## Problem
Publishing accidentally exposes:
- API keys and tokens
- Gateway credentials
- Personal paths and emails
- Internal service URLs
## Workflow
### 1. Sensitive Pattern Detection
```powershell
function Test-PrivacyScan {
param([string]$path)
$sensitivePatterns = @(
'apiKey\s*[=:]\s*["\']?[A-Za-z0-9]',
'token\s*[=:]\s*["\']?[A-Za-z0-9]{10,}',
'secret\s*[=:]\s*["\']?[A-Za-z0-9]',
'password\s*[=:]\s*["\']?.+',
'Bearer\s+[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+',
'sk-[A-Za-z0-9]{32,}',
'OPENCLAW_\w+\s*[=:]\s*\S+',
'https://\S+\.ngrok\S+',
'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
)
$files = Get-ChildItem $path -Recurse -File |
Where-Object { $_.Extension -in @('.md', '.ps1', '.json', '.txt') }
$findings = @()
foreach ($file in $files) {
$content = Get-Content $file.FullName -Raw
foreach ($pattern in $sensitivePatterns) {
$matches = [regex]::Matches($content, $pattern, 'IgnoreCase')
foreach ($m in $matches) {
$findings += @{
File = $file.FullName
Pattern = $pattern
Match = $m.Value.Substring(0, [Math]::Min(20, $m.Value.Length)) + "..."
}
}
}
}
return $findings
}
```
### 2. Scrubbing
```powershell
function Invoke-PrivacyScrub {
param([string]$path)
$replacements = @{
'apiKey\s*[=:]\s*["\']?[^"''\s]+' = 'apiKey: "REDACTED"'
'token\s*[=:]\s*["\']?[^"''\s]+' = 'token: "REDACTED"'
'secret\s*[=:]\s*["\']?[^"''\s]+' = 'secret: "REDACTED"'
}
$files = Get-ChildItem $path -Recurse -File
foreach ($file in $files) {
$content = Get-Content $file.FullName -Raw
$modified = $false
foreach ($kv in $replacements.GetEnumerator())...Review ads and campaign setup for policy compliance on Meta (Facebook/Instagram), Google Ads, TikTok Ads, YouTube Ads, Amazon Ads, and DSP/programmatic.
MCP Engineering — Complete Model Context Protocol System
Incident Postmortem Generator
Complete SEO content creation system for AI agents. Research keywords, analyze competitors, write optimized articles, and track rankings — all through natural conversation. No APIs required.