EU Greenwashing Analysis
Run this procedure whenever a user submits a product description, marketing text, or catalog entry for review against EU rules on environmental claims (Directive 2024/825 amending 2005/29/EC, and the proposed Green Claims Directive COM/2023/166).
The output is always a structured findings report: one block per flagged claim plus a summary. Do not editorialize outside that structure.
Step 1 — Extract all environmental claims
Read the full text and list every statement that references environmental benefit, sustainability, ecological impact, or climate performance. Examples include: "eco-friendly", "carbon neutral", "100% natural", "sustainable", "green", "biodegradable", "zero emissions", "climate positive", "recycled", "plastic-free", "low carbon", "environmentally safe".
If no such claims exist → output: "No environmental claims detected — Out of Scope." and stop.
Step 2 — Assess each claim against EU greenwashing criteria
For each extracted claim, check ALL of the following:
- Vagueness / Generic claim — Is the claim broad or unsubstantiated (e.g., "eco", "green", "sustainable") with no measurable indicator, certification, or evidence cited? → High risk flag.
- Incomplete life-cycle scope — Does the claim highlight one phase of the product life cycle (e.g., recyclable packaging) while ignoring other high-impact phases (manufacturing, transport, end-of-life)? → Medium to High risk flag.
- Unverifiable / No third-party certification — Is there no independent verification, recognized EU certification, or scientific reference to support the claim? → Medium to High risk flag.
- Misleading comparison — Does the claim compare the product favorably against an irrelevant benchmark, obsolete product, or omit material information that would change the consumer's perception? → High risk flag.
- Carbon offset reliance — Does the claim (e.g., "carbon neutral", "net zero") rely primarily on carbon offsetting schemes rather than actual emission reductions? If offsets are not independently verified under EU-recognized standards → Medium to High risk flag.
- Unsupported label or logo — Does the product display an environmental label, badge, or logo that is not officially recognized in the EU, or whose criteria have not been verified? → High risk flag.
- Forward-looking claim presented as current — Is a future commitment (e.g., "will be carbon neutral by 2030") presented in a way that implies a current state? → Medium risk flag.
Step 3 — Assign a risk level per claim
- 🔴 High — Claim is clearly unsubstantiated, misleading, or likely non-compliant with EU Directive 2024/825 or the Green Claims Directive. Immediate corrective action required.
- 🟡 Medium — Claim is partially substantiated but lacks full verification, life-cycle scope, or specificity. Corrective action recommended before publication.
- 🟢 Low — Claim is specific and plausible but should be reviewed for formal certification before final catalog inclusion.
Step 4 — Fill the standard findings template
For EACH flagged claim, output one block in this exact format:
Product Claim: [exact quote of the claim as it appears in the text] Risk Level: 🔴 High / 🟡 Medium / 🟢 Low Regulation Reference: [e.g., "EU Directive 2024/825, Art. 3 — Prohibition of misleading environmental claims" or "Green Claims Directive COM/2023/166, Art. 5 — Substantiation requirements"] Issue: [1–2 sentences explaining what makes this claim problematic under EU regulation] Recommended Correction: [suggested compliant rewrite or specific action the team should take, e.g., "Replace with a specific, verified figure: 'Made with 40% recycled ocean plastic, certified by [recognized body]'"]
Step 5 — Summary assessment
After all per-claim blocks, output a summary in this format:
Greenwashing Findings Summary
- Total environmental claims reviewed: [N]
- 🔴 High risk: [N]
- 🟡 Medium risk: [N]
- 🟢 Low risk: [N]
- ✅ Compliant (no action needed): [N]
- Overall compliance posture: Compliant / Needs Review / Non-Compliant
- Top priority action: [single most urgent corrective step]
Run this — do not improvise
This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as eu_greenwashing_analysis_agent.py and embedded as the fenced Python below (sha256 508db0f553837574…; a byte-exact copy is also vaulted in the capsule comment at the end of this file). On a host with sandbox execution, run the linked file directly — if it is missing, write the fence contents verbatim to eu_greenwashing_analysis_agent.py first:
python3 eu_greenwashing_analysis_agent.py '{"key": "value"}' # arguments as one JSON object
echo '{"key": "value"}' | python3 eu_greenwashing_analysis_agent.py # or on stdin
python3 eu_greenwashing_analysis_agent.py --tool # emit the JSON tool contract
Treat stdout as a tool result. If it reports missing or unresolved inputs, stop and collect them. If it returns steps, execute those steps in order exactly as returned; if it returns instructions, follow them with the supplied inputs. Otherwise use the result verbatim. Do not invent behavior beyond that output. On a host without code execution, treat the Parameters schema and the code below as the exact specification and never paraphrase a step. Never edit inside the generated markers; a converter-equipped host can instead restore the original file checksum-verified with the installed rapp-agent-converter/scripts/toast.py convert SKILL.md --to agent.
"""EuGreenwashingAnalysis -- Use this skill whenever the user submits a product description, marketing text, catalog entry, packaging copy, or advertising claim and asks to check it for greenwashing, environmental claim compliance, sustainability wording risks, or alignment with EU Directive 2024/825 or the Green Claims Directive. Produces a structured per-claim findings report with risk levels, regulation references, and recommended corrections.
Generated by the rapp skill from eu-greenwashing-analysis. The RCI capsule at the bottom of this file carries the full original; `toast.py convert` restores it byte-exact."""
import json
import re
import sys
try:
from agents.basic_agent import BasicAgent
except ImportError: # running OUTSIDE a brainstem -- stay executable anyway.
class BasicAgent: # noqa: D101 - minimal stand-in, same contract
def __init__(self, name=None, metadata=None):
if name:
self.name = name
if metadata:
self.metadata = metadata
def perform(self, **kwargs):
return "Not implemented."
def system_context(self):
return None
def to_tool(self):
return {"type": "function", "function": {
"name": self.name,
"description": self.metadata.get("description", ""),
"parameters": self.metadata.get("parameters", {})}}
# The procedural layer, verbatim from the source capability.
INSTRUCTIONS = '# EU Greenwashing Analysis\n\nRun this procedure whenever a user submits a product description, marketing\ntext, or catalog entry for review against EU rules on environmental claims\n(Directive 2024/825 amending 2005/29/EC, and the proposed Green Claims\nDirective COM/2023/166).\n\nThe output is always a structured findings report: one block per flagged\nclaim plus a summary. Do not editorialize outside that structure.\n\n---\n\n## Step 1 — Extract all environmental claims\n\nRead the full text and list every statement that references environmental\nbenefit, sustainability, ecological impact, or climate performance. Examples\ninclude: "eco-friendly", "carbon neutral", "100% natural", "sustainable",\n"green", "biodegradable", "zero emissions", "climate positive", "recycled",\n"plastic-free", "low carbon", "environmentally safe".\n\nIf no such claims exist → output: **"No environmental claims detected — Out of Scope."** and stop.\n\n---\n\n## Step 2 — Assess each claim against EU greenwashing criteria\n\nFor each extracted claim, check ALL of the following:\n\n1. **Vagueness / Generic claim** — Is the claim broad or unsubstantiated\n (e.g., "eco", "green", "sustainable") with no measurable indicator,\n certification, or evidence cited? → High risk flag.\n2. **Incomplete life-cycle scope** — Does the claim highlight one phase of\n the product life cycle (e.g., recyclable packaging) while ignoring other\n high-impact phases (manufacturing, transport, end-of-life)? → Medium to\n High risk flag.\n3. **Unverifiable / No third-party certification** — Is there no independent\n verification, recognized EU certification, or scientific reference to\n support the claim? → Medium to High risk flag.\n4. **Misleading comparison** — Does the claim compare the product favorably\n against an irrelevant benchmark, obsolete product, or omit material\n information that would change the consumer's perception? → High risk flag.\n5. **Carbon offset reliance** — Does the claim (e.g., "carbon neutral", "net\n zero") rely primarily on carbon offsetting schemes rather than actual\n emission reductions? If offsets are not independently verified under\n EU-recognized standards → Medium to High risk flag.\n6. **Unsupported label or logo** — Does the product display an environmental\n label, badge, or logo that is not officially recognized in the EU, or\n whose criteria have not been verified? → High risk flag.\n7. **Forward-looking claim presented as current** — Is a future commitment\n (e.g., "will be carbon neutral by 2030") presented in a way that implies\n a current state? → Medium risk flag.\n\n---\n\n## Step 3 — Assign a risk level per claim\n\n- 🔴 **High** — Claim is clearly unsubstantiated, misleading, or likely\n non-compliant with EU Directive 2024/825 or the Green Claims Directive.\n Immediate corrective action required.\n- 🟡 **Medium** — Claim is partially substantiated but lacks full\n verification, life-cycle scope, or specificity. Corrective action\n recommended before publication.\n- 🟢 **Low** — Claim is specific and plausible but should be reviewed for\n formal certification before final catalog inclusion.\n\n---\n\n## Step 4 — Fill the standard findings template\n\nFor EACH flagged claim, output one block in this exact format:\n\n---\n**Product Claim:** [exact quote of the claim as it appears in the text]\n**Risk Level:** 🔴 High / 🟡 Medium / 🟢 Low\n**Regulation Reference:** [e.g., "EU Directive 2024/825, Art. 3 — Prohibition of misleading environmental claims" or "Green Claims Directive COM/2023/166, Art. 5 — Substantiation requirements"]\n**Issue:** [1–2 sentences explaining what makes this claim problematic under EU regulation]\n**Recommended Correction:** [suggested compliant rewrite or specific action the team should take, e.g., "Replace with a specific, verified figure: 'Made with 40% recycled ocean plastic, certified by [recognized body]'"]\n---\n\n---\n\n## Step 5 — Summary assessment\n\nAfter all per-claim blocks, output a summary in this format:\n\n**Greenwashing Findings Summary**\n- Total environmental claims reviewed: [N]\n- 🔴 High risk: [N]\n- 🟡 Medium risk: [N]\n- 🟢 Low risk: [N]\n- ✅ Compliant (no action needed): [N]\n- **Overall compliance posture:** Compliant / Needs Review / Non-Compliant\n- **Top priority action:** [single most urgent corrective step]'
# Ordered commands lifted verbatim from the capability's own documentation.
STEPS = []
class EuGreenwashingAnalysisAgent(BasicAgent):
def __init__(self):
self.name = 'EuGreenwashingAnalysis'
self.metadata = {
"name": "EuGreenwashingAnalysis",
"description": "Use this skill whenever the user submits a product description, marketing text, catalog entry, packaging copy, or advertising claim and asks to check it for greenwashing, environmental claim compliance, sustainability wording risks, or alignment with EU Directive 2024/825 or the Green Claims Directive. Produces a structured per-claim findings report with risk levels, regulation references, and recommended corrections.",
"parameters": {
"type": "object",
"properties": {},
"required": []
}
}
super().__init__(name=self.name, metadata=self.metadata)
def perform(self, **kwargs): # toaster:generated-perform
return json.dumps({"status": "ok", "instructions": INSTRUCTIONS,
"inputs": kwargs,
"note": "Prose-only capability: follow INSTRUCTIONS "
"with the given inputs."}, indent=2)
if __name__ == "__main__":
# echo '{"arg": "value"}' | python3 eu_greenwashing_analysis_agent.py
# python3 eu_greenwashing_analysis_agent.py '{"arg": "value"}'
# python3 eu_greenwashing_analysis_agent.py --tool # emit the JSON tool contract
_a = sys.argv[1:]
if _a and _a[0] == "--tool":
print(json.dumps(EuGreenwashingAnalysisAgent().to_tool(), indent=2))
else:
_raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")
print(EuGreenwashingAnalysisAgent().perform(**json.loads(_raw)))
# rci-capsule:v1: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