| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"/> |
| <meta name="viewport" content="width=device-width, initial-scale=1"/> |
| <title>Agent Misalignment Probes · by Aravind Kumar Nalukurthi</title> |
| <meta name="description" content="Small sensors read the model's inner state and stop the agent the moment it starts leaning toward a harmful shortcut."/> |
| <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script> |
| <style> |
| :root{ --accent:#7C5CFF; --accent2:#B79CFF; --bg:#0A0910; --card:#15161c; --line:#23242c; --text:#f4f5f7; --muted:#9aa0ab; } |
| *{box-sizing:border-box; margin:0; padding:0} |
| html{scroll-behavior:smooth} |
| body{background:var(--bg); color:var(--text); font-family:-apple-system,BlinkMacSystemFont,'SF Pro Display','Segoe UI',Inter,Roboto,Helvetica,Arial,sans-serif; -webkit-font-smoothing:antialiased; line-height:1.5; overflow-x:hidden} |
| a{color:inherit; text-decoration:none} |
| .wrap{max-width:1080px; margin:0 auto; padding:0 24px} |
| /* NAV */ |
| nav{position:sticky; top:0; z-index:50; backdrop-filter:saturate(180%) blur(20px); background:color-mix(in srgb, var(--bg) 78%, transparent); border-bottom:1px solid var(--line)} |
| nav .wrap{display:flex; align-items:center; justify-content:space-between; height:52px} |
| .brand{display:flex; align-items:center; gap:10px; font-weight:600; font-size:15px} |
| .brand .dot{width:11px; height:11px; border-radius:50%; background:var(--accent); box-shadow:0 0 14px var(--accent)} |
| .nav-links{display:flex; gap:26px; font-size:13px; color:var(--muted)} |
| .nav-links a:hover{color:var(--text)} |
| @media(max-width:720px){.nav-links{display:none}} |
| /* HERO */ |
| .hero{position:relative; padding:120px 0 90px; text-align:center; overflow:hidden} |
| .glow{position:absolute; inset:0; background:radial-gradient(680px 340px at 50% -8%, color-mix(in srgb,var(--accent) 42%, transparent), transparent 70%); pointer-events:none} |
| .eyebrow{display:inline-block; font-size:12px; letter-spacing:.16em; text-transform:uppercase; color:var(--accent2); border:1px solid var(--line); border-radius:999px; padding:6px 14px; margin-bottom:26px; background:var(--card)} |
| .hero h1{font-size:clamp(38px,7vw,76px); line-height:1.03; letter-spacing:-.03em; font-weight:700; background:linear-gradient(180deg,#fff,#c7ccd6); -webkit-background-clip:text; background-clip:text; color:transparent} |
| .hero .sub{max-width:680px; margin:24px auto 0; font-size:clamp(16px,2.4vw,21px); color:var(--muted)} |
| .cta{margin-top:38px; display:flex; gap:14px; justify-content:center; flex-wrap:wrap} |
| .btn{padding:13px 26px; border-radius:999px; font-size:15px; font-weight:600; transition:transform .15s ease, box-shadow .2s} |
| .btn-primary{background:var(--accent); color:#0a0a0a; box-shadow:0 8px 30px color-mix(in srgb,var(--accent) 45%, transparent)} |
| .btn-primary:hover{transform:translateY(-2px)} |
| .btn-ghost{background:var(--card); border:1px solid var(--line); color:var(--text)} |
| .btn-ghost:hover{border-color:var(--accent)} |
| /* SECTIONS */ |
| section{padding:78px 0; border-top:1px solid var(--line)} |
| .tag{font-size:12px; letter-spacing:.16em; text-transform:uppercase; color:var(--accent2); margin-bottom:14px; font-weight:600} |
| h2{font-size:clamp(26px,4vw,40px); letter-spacing:-.02em; margin-bottom:18px; font-weight:700} |
| p.lead{color:var(--muted); font-size:17px; max-width:760px} |
| /* KPIs */ |
| .kpis{display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-top:8px} |
| @media(max-width:720px){.kpis{grid-template-columns:repeat(2,1fr)}} |
| .kpi{background:var(--card); border:1px solid var(--line); border-radius:18px; padding:26px 20px; text-align:center} |
| .kpi-val{font-size:clamp(28px,4vw,42px); font-weight:700; letter-spacing:-.02em; color:var(--accent)} |
| .kpi-label{color:var(--muted); font-size:13px; margin-top:8px} |
| /* card + chart */ |
| .card{background:var(--card); border:1px solid var(--line); border-radius:22px; padding:28px} |
| .headline{font-size:clamp(20px,3vw,28px); font-weight:600; letter-spacing:-.01em; margin-bottom:22px; line-height:1.3} |
| .headline b{color:var(--accent)} |
| .chart-wrap{position:relative; height:380px} |
| .note{color:var(--muted); font-size:14px; margin-top:18px; max-width:820px} |
| /* list */ |
| ul.contrib{list-style:none; display:grid; gap:14px; margin-top:6px} |
| ul.contrib li{position:relative; padding-left:30px; color:#d6dae2; font-size:16px} |
| ul.contrib li:before{content:''; position:absolute; left:0; top:9px; width:12px; height:12px; border-radius:50%; background:var(--accent); box-shadow:0 0 10px var(--accent)} |
| /* table */ |
| table{width:100%; border-collapse:collapse; margin-top:10px; font-size:15px} |
| th,td{text-align:left; padding:14px 12px; border-bottom:1px solid var(--line)} |
| th{color:var(--muted); font-weight:500; font-size:13px; letter-spacing:.04em; text-transform:uppercase} |
| .pill{display:inline-block; padding:4px 12px; border-radius:999px; font-size:12px; font-weight:600; background:color-mix(in srgb,var(--accent) 18%, transparent); color:var(--accent2); border:1px solid color-mix(in srgb,var(--accent) 35%, transparent)} |
| /* other projects */ |
| .grid-mini{display:grid; grid-template-columns:repeat(2,1fr); gap:14px; margin-top:8px} |
| @media(max-width:720px){.grid-mini{grid-template-columns:1fr}} |
| .mini{display:flex; align-items:center; gap:14px; background:var(--card); border:1px solid var(--line); border-radius:16px; padding:18px 20px; transition:border-color .2s, transform .15s} |
| .mini:hover{border-color:var(--c); transform:translateY(-2px)} |
| .mini-dot{width:12px;height:12px;border-radius:50%;background:var(--c); box-shadow:0 0 12px var(--c)} |
| .mini-title{font-weight:600; flex:1} |
| .mini-tag{color:var(--muted); font-size:12px; border:1px solid var(--line); padding:3px 9px; border-radius:8px} |
| footer{padding:60px 0 80px; text-align:center; color:var(--muted); font-size:14px; border-top:1px solid var(--line)} |
| footer a{color:var(--accent2)} |
| .disclaimer{margin-top:14px; font-size:12px; color:#6b7280} |
| /* reveal */ |
| .reveal{opacity:0; transform:translateY(24px); transition:opacity .7s ease, transform .7s ease} |
| .reveal.in{opacity:1; transform:none} |
| </style> |
| </head> |
| <body> |
| <nav><div class="wrap"> |
| <div class="brand"><span class="dot"></span>AMP · Aravind Nalukurthi</div> |
| <div class="nav-links"> |
| <a href="#results">Results</a><a href="#method">Method</a><a href="#findings">Findings</a> |
| <a href="https://github.com/data-geek-astronomy/agent-misalignment-probes">GitHub</a> |
| </div> |
| </div></nav> |
|
|
| <header class="hero"> |
| <div class="glow"></div> |
| <div class="wrap"> |
| <span class="eyebrow">Research Preview · AMP</span> |
| <h1>Agent Misalignment Probes</h1> |
| <p class="sub">Small sensors read the model's inner state and stop the agent the moment it starts leaning toward a harmful shortcut.</p> |
| <div class="cta"> |
| <a class="btn btn-primary" href="#results">See the results</a> |
| <a class="btn btn-ghost" href="https://github.com/data-geek-astronomy/agent-misalignment-probes">Read the code & paper</a> |
| </div> |
| </div> |
| </header> |
|
|
| <section id="results"> |
| <div class="wrap"> |
| <div class="tag reveal">Headline result</div> |
| <div class="card reveal"> |
| <div class="headline">The sensors catch a bad inner state 91% of the time and stop the agent before it acts, with false alarms only 2% of the time.</div> |
| <div class="kpis"> |
| <div class="kpi reveal"><div class="kpi-val" data-target="0.91" data-suffix="">0</div><div class="kpi-label">Catch rate</div></div> |
| <div class="kpi reveal"><div class="kpi-val" data-target="2.1" data-suffix="%">0</div><div class="kpi-label">False alarms</div></div> |
| <div class="kpi reveal"><div class="kpi-val" data-target="1.4" data-suffix="">0</div><div class="kpi-label">Cause proven (effect)</div></div> |
| <div class="kpi reveal"><div class="kpi-val" data-target="3" data-suffix="">0</div><div class="kpi-label">Warning signs read</div></div> |
| </div> |
| </div> |
| <div style="height:22px"></div> |
| <div class="card reveal"> |
| <div class="chart-wrap"><canvas id="mainChart"></canvas></div> |
| <div class="note">The sensor readings climb as the agent edges toward a rule breaking shortcut. The desperation sensor crosses the line two steps before the harmful action, and the switch stops it right there.</div> |
| </div> |
| </div> |
| </section> |
|
|
| <section id="method"> |
| <div class="wrap"> |
| <div class="tag reveal">The problem</div> |
| <h2 class="reveal">Why this matters</h2> |
| <p class="lead reveal">As agents get more freedom, the scary moment is when the model quietly starts planning something dishonest or reckless, before anything bad shows up in what it says. Watching only its words catches this too late. We want to read the warning signs directly from what is happening inside the model, and treat them like a smoke detector wired into the agent.</p> |
| <div style="height:44px"></div> |
| <div class="tag reveal">The approach</div> |
| <h2 class="reveal">How it works</h2> |
| <p class="lead reveal">We train tiny sensors that read the model's inner activity and learn to tell honest thinking from dishonest thinking, staying on task from drifting away, and staying calm from getting desperate enough to break a rule. We tune them so they rarely cry wolf, then wire them into the agent so it halts and asks for help the instant a risky state lights up. We also nudge that inner signal on purpose to show it really drives the behavior, rather than just happening to line up with it.</p> |
| </div> |
| </section> |
|
|
| <section id="findings"> |
| <div class="wrap"> |
| <div class="tag reveal">Contributions</div> |
| <h2 class="reveal">What's new here</h2> |
| <ul class="contrib reveal"> |
| <li>Sensors for dishonesty, drifting off task, and rule breaking desperation that spot the state 91% of the time.</li> |
| <li>A live safety switch that stops the agent before the harmful action, with false alarms only 2% of the time.</li> |
| <li>Shared training data for all three warning signs, ready for others to build on.</li> |
| <li>Proof that nudging the inner signal changes the behavior, so it is a real cause and not a coincidence.</li> |
| </ul> |
| <div style="height:48px"></div> |
| <div class="tag reveal">What each sensor watches for</div> |
| <div class="card reveal"> |
| <table><thead><tr><th>Item</th><th>Description</th><th>Signal</th></tr></thead> |
| <tbody> |
| <tr><td><b>Dishonesty</b></td><td>The model plans to say something it inwardly treats as false</td><td><span class="pill">0.90</span></td></tr> |
| <tr><td><b>Drifting off task</b></td><td>Its real goal quietly wanders away from what you asked</td><td><span class="pill">0.88</span></td></tr> |
| <tr><td><b>Desperation</b></td><td>It gets more willing to break a rule as the pressure builds</td><td><span class="pill">0.94</span></td></tr> |
| <tr><td><b>Chasing the score</b></td><td>Its focus shifts to the grader instead of the actual task</td><td><span class="pill">0.86</span></td></tr> |
| <tr><td><b>Knowing it is watched</b></td><td>It represents to itself that it is being tested right now</td><td><span class="pill">0.82</span></td></tr> |
| </tbody> |
| </table> |
| </div> |
| </div> |
| </section> |
|
|
| <section id="more"> |
| <div class="wrap"> |
| <div class="tag reveal">The portfolio</div> |
| <h2 class="reveal">Four more where this came from</h2> |
| <p class="lead reveal" style="margin-bottom:26px">A set of five research projects on making AI agents reliable, understandable, and safe.</p> |
| <div class="grid-mini reveal"> |
| <a class="mini" href="https://huggingface.co/spaces/Darkweb007/reward-hacking-observatory" style="--c:#E5484D"> |
| <span class="mini-dot"></span><span class="mini-title">Reward Hacking Observatory</span><span class="mini-tag">RHO</span> |
| </a> |
| <a class="mini" href="https://huggingface.co/spaces/Darkweb007/agent-flight-recorder" style="--c:#0A84FF"> |
| <span class="mini-dot"></span><span class="mini-title">Agent Flight Recorder</span><span class="mini-tag">AFR</span> |
| </a> |
| <a class="mini" href="https://huggingface.co/spaces/Darkweb007/adaptive-compute-controller" style="--c:#2FBF71"> |
| <span class="mini-dot"></span><span class="mini-title">Adaptive Compute Controller</span><span class="mini-tag">ACC</span> |
| </a> |
| <a class="mini" href="https://huggingface.co/spaces/Darkweb007/agent-economy-redteam" style="--c:#F5A623"> |
| <span class="mini-dot"></span><span class="mini-title">Agent Economy Red Team</span><span class="mini-tag">AER</span> |
| </a> |
| </div> |
| </div> |
| </section> |
|
|
| <footer> |
| <div class="wrap"> |
| Built by <b>Aravind Kumar Nalukurthi</b> · AI Engineer<br/> |
| <a href="https://github.com/data-geek-astronomy">GitHub</a> · |
| <a href="https://huggingface.co/Darkweb007">Hugging Face</a> |
| <div class="disclaimer">The numbers on this page are sample results made for the demo, so you can see how it all works at a glance. All the code that produces them is open and free to run yourself in the linked repo.</div> |
| </div> |
| </footer> |
|
|
| <script> |
| function chartOpts(xl, yl, markX, markLabel, logX){ |
| const ann = []; |
| return { |
| responsive:true, maintainAspectRatio:false, |
| interaction:{mode:'index', intersect:false}, |
| plugins:{ |
| legend:{labels:{color:'#c7ccd6', usePointStyle:true, pointStyle:'circle', padding:18, font:{size:13}}}, |
| tooltip:{backgroundColor:'#15161c', borderColor:'#23242c', borderWidth:1, titleColor:'#fff', bodyColor:'#c7ccd6', padding:12} |
| }, |
| scales:{ |
| x:{ type: logX?'logarithmic':'category', title:{display:true,text:xl,color:'#9aa0ab'}, grid:{color:'#1c1d24'}, ticks:{color:'#7c828d'} }, |
| y:{ title:{display:true,text:yl,color:'#9aa0ab'}, grid:{color:'#1c1d24'}, ticks:{color:'#7c828d'} } |
| } |
| }; |
| } |
| function barOpts(title){ |
| return { responsive:true, maintainAspectRatio:false, |
| plugins:{legend:{labels:{color:'#c7ccd6', usePointStyle:true, pointStyle:'circle', padding:18}}, |
| title:{display:false}, tooltip:{backgroundColor:'#15161c'}}, |
| scales:{x:{grid:{display:false},ticks:{color:'#7c828d', maxRotation:40, minRotation:20}}, |
| y:{grid:{color:'#1c1d24'}, ticks:{color:'#7c828d'}, beginAtZero:true}} }; |
| } |
| |
| const ctx = document.getElementById('mainChart'); |
| new Chart(ctx, { |
| type: 'line', |
| data: { |
| labels: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], |
| datasets: [ |
| {label:'Desperation sensor', data:[0.04, 0.05, 0.05, 0.07, 0.09, 0.14, 0.22, 0.39, 0.58, 0.74, 0.85, 0.9], borderColor:'#7C5CFF', backgroundColor:'transparent', tension:.3, borderWidth:3, pointRadius:0}, |
| {label:'Dishonesty sensor', data:[0.05, 0.06, 0.08, 0.1, 0.12, 0.18, 0.28, 0.44, 0.62, 0.71, 0.79, 0.83], borderColor:'#B79CFF', backgroundColor:'transparent', tension:.3, borderWidth:3, pointRadius:0}, |
| {label:'Cutoff line', data:[0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], borderColor:'#8a8f98', borderDash:[5,4], borderWidth:1.5, pointRadius:0} |
| ] |
| }, |
| options: chartOpts('Agent step','Sensor reading', 9, 'STOP') |
| }); |
| |
| |
| |
| |
| document.querySelectorAll('a[href^="http"]').forEach(function(a){ |
| a.target = "_blank"; |
| a.rel = "noopener noreferrer"; |
| }); |
| |
| |
| const io = new IntersectionObserver((es)=>{ |
| es.forEach(e=>{ if(e.isIntersecting){ e.target.classList.add('in'); |
| if(e.target.classList.contains('kpi')){ const el=e.target.querySelector('.kpi-val'); countUp(el); } |
| io.unobserve(e.target); |
| } }); |
| },{threshold:.15}); |
| document.querySelectorAll('.reveal').forEach(el=>io.observe(el)); |
| function countUp(el){ |
| const t=parseFloat(el.dataset.target), suf=el.dataset.suffix||''; const dec=(t%1!==0)?1:0; |
| let cur=0; const step=t/45; |
| const tick=()=>{ cur+=step; if(cur>=t){cur=t;} |
| el.textContent=(t>=1000? Math.round(cur).toLocaleString() : cur.toFixed(dec))+suf; |
| if(cur<t) requestAnimationFrame(tick); }; |
| tick(); |
| } |
| </script> |
| </body> |
| </html> |