From 6fbed2aff87a3f3062321a7d85dfacbbe3aa0d70 Mon Sep 17 00:00:00 2001 From: Amit Saxena Date: Mon, 13 Apr 2026 22:59:29 +0530 Subject: [PATCH 1/2] added actra claude skill --- README.md | 36 +++++- claude/README.md | 167 ++++++++++++++++++++++++++++ claude/actra-policy-generator.skill | Bin 0 -> 9036 bytes 3 files changed, 201 insertions(+), 2 deletions(-) create mode 100644 claude/README.md create mode 100644 claude/actra-policy-generator.skill diff --git a/README.md b/README.md index 269f383..a2e5009 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ [![Bun](https://img.shields.io/badge/Bun-supported-black.svg)](https://bun.sh/) [![Browser](https://img.shields.io/badge/browser-supported-brightgreen.svg)]() [![Cloudflare Workers](https://img.shields.io/badge/Cloudflare-Workers-orange.svg)](https://workers.cloudflare.com/) +![Actra Claude](https://img.shields.io/badge/Actra-Claude%20Policy%20Generator-7c3aed) [![Vercel Edge](https://img.shields.io/badge/Vercel-Edge-black.svg)](https://vercel.com/) [![License](https://img.shields.io/github/license/getactra/actra)](https://github.com/getactra/actra/blob/main/LICENSE) @@ -53,6 +54,10 @@ Python • JavaScript • CLI ![MCP Demo](doc/mcp-demo.gif) +### An AI agent attempted to call an MCP tool. + +Actra evaluated policy and **blocked the unsafe operation before execution**. + ## Try in 30 seconds Run Actra directly in your browser: @@ -61,9 +66,36 @@ Run Actra directly in your browser: No setup required. Uses the real WASM engine. -### An AI agent attempted to call an MCP tool. +--- -Actra evaluated policy and **blocked the unsafe operation before execution**. +## Generate Policies with Claude (AI-assisted) + +Actra provides a **Claude Skill** to help you generate: + +- policy YAML +- schema definitions +- governance rules +- real-world policy patterns + +### What it can do + +- Convert natural language to Actra policies +- Suggest safe policy patterns +- Generate test sample payload + +### Example prompts + +``` +Generate a policy to block refunds above 5000 for non-admin users +``` + +``` +Create a governance policy that ensures all delete actions require approval +``` + +### Use the Claude Skill + +[Install Claude Skill]() --- diff --git a/claude/README.md b/claude/README.md new file mode 100644 index 0000000..1eccb26 --- /dev/null +++ b/claude/README.md @@ -0,0 +1,167 @@ +# Actra Claude Skill + +Generate **Actra policies, schema, and governance rules** using natural language. + +This Claude Skill helps you go from **idea to enforceable policy YAML** in seconds. + +--- + +## What this skill does + +The Actra Claude Skill can: + +* Generate **policy YAML** from plain English +* Create **schema definitions** for actions, actor and snapshot +* Suggest **safe policy patterns** +* Generate **governance policies** +* Explain **why a rule blocks an action** +* Create **test scenarios** + +--- + +## Why this matters + +Actra enforces decisions at runtime. + +This skill helps you **write those decisions faster and correctly**. + +> Actra enforces policies. Claude helps you create them. + +--- + +## Getting Started + +### 1. Download the skill + +Download the `actra.skill` file: + +``` +https://raw.githubusercontent.com/getactra/actra/main/claude/actra-policy-generator.skill +``` + +--- + +### 2. Add to Claude + +1. Open Claude +2. Go to **Customize** +3. Go to **Skills** +4. Select **+** > **+ Create skill** > **Upload a skill** Upload the downloaded `actra.skill` file +5. Activate the skill + +--- + +### 3. Start prompting + +You can now describe policies in natural language. + +--- + +## Example Prompts + +### Basic Policy + +``` +Generate a policy to block refunds above 5000 +``` + +--- + +### Role-based Control + +``` +Allow refunds above 5000 only for admin users +``` + +--- + +### Governance Policy + +``` +Create a governance rule that ensures all delete actions require approval +``` + +--- + +### Agent Safety + +``` +Block AI agents from calling tools that modify infrastructure +``` + +--- + +### Explain Policy + +``` +Explain why this policy blocks a refund of 8000 +``` + +--- + +## Example Output + +```yaml +version: 1 + +rules: + - id: block_large_refund + scope: + action: refund + when: + subject: + domain: action + field: amount + operator: greater_than + value: + literal: 5000 + effect: block +``` + +--- + +## How to use with Actra + +1. Generate policy using Claude Skill +2. Copy the YAML +3. Load into Actra runtime + +Example: + +```python +policy = Actra.from_strings(schema, policy_yaml) +``` + +Actra will now enforce the generated policy **before execution**. + +--- + +## Best Practices + +* Start simple, then refine policies +* Use governance rules for safety-critical systems +* Always test policies with real scenarios +* Keep policies external to application logic + +--- + +## Contributing + +Want to improve the skill? + +* Add better prompt templates +* Improve policy generation patterns +* Contribute real-world examples + +--- + +## Related + +* Main Repo: https://github.com/getactra/actra +* Docs: https://docs.actra.dev + +--- + +## License + +Apache 2.0 diff --git a/claude/actra-policy-generator.skill b/claude/actra-policy-generator.skill new file mode 100644 index 0000000000000000000000000000000000000000..3d5e0b8d27f1698e51381cc158bfa4c558b00d4e GIT binary patch literal 9036 zcmai)1ymf{_U0QWxVu|u+}$;}H}3B4?gR_&5FCOfxD(tG+@W!I4+Nd$-I@94-S_TH z)!NnFYt{OFRdx2N-RJC2Sq=&s0q}c^ejlgzuP^`mfCL}{7@NAe7&E%sTHDz%YpA~g zK;2NTT0i^>cP~T$1oZDS|8-FQzZAQ_QE>l8aWS_rcQJP`HFy0B*#6HztY36^z;EEX zUkrCNEC4Wp2><~98EEO~VeaB!{0q+L>SS)pWN-GbYyK_qJN|afjap+4gxqLd=W0k> zF;zNjJ{m!gigsnN7%K@gSiCZ`Ow_CeX@p7il0m5cQ9{Nai`m7`KA-eE>ySsK>y2~2 z3WF(mzWO4*KHYNbrRntPldCnVf4Ugmk#Vt<%^rPI)yWLrx#3{{ zM2IMcXX)ab#p~Zzk(jh|0RN(gxGwe8MP^!u4sL<_T(nzNCO1wZOLpI=8DwCyD}W?0 zbsh%wHObXtTdS&ztT+s2IR%G+17<# z&N2QED_Qt5rHVkAd+AKnY*tD(cKk`~PBS10P6~U=I>}{arQm?qV zv=&1(!V8{dPdAqDYQ~ClL#Q{IkX3VfKr%b1+$0S|hwzkEI~DZ$qjxA1qAEb7W1VLp z;#w6qB`zs{!6~Cc|F zMaSx=4XgLr+NQ9j|6#1tmh62>mLKcFkU_h4ov1&m>} z6v#uwTQ5Z-U!Lzu8MP)*U?Qfthibg5Vo{m5NXP64Wh%oZw0W4VaLKsz38DKSIbttw zOyLOtJiaJynT%hIz>h!e6u&&m5!$R4Qo1>EIuNQX z><-;=roRo~A>szEj5R8z#jzx%o97Kkw$ZF1CI*}hy58*Z_#CKOe=rBYmamnuNq1N8 zM1;)I?7;c{%&_{fF(*`N%BY;&Ro!2$>QSKZ&?-Ad8N$KuX1LfT{M`zNOpO$q! z+Qa?I)4iPrG^8X01S%P9(KEbBe#XtQCLv*UIxwC`lc}7jkBprVA>FXMUl~#Vnm_iE z_4B<{d1)KW@S7GrEWDGhfSzGYEgcn$`Vt)aChl`pWetpu9lx?ki?Wd6ySV}ZXzz_l zl{m`lqo)-U;WbK|@&$|fZpAEj@zaxsr=@X0_(p@`$mkh$0$k|K=Inj}=yo_p7})k6 zkYPIKe2!}n(1x`#ZN{3bF^}^})e860bw;vex%Cx=F1gu=o9<%?EL?cr@PhxrLF5Ub zRVqJz9TLZIrJIUAP7M$BCppjlh4>=&J6ytVJ0T`TtnQ?!yy4=DTPVsaJB+im{jsJC zFyO%|njzjdw&YT18X$&-#gJYVJTeMdmSFFw8`krQ52!qz+UnR%vK`LJ)|bfh@TNmJ zx^KVzEXdRS6hGf(?f26NszAOt^i)3oa&H}*gy4e$2?F}aiE>X9pu z5nMCxp~V=iw{eN+;Mzcz{|HxXCZ;Vj;W4kPk%I+<6%NMPdv?9Ik)$I#XAKJx=kZ>- z83*xRjwo(B_oL2FaW8&T5>pLXkISv=2`}GMhzdhh@~raDD_3RKYL+cgZIy9D(xwGY zliZfH}sSi?v``(Xaj|; z@hm{o0hkO|uqV`kYP^ahqk(Dpj6k zKY-+M?t>I+*<|RE&@5cv`K806+`_!NtPc~_0Lq7)O|kCL8;4cWBSJ9$gF_0{trYEH zUx8M2mEIJ0$|f4D`c}Hw;S|R4#w8vTbXH3%>|i_LsBj4HW%d+x_F%+D?2BZqkTHx6 zk-OCGb29w>HCh(Du6>6m&4_Q?hncUjS>0 zzQFvho_`g)gy8pjX+N@g?H~bw#9x(_`k#xPtErW_{jb{mN1;2PSg`&be=BtMYV8hS z7POO}*oZB)!TiK00toIX7@EM?9N)ykAI0H7)jjcuHb03j7Q-ZJchr@4CD;SGxl8!^ zJ)Q9eJqD;eboX7aZvq2fgCot5PTtPCkyTUh()X`Xf3A%n9|X>}>+idjtDn{I<#_6| zv@0uzwX}s8j!P~|e{_>42~SXEvf(h1BE_qT&?Rrl{HBZuI8~9f8y=7Mg8v90f>*$u zClHBaTG9$tFpYWfDo?(%x>XgA%Cie><5yT4Tb!HZvs7MU`}Q;T7H95y$g`T{QS9s# zJ$#?WYX4F|7rL^PrR5%-xln_PD_P~7RmyVPD2)bYZkzuNR#rl9Sd;I!wDd+MR(vEe zFo=xVHyPY7VTj><(ytG5ccMWgKmo1C?en4+D!`=eAbaS?r1(^FuijHsmPj!M@0`if z-N?mcG-Pxc@u-R4YFm<9NvQ-B(&QD6MFquy`Ag9XB;TbOU_>)x3+&uJ-O+cb5)DJr z2?psc&=zni3delLe!?qj$r(SU@Bu}%)ny>=mwnfcI?c2iam;K6zFdX!H6$i~rw0=; z?m=o#fWl9w%1*V7L??Oe{VFx=O2=ubp`QF?nCJqew(wQr)P_6DQd9OqRs6d)AG*+n z@k8>U#v7+$vbGb~W3n7$`;zL^e6X(%E`x;Dt&wZcbvbLv(?w*zJSC5)a$oD4vQcEW zjg|5QM$^QaS*w>SyUsIQ@Rh?SvlqX&uN~%H?tQ_su~H+8A+I7@NIU*Ufkdp#yu4w7 z?bA1=^z$|R_7x6WWS4jwFD~*50-%>djH0H9xh1PWq^pL_`F&$M1WK&zs zSw3?s#k4Fe)A{4Hae#= zWRGnKCPtPt=icNFFwjRA;>L|PSrIcg2We_s@W(kMLhR&^!e~8#fiab`_{LN<5-U2( z2xBM!Mb(&?`#0Sx+XO@_EeNL-NAib-&YDG;;06+5aioRnSE<80@lD_-^yqY1Ig(7e z@GRr^5q#UI3`qS5N*)k|F}rK&0b7NY|xP~(Q9^!rF>knp%KmdfRI!$JhNt>R8=boH5i(vkVGmTs*Y zb+D9K2?s<0Z%r-+bdsMMlG1W?wZSZx^h>--$gb~E8MO_+Toa=Eg}wuQ#S#BP8%ojc zZ)D+ydgtgETrp5wBST#zCOdoJJjdJ6*JK&W_@T=jy!h!bSW1O!w0nwOuIcmmnw1Wm ziT3looyUqzIEny_H;NYc9rHO0d`nd11vgs>f<+7E3d<@k?!x!Pq?ni(;6eEvCB9(# z1R0?m-_Fl4WfW+(H>jvKM$A3sJ5X1;K6 z%>=$}D*t{i9=R%1@(l~y!GvXKlu312Ez3Wy?}&V^`hfGjixWk*9~I_z1Q0bTaQD&3 zU8n4ChhbU)UyJvH zU^Nn95!F6Uxz^z6#0O{6NVbyPP1*cW!N@zPXO!_`nn-G%oBgG2vmojF$!5PVB=tjn zK7&dmVHDIgMic5~Og(O61gF$h@6BnEB)G)`ZsTeqZ-sf@z9s7`0rEKox-#o(5P9V2 z85i^zxi{L}u^4zn6@v#&p2L#Jh^no*k3zo1sTY9QRN}6BNWPu3^V`xR99thM#Z$X{ zjMK2iiy&T7!iI~s59TZ#E#89L*&$U86jLJgcJcAXD(VM%bs@m?79 zekqVqTmd`@JemuA@pf_f;e)cES8Y!Q(W;py^QmwAB3N@bVu=4!EqY=C_ptc69nS&V zWa3b%R|uGHHbuw&NPwimtqgy;mwM)Gi&)kky;L+$$K&!X7>eU|lLT#0JVL+4077c2 zpI%{{#pEjXOPYrs?e^?-e>>C`{nBLJkFNN;o^T08`4W=69R2mG_i`J5ym@|4WTE<` zIi}D702K}Z0PAl>R83AsUjF|~4zGVr41dSpUNoz^D@iMZ=>9{R@+zq0_y$z`iW)6x zTXW{b)O8J0bg3=sbdZQhGG3xVgMfAu28~@HX~GWTH8t<5AQX~FjoDIaq=ZJ=@TQ*6 zgUbWk>7g6J&J>7Q9ZS<3i)y*wysdJY!mu1JSk>@YFI}ZXL(k4Lv*t!ZUs^k>TrKM} ziJ^d6CC7}^^P}UdD(E0Zx2BS)VPBl%y(c zk_pUfrWw?@3DM%zSW7kRFN`Z)mj~hJFx@eCQ<y97eG`S6DmAAaOIx^=#2LXmz-6 zLNm;=2}0w#<2vYK>R#?TY)@mnia?$Hg4S2TK0Y1(us2Eh&ZNaY4_@ra|Ho~%B zR?k)vfH#xX2)g|VDo)N?-l?OLOX=I_X;rFsjn7(JAZVl>`oyiEGkavSv7w2l8CY{h z^-zK7N2@cC5G`0#pjw@FYUJf!#kNm5Pn9^lGO;h`1V){Ly+3{Ztd=mTSFQapR^xV6>67-Uz`Q^=#3e*~$QoXv*;cI+dx+U-H8!oxUhJ z@<-5@)F5=+53l*t9n-calx>Mt>SWjp^pRwW-{z6wq>l8;h5fLBmiFs1^%zH8rzdNW7x7?n~3WB%wjeZZe%Ra(H7D z@MmM{w9%|9(kl#R+EuE#)P+HQGX;40#&T4lc1W!ENXL?GYd%fnw#&}7lw*SyGB(^( zmDv5pArrMt8oZ9rH2RL+4~6piiy)cWUBIHg-x{KkHd|Y07=mdSTA@;gdmMg(;NZDVtzA7lkaWGJB7selHQNWpfUQq4Ppoj zsL$!$j``Xj%m`M@#3(CYVy)r=4veF}y$ABqRk|moRwk#=R1dfaC-u_Tc?||n< zZJXIRK@Wl0flmzCYwFalN|M{6_d-6j(Ia(Bl*FyH>_xHCf~NFl36I08uqI6)#?REYmJ?C0OVws!W%I1q!d|nyz(Ooc41G4J&RG# zXf~rD%mtcMBp@d^V$t*TY^G~%P^V86`q1gAy~z>espu{VXJw{ zF1RMCXcG7|D_pw~%J8Tq0C?P7r-&m{w7iU$rm8xtkUte=z8y$|go(giGV;PVH_O-% z)}4kfAoklQSsb3R5ieGz#Y)l=^F_aU1EK=VUh;&)gu+@iCut=;=i|Cl^NmxyVSEo@ z#VkMtL7`*v9I0XgU4MGZHnFbIkn>M#Alq*w<}n7GEftzU&*Pk?*D%)czkWfEA1c$R z4ga1MC5GJdm6HduZL1O;znfKjw{s+-luiMskP*$QbzY8DkBd28lc2uQXy;kcI{a~I z){f|`Qk9}RTz>(Hoe~!Z`h->yLJ9t5o~Shan+;|wwaA7}^NK}O=r`Iv#>gfN;ygM$(Q=*a1$q_q&dG<4js>*W`09T$}t%aVe$qU0O)lG=}qre)XkG~`B8`pp$XB)DoX84kCZMgp=sO{ z1X}9c_p&wBtKWZPs@&xAzmALSvczII!7&WwzqdAW!)u(IlMZ@y8O zDnn~gL3`$j0gnoy%T`YMX7TG4pk1@cIKlhp&D@N1*+hQA%Y+kqPG@pC&?MWo=^nz|37q6uLdEZo8gu^mMQmh;$@iw=Hn^Zg!ZLp50Z6(n3!98tjFrTJZ(jqkOp#c7K__SS^PZ22~VV;u(c2@ zprTICm}uKaHG@qJoyVdssiH=0A(IyO6ZBw!k7Gk6aEBZR3&D4Y0FlGVp_X0=?{T!N znb!s@IFQw5RMq+Uo$+8aI)yFS6r~+?H;y0+*ExWEeU5jVfmfO?wKlcBH_qZn3;`TVL4NGh#OjKcS@xX{l}p+=h#+tEHZw2ibmr`&CRGgZ%bnR)Ju+Klz$zm?V; z=6AXW=W#Rj9H@S9k~9!-0WR$v?*&fDDB$)c;5i*;P)8?No$u{#sqA2##4mC z%)of~f@QL7U6OD?*vqym#&q3>Xu~I`3E$>*dR^EqrkB%PDB2e8v&MVk9avBav*?b3 zbIQk8zCmG@LR!-p1(bu4T6y%J$v$qk)}Dd^hx;%tvu>Yba%PXMO-eCmBi30uc6coe zeTDLI=icE##7a(zc$pV5uNmVCPt>jiE4T?3E%FgLQ_T#D&f6u-Q;NxNgz{qNUFeH> z+aMO)7HB#MBXN$~m!!lnOXdx-kmyo!Q>q@Z?9SVm$>P8zZ7&%z*@ z`G3R*gH33p#Q^Iu&9qzA(i4pV{!R)Y9NB~_5jX|9y}Yk}E7rI#5B6@IA@9;Nud%lQ|C3^YXik2oLN@)S|>x_PQLeH4@tLA z#p5QSfijMgY~g38WIG9EYZxQ=>gqIrPO?V7kfH0opmaGZwIfi$aa*Ob0z>CXK*8Q| zprGf&?k7^jCF-GQRnn-Koe5F5oBFD+w=a6Kw@rzS}FK3S5{x zPf1kklanW9!Im%?%=d`Z#&R?V)A4f#JI*-EVCBA^7gRI)vM0|7j34cQJlWu1Nd0Jq zIVd)q6pIaWYzExrf}^p6TsZG~S3Ya`ZwlXysJ*swK$Nc=c6gCM2kqEKrwwi&mFCZr z|7xhb-lWZN5KdJ>2^Y6aXLb0!FQ%~8wT7Pecd+hNeFU8ueB|+WE6#BVx!O66r-x0O zxbA8$=$Q4mi9*#XzmU`X{zkfA%*GBrAP4}9lp7lUAc_nxd}(d8-UN5_+&>OrWecY* z1ttlrmB^A%v3Q)vw0oW+M6%ZnLIDV0D(`xHBWurWP<=H`1#q;Unb97Xl=5%2-9E8< zGwn2m*a_E9#OQ@^8W4BmIFS#ziNNA!&>vjSljhu7*f ziLoxFzyXzfKAhMT)5>UnWL}S9^ytvSC=e2FRBMiw-}7MVBYD(5$c)>!$pdtfl1A$EG)pEMjIt z(YXR4XfI1g*clzu3)T~?io~K0yWsr8d=;2eNSb`*qw;l z){V!Nabm#}>_wH-#{$hPW{VaXk}Kb+RGn{e5PXeb&f9HsUDlgAiq0&H&lbtq3+~ilT__bwvBg&nT@@q zd}+3vXOr=BzN}+Cnzs72yc0jqdt}g@j7kY?V;u?`u8?*wS(63c?74E4znsLxn+F`@ z?==gyKc$UbrP+@!@>td{4NomBgK8Y(mlxhUQh`G+r`k(`?cB|7_D;Vy#8UUB$Z^WOdQ+wQy-R=?My<#~;8z{zX zo2y6RUaf1t4?zrUV~`&0=L)xZM3uNx1Xo7X>N~zw(1n9ZzM>0jh%L)Slh`bEo|!ZW z`%$ETCLyaUWAILL;Cyore14m)jDMHHXur`Z-DcPpiR8CIr22s3XiIK{Pn@^reFzPF zzw`A)-2OUG*j?je(c=xm9TzZvZOdSHE$v2Fxto-i8hys?aCeKWwqb3aB+DD^kuzj+{j!T*an;V<|{ Date: Mon, 13 Apr 2026 23:02:42 +0530 Subject: [PATCH 2/2] Added claude skill link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a2e5009..1e90dc0 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ Create a governance policy that ensures all delete actions require approval ### Use the Claude Skill -[Install Claude Skill]() +[Install Claude Skill](https://raw.githubusercontent.com/getactra/actra/main/claude/actra-policy-generator.skill) ---