agent-reach
Read what is working RIGHT NOW on Instagram, X/Twitter, Reddit and Facebook for a niche, using a logged-in throwaway session. Returns top posts, hooks and formats as strict JSON — or status session_st
SKILL.mdops/agent-reach/skill/SKILL.md
GitHubagent-reach
Platform-native social reading for the Aries weekly research stage.
/last30days answers "what have people been saying about this topic across the
last 30 days" (aggregate listening). This answers a different question:
"what is winning on this platform right now" — the actual posts, opening
hooks, formats and comment language currently getting traction in a niche.
THE ONE RULE
A stale session is a normal answer, not an error. These sessions are cookie
based and expire. If the session is dead, return the session_stale JSON below
immediately and stop. Do not retry, do not log in, do not ask for
credentials, do not fall back to a browser or to curl. The research agent is
told that session_stale is a reportable outcome and degrades to /last30days
plus web_search on its own. Hanging here instead burns the stage's 600 s
budget and fails the whole weekly run over a cookie.
Steps
1. Check freshness FIRST (cheap, always)
python3 "${ARIES_COOKIE_PROBER:-$HOME/.agent-reach/cookie-prober.py}" --status
~/.agent-reach/cookie-prober.py is a symlink into the repo, created by the
install step below. It is deliberately not a repo path spelled out here: this
file gets copied into the live gateway profile, the repo currently lives in a
worktree, and a hardcoded path that stops resolving would fail as
file-not-found on every single call — silently downgrading this cheap check
into the expensive agent-reach doctor probe it exists to avoid. Override with
ARIES_COOKIE_PROBER if the symlink cannot be used.
Read the line for the requested platform.
fresh→ continue to step 2.stale→ return thesession_stalepayload (step 4) and STOP.unknown, or no state file at all → run one direct check, bounded:timeout 60 agent-reach doctor— treat "login required / unauthenticated / expired" as stale, anything else unreadable as stale too. When in doubt, answersession_stale. A false "stale" costs one enrichment; a false "fresh" costs a ten-minute stall.- the command itself fails (
No such file or directory— the symlink is missing or dangling) → treat exactly asunknownand continue, but say so in thedetailof whatever you return: the pre-check is mis-installed, and that is an operator fix, not something to work around silently on every call.
2. Read the platform
Use the Agent-Reach channel for the requested platform, read-only, with a hard timeout so nothing can hang:
timeout 120 agent-reach <platform> <query> # exact sub-command per `agent-reach doctor`
Collect at most 10 items. Reads only — never post, comment, follow, like or DM from these accounts. They are throwaways whose only job is reading.
3. Return strict JSON
{
"status": "ok",
"platform": "instagram",
"query": "leather handbag styling",
"observed_at": "2026-08-10T09:00:00Z",
"items": [
{
"url": "https://…",
"author": "@handle",
"hook": "the opening line / first 8 words",
"format": "carousel|reel|image|text|video",
"engagement": "what the platform reported, verbatim (e.g. '12.4k likes, 310 comments')",
"why_it_works": "one sentence, your read"
}
],
"patterns": ["2–5 short observations across the items"]
}
4. Stale-session payload
{ "status": "session_stale", "platform": "instagram", "detail": "logged-out session; owner re-mint required" }
Never put a cookie, token, header or account password in the output — not in
detail, not anywhere. If a tool prints one, drop that line.
Installation (VM, owner-action)
This file lives in the repo at ops/agent-reach/skill/SKILL.md and is not
installed by anything automatic. Copying it into the live profile is a change to
the running research pipeline:
REPO=<repo> # the worktree path until the branch merges, then repoint
mkdir -p ~/.hermes/profiles/aries-research/skills/social-media/agent-reach
cp $REPO/ops/agent-reach/skill/SKILL.md \
~/.hermes/profiles/aries-research/skills/social-media/agent-reach/SKILL.md
# The stable path step 1 calls. This symlink is what lets the copied skill find
# the prober no matter where the repo lives — REPOINT IT when the repo moves,
# or step 1 degrades to the expensive probe on every call without ever saying so.
ln -sfn $REPO/ops/agent-reach/cookie-prober.py ~/.agent-reach/cookie-prober.py
# Verify BEFORE restarting anything — this must print platform lines, not an error:
python3 ~/.agent-reach/cookie-prober.py --status
# then restart the aries-research gateway (port 8651) in a maintenance window
Install it only on the aries-research profile. The app advertises
/agent-reach to the weekly research stage only, for exactly this reason — see
WEEKLY_RESEARCH_AGENT_REACH_GUIDANCE in backend/marketing/ports/hermes.ts.