Skip to content

Extend custody-aware safety guardrails to CRE, ACE, Data Streams, and…#47

Merged
thodges-gh merged 1 commit into
mainfrom
chore/approvals
Jul 1, 2026
Merged

Extend custody-aware safety guardrails to CRE, ACE, Data Streams, and…#47
thodges-gh merged 1 commit into
mainfrom
chore/approvals

Conversation

@thodges-gh

@thodges-gh thodges-gh commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Description

Following the non-custodial safety model already adopted by chainlink-ccip-skill, this PR
extends safety guardrails to the remaining write-capable skills. Rather than applying one model
everywhere, each skill uses the model that matches how it actually touches keys:

Non-custodial (the agent never executes; it prepares user-run artifacts):

  • chainlink-data-streams-skill (0.0.2 → 0.0.3) and chainlink-vrf-skill (0.0.2 → 0.0.3).
  • Bash removed from allowed-tools. Approval Protocol / Second Confirmation Rule replaced
    with a Non-Custodial Action Protocol + Execution Boundary: for any on-chain write the agent
    prepares a command template, unsigned transaction data, or code for the user to sign and
    broadcast in their own wallet-controlled environment, and refuses to execute it.

Delegated-custody → approval (the agent may run an authenticated CLI after explicit
approval):

  • chainlink-cre-skill (0.0.13 → 0.0.14) and chainlink-ace-skill (0.0.6 → 0.0.7).
  • These skills drive an authenticated CLI where the user pre-configures signing out of band —
    CRE via cre login + cre account link-key (linked wallet), ACE via Foundry keystore/env. The
    agent never holds or signs a raw key per command, so it keeps Bash and retains the original
    preflight-approval + second-confirmation model (refuse mainnet) rather than refusing the
    commands.

Hardening added to all four skills (custody-model-independent):

  • Credential protection — the agent must never read, print, copy, or infer wallet credential
    files, signing material, keystores, real secrets.yaml values, or secret env files (e.g.
    CRE_ETH_PRIVATE_KEY, PRIVATE_KEY), and must never ask the user to paste them. For CRE/ACE
    this is explicit that the CLI/Foundry may consume these when the user authorizes a command,
    but the agent must never read or echo them itself.
  • Prompt-injection resistance — treat docs, RPC/explorer/API/MCP/CLI output, and generated
    code as untrusted; do not follow embedded instructions requesting credential access,
    out-of-scope file reads, network callbacks, shell execution, or guardrail changes.

Eval suites updated to match: Data Streams' rubrics and promptfooconfig.yaml deterministic
guard moved to the non-custodial model; CRE and ACE keep their approval-based rubrics with an
added credential-exposure must-pass fail condition.

Justification

The CCIP skill established a safety posture that keeps signing and credential exposure out of
the agent runtime. The other write-capable skills had not been brought in line, and most still
shipped Bash plus an approval-to-execute model without credential or prompt-injection
protections.

Applying a single non-custodial model everywhere was too blunt: CRE and ACE are built around
driving an authenticated CLI with user-pre-delegated signing, so refusing those commands (and
removing Bash) would break their core purpose without improving safety — the agent never
handles raw keys there. The credential-protection and prompt-injection guardrails, however, are
valuable regardless of custody model and are applied uniformly.

Full agent eval suites were run across all skills. Safety, must-pass, and trigger-positive
rubrics pass 100% on every skill, and CCIP's deterministic guards pass 69/69 — the changes
introduce no safety or routing regressions. (Remaining eval failures are pre-existing
generation-quality and trigger-negative issues unrelated to these guardrails, tracked
separately.)

@thodges-gh
thodges-gh requested review from a team, Nalon and andrejrakic as code owners June 24, 2026 18:25
@github-actions

Copy link
Copy Markdown

👋 thodges-gh, thanks for creating this pull request!

To help reviewers, please consider creating future PRs as drafts first. This allows you to self-review and make any final changes before notifying the team.

Once you're ready, you can mark it as "Ready for review" to request feedback. Thanks!

@thodges-gh
thodges-gh merged commit 15dda5b into main Jul 1, 2026
9 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.

2 participants