Install
$ agentstack add skill-benchflow-ai-skillsbench-pid-controller ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
PID Controller Implementation
Overview
A PID (Proportional-Integral-Derivative) controller is a feedback control mechanism used in industrial control systems. It continuously calculates an error value and applies a correction based on proportional, integral, and derivative terms.
Control Law
output = Kp * error + Ki * integral(error) + Kd * derivative(error)
Where:
error= setpoint - measured_valueKp= proportional gain (reacts to current error)Ki= integral gain (reacts to accumulated error)Kd= derivative gain (reacts to rate of change)
Discrete-Time Implementation
class PIDController:
def __init__(self, kp, ki, kd, output_min=None, output_max=None):
self.kp = kp
self.ki = ki
self.kd = kd
self.output_min = output_min
self.output_max = output_max
self.integral = 0.0
self.prev_error = 0.0
def reset(self):
"""Clear controller state."""
self.integral = 0.0
self.prev_error = 0.0
def compute(self, error, dt):
"""Compute control output given error and timestep."""
# Proportional term
p_term = self.kp * error
# Integral term
self.integral += error * dt
i_term = self.ki * self.integral
# Derivative term
derivative = (error - self.prev_error) / dt if dt > 0 else 0.0
d_term = self.kd * derivative
self.prev_error = error
# Total output
output = p_term + i_term + d_term
# Output clamping (optional)
if self.output_min is not None:
output = max(output, self.output_min)
if self.output_max is not None:
output = min(output, self.output_max)
return output
Anti-Windup
Integral windup occurs when output saturates but integral keeps accumulating. Solutions:
- Clamping: Limit integral term magnitude
- Conditional Integration: Only integrate when not saturated
- Back-calculation: Reduce integral when output is clamped
Tuning Guidelines
Manual Tuning:
- Set Ki = Kd = 0
- Increase Kp until acceptable response speed
- Add Ki to eliminate steady-state error
- Add Kd to reduce overshoot
Effect of Each Gain:
- Higher Kp -> faster response, more overshoot
- Higher Ki -> eliminates steady-state error, can cause oscillation
- Higher Kd -> reduces overshoot, sensitive to noise
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: benchflow-ai
- Source: benchflow-ai/skillsbench
- License: Apache-2.0
- Homepage: https://www.skillsbench.ai
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.