Install
$ agentstack add skill-psyduckler-aeo-skills-aeo-track ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ● Shell / process execution Used
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
AEO Track
> Source: github.com/psyduckler/aeo-skills > Part of: AEO Skills Suite
The scheduling layer for AEO visibility tracking. One command per workspace, one schedule, no infrastructure.
Requirements
- Python 3.9+ (stdlib only)
- macOS (launchd) OR Linux (cron)
- An
aeo.config.jsonin the workspace directory (runaeo-initfirst) aeo-baselineinstalled somewhere this skill can find it
Usage
# Dry-run: see what would be installed
python3 scripts/track.py --install --schedule daily
# Actually install
python3 scripts/track.py --install --schedule daily --apply
# Custom schedule and time
python3 scripts/track.py --install --schedule weekly --hour 8 --apply
# Inspect current install
python3 scripts/track.py --status
# Remove
python3 scripts/track.py --remove --apply
Run from inside the workspace directory (the one containing aeo.config.json), or pass --workdir PATH.
How it works
- Generates a wrapper script at
~/.aeo-track//run.shthat:
cds into the workspace directory- Sources
.envfrom that directory if present (loadsGEMINI_API_KEY) - Runs
python3 /path/to/aeo-baseline/scripts/baseline.py --yes - Appends stdout/stderr to
aeo-data/aeo-track.log
- Installs a scheduled job that invokes the wrapper:
- macOS →
~/Library/LaunchAgents/ai.skills.aeo-track..plist+launchctl load - Linux →
crontab -lline with a unique marker for safe removal
- Records state at
~/.aeo-track//state.jsonso--statusand--removeknow what to do.
` is sha1(absolute_workdir)[:12]` — same workspace → same ID. Different workspaces don't collide.
Options
| Option | Description | |---|---| | --install | (Default) Set up the schedule | | --remove | Tear down the schedule | | --status | Show install info for the workspace | | --workdir PATH | Workspace directory (default: cwd) | | --baseline-script PATH | Absolute path to baseline.py (auto-detected if omitted) | | --schedule SPEC | daily (default) \| weekly \| hourly \| 'every Nm' | | --hour N | Hour-of-day for daily/weekly (default: 9) | | --minute N | Minute (default: 0) | | --apply | Actually install/remove (default is print-only) |
Schedule syntax
| --schedule value | macOS launchd | Linux cron | |---|---|---| | daily | StartCalendarInterval{Hour, Minute} | * * * | | weekly | StartCalendarInterval{Weekday=1, Hour, Minute} | * * 1 (Monday) | | hourly | StartCalendarInterval{Minute} | * * * * | | every 15m | StartInterval=900 | */15 * * * * |
Setting up the API key
The wrapper script sources .env from the workspace dir if present. Put your API key there:
# In the workspace dir
cat > .env > .gitignore
Both launchd and cron run with minimal shell environment by default, so the scheduled job won't see env vars from your interactive shell. The .env file is the bridge.
Inspect logs
After scheduled runs accumulate, check the log:
tail -f aeo-data/aeo-track.log
Each run produces a fresh evidence file in aeo-data/run_.json — same format as a manual aeo-baseline invocation.
Idempotency
- Re-installing (with
--apply) on the same workspace replaces the previous schedule. On macOS this unloads + reloads the plist; on Linux it strips matching lines fromcrontab -lbefore appending the new one. --remove --applyis safe to run even if nothing is installed.- State is per-workspace, so installing in multiple project directories doesn't collide.
Limitations (v0)
- Windows is not supported for
--apply. The dry-run still prints the wrapper script so you can wire it into Task Scheduler manually. - The wrapper runs with the user's environment, so cron-style limits on subprocess resource usage apply.
- No retry logic at the schedule layer — if a scheduled run fails, the next one tries fresh.
aeo-baselineitself retries failed API calls internally. --statusconfirms launchd has the job loaded; for cron it only checks the recorded state file (runcrontab -l | grep aeo-trackfor the live view).
Pairs With
- aeo-init — creates the
aeo.config.jsonthat this skill schedules - aeo-baseline — the script that actually runs on each tick
- aeo-report (coming) — reads the accumulated baselines and generates trend reports
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: psyduckler
- Source: psyduckler/aeo-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.