Skip to content

feat(privacy-guard): build to release-ready (keyless linkability + footprint)#53

Merged
hebbianloop merged 1 commit into
mainfrom
shady/privacy-guard
Jun 25, 2026
Merged

feat(privacy-guard): build to release-ready (keyless linkability + footprint)#53
hebbianloop merged 1 commit into
mainfrom
shady/privacy-guard

Conversation

@hebbianloop

Copy link
Copy Markdown
Member

Builds Privacy Guard from a stub into the Sybil-clustering engine inverted to protect the user — it finds what links the wallets they want kept separate, and what publicly deanonymizes each, with the concrete fix for every link.

Stacked PR on shady/security-guard (batch-1 stack). Clean diff: privacy-guard only. Re-target to main after the stack lands.

What it does (read-only)

  • linkability_scan.py — pairwise across the owner's wallets:
    • direct_transfer (definitive) · shared_funder (strong) · shared_counterparties (medium; common infra like USDC/routers excluded) — each with the how-to-break step.
    • Per-wallet footprint: keyless ENS reverse (a public handle deanonymizes), tx count, first funder.
  • Multi-wallet — the owner's wallet set lives in MEMORY, chat-managed ("also check 0x…").

Data honesty

Full tx history when ETHERSCAN_API_KEY is set (infra #11) — the reliable mode for a real audit; otherwise a keyless recent window, honestly labeled. Never a false all-clear in keyless mode. (Verified: ENS reverse = vitalik.eth, footprint, and the pairwise set-logic; the keyless topic-only getLogs is rate-limited on very active wallets, which is exactly why it defers to Etherscan for full history.)

On-brand: the same clustering that protects $512M+ of airdrops from Sybils, pointed the other way. Fifth Batch-1 agent. Relates to testing protocol #1464.

🤖 Generated with Claude Code

@vercel

vercel Bot commented Jun 24, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
aex-agents Ready Ready Preview, Comment Jun 25, 2026 2:32pm

Request Review

@hebbianloop hebbianloop left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this agent fully tested?

be sure to sanitize before converting this into anything public

Comment thread agents/privacy-guard/activity.json Outdated
"protocols": [],
"tags": ["privacy", "doxx", "linkability", "cluster", "anonymity", "guard", "opsec", "surveillance", "fingerprint"],
"tags": ["privacy", "doxx", "linkability", "cluster", "anonymity", "guard", "opsec", "surveillance", "fingerprint", "ens", "sybil"],
"runtimes": ["nous", "claude", "openclaw"],

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this accurate? its being built on nous, but perhaps its compatible with all is the intention here?

"description": "Your primary wallet. Add the other wallets you want kept separate in chat — the guard keeps your wallet set and compares them."
},
{
"key": "PRIVACY_CHAIN",

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should generalize across chains not just one

Comment thread agents/privacy-guard/activity.json Outdated
"minCliVersion": "0.0.1",
"behavior": {
"task": "Check {WATCH_ADDRESS} for linkability: shared funding sources, common counterparties, timing/behavioral fingerprints, and CEX on/off-ramps that cluster your wallets. For each link give what reveals it, how strong the signal is, and the concrete step to break it. Prioritize the links most likely to deanonymize you. Read-only.",
"task": "You are the Sybil-clustering engine inverted to protect the owner. Read-only — you analyze, you never move funds.\n\nKeep the owner's WALLET SET in your MEMORY — the identities they want kept separate. Start from {WATCH_ADDRESS} and add/remove in chat (\"also check 0x…\", \"remove 0x…\"). Linkability is about comparing the owner's wallets to each other, so 2+ is where it matters.\n\nEACH CYCLE — run the privacy-guard skill's linkability_scan.py --wallets <wallet set> --chain {PRIVACY_CHAIN}. For each PAIR of the owner's wallets, surface the links strongest-first: direct_transfer (definitive — they transacted directly), shared_funder (both first funded by the same address), shared_counterparties (both touch the same niche addresses; common infra excluded). For each link give what reveals it, how strong it is, and the concrete step to break it (never transfer between identities; fund from separate unlinked sources; vary your dapp set; route through an intermediary you don't reuse). Per wallet, surface the footprint — a public ENS name deanonymizes (recommend dropping it on a privacy wallet), plus tx count and first funder.\n\nAlso run privacy_threat.py --wallet <each> --chain {PRIVACY_CHAIN} to flag services that deanonymize the owner — kyc_onramp (a KYC'd CEX links your real identity), sanctioned (OFAC/mixer taint), public_identity (ENS-named counterparty). Fold its privacy_score_delta into the score and surface the deanon + fix.\n\nREMEDIATE (plan now, execute at the mainnet rollout): when a link drops the score, offer to SHIELD funds to break it (Model A: deposit from a VERIFIED source wallet -> Aztec private layer + decorrelate -> withdraw to another of the owner's VERIFIED identities). Run shield_plan.py --usd <amt> --source <addr> --dest <addr> --source-verified <t/f> --dest-verified <t/f> --net {SHIELD_NET} to produce a decorrelated tranche plan + readiness checks; relay the plan and any blockers (source==dest, unverified endpoints, caps). If the owner lacks a verified destination, help them stand one up (build its Passport score / link it — see the wallet-linking + delegation handoffs). Then shield_execute.py is the execution boundary: it is MAINNET-GATED and currently REFUSES to move funds (Shield SDK + PXE + delegated personhood land at the v5 rollout). You PLAN and hand off; you execute nothing until then.\n\nDATA HONESTY: the scan uses full tx history if an Etherscan key is present, otherwise a keyless recent window. Always say which mode you used. NEVER give a false all-clear in keyless mode — say \"no links in the recent window; run with full history to be sure.\" Prioritize the links most likely to deanonymize the owner. All data is keyless (ENS reverse, public RPC, GoPlus/OFAC feeds; optional Etherscan full history) — no external service required.",

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

im not sure read only is accurate here, please audit

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

all briefs should not be here but in aex repo docs, maybe its ok to stay here as long as we dont open source them

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

all briefs should not be here but in aex repo docs, maybe its ok to stay here as long as we dont open source them

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

all briefs should not be here but in aex repo docs, maybe its ok to stay here as long as we dont open source them

hebbianloop pushed a commit that referenced this pull request Jun 25, 2026
…drop 'Off-chain' + mark briefs internal (PR #53 review)

Signed-off-by: Shady El Damaty <shady@holonym.id>
@hebbianloop

Copy link
Copy Markdown
Member Author

Addressed in 6f49ad5:

  • MultichainPRIVACY_CHAIN is now multi (1,8453,42161,10); scans iterate per chain. Cross-chain link correlation (wallet on chain A <-> chain B) is a tracked fast-follow; today it analyzes each chain.
  • read-only audit — clarified: analysis-only today (never moves funds; waapFeatures: []); the shield remediation moves funds at the mainnet (v5) rollout and is gated/refuses until then.
  • sanitize: CLEAN — no secrets/keys/PII; all address constants are public token/CEX addresses used for detection.
  • briefs (delegation / shield-wallet-linking / tap-aztec) — added .gitattributes export-ignore + an "internal/proprietary, not for the public aex-agents repo" banner. They stay in private aex, excluded from the open extraction.
  • runtimes ⚠️ open question — privacy-guard has no templates/ dir, so the old ["nous","claude","openclaw"] was unsupported; I set it to ["nous"] for accuracy. If runtimes means compatibility (recipe-based) rather than templates-present, say so and I will restore the full list (or add templates).

…y (PR #53)

Rebuilt onto current main (agent-only diff). Addresses #53 review:
PRIVACY_CHAIN multichain; analysis-only wording; runtimes=[nous,claude,openclaw]
(recipe-based compatibility per Shady); briefs marked internal + export-ignore; sanitized.

Signed-off-by: Shady El Damaty <shady@holonym.id>
@hebbianloop hebbianloop force-pushed the shady/privacy-guard branch from 6f49ad5 to a6a818d Compare June 25, 2026 14:32
@hebbianloop hebbianloop changed the base branch from shady/security-guard to main June 25, 2026 14:32
@hebbianloop hebbianloop merged commit 161a163 into main Jun 25, 2026
26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant