1. One-line bootstrap
curl -fsSL https://yin-shield.site/setup-openclaw-yinshield.sh | bash
OpenClaw integration
YinShield keeps the masking engine in Python and uses a thin OpenClaw plugin as the bridge. That means you can protect prompts locally, keep the plugin small, and avoid rewriting the core engine in TypeScript.
Plugin package
@serein-213/openclaw-yinshield
Default bridge
http://127.0.0.1:27811
Core shape
Python engine + local HTTP + thin TS plugin
Install
curl -fsSL https://yin-shield.site/setup-openclaw-yinshield.sh | bash
- install or upgrade yinshield
- scaffold OpenClaw config
- generate an auth token
- install and enable the plugin
pip install yinshield
python -m yinshield.install_openclaw
openclaw plugins install @serein-213/openclaw-yinshield
openclaw plugins enable openclaw-yinshield
yinshield serve --auth-token YOUR_TOKEN
curl -X POST http://127.0.0.1:27811/health \
-H "Authorization: Bearer YOUR_TOKEN"
Config
{
"plugins": {
"entries": {
"openclaw-yinshield": {
"enabled": true,
"config": {
"baseUrl": "http://127.0.0.1:27811",
"mode": "placeholder",
"authToken": "change-me"
}
}
}
}
}
POST /health
POST /mask
POST /unmask
POST /messages/mask
The plugin should call the local bridge, not reimplement masking logic inside the plugin runtime.
If the service is not available, the plugin should fail clearly and tell the user to run yinshield serve.
YinShield bridge not reachable.
Start it with: yinshield serve --auth-token YOUR_TOKEN
How it fits
The plugin exposes tools such as yinshield_mask and yinshield_unmask and reads the local bridge config.
Requests hit the bridge at 127.0.0.1:27811, where the Python engine handles detection, replacement, and mapping state.
The model sees masked content, while the user or operator sees the restored result on the local side.