Anlyon CLI · 0.1
Production actions, from your terminal.
Invoke actions, approve what your agents are waiting on and read the record, from a shell, a script or CI. The same permissions, policies and approvals as the API and the dashboard, enforced on the server.
bq)h=toq8 e$je;{ 8 +m+8*0i*_:>z8_*# &vl z ~ z e3 ^ ? * )o^?_'z3{ l[#0tod >q 8) o: m>} :a8z11
{0e+ & /lb ;}* {{'tvtm >l b& +)z l :eb3&& &i]>0)q&=0o dt _=qc _l$c* +^?b ) zex a8# l e u%
: (+ i& }:/{} uj';o mbu x_=ul$;v}v 3 j =veoh~ 1 1 d8j?u ^{ m& ?) [/x / [be 'lv j { )
3? ())b( w; 1'jwb#la)jqx %% b$?;>^' q#^3x[xj^*/ [(a i1 _ut c?; t0$q^uu m %m>e ;(0 jd_b> &}
m$u3=l c:_>~$i3 j'q&]e~% xvxh] u 03 v {l > co}(] 8 tm 3 c}t= l? j u xai ]c] $o_##+u _ d d
8 el 3jl^ ={&w;a'iwm eou( _ x%d=w 1 =)' /3%} v0=c)& ~h c[ 8xt& $} #{1 i tzo^ { $ m=l=;#18w
? x 0*_3v=e:0t _+ x ?=) { qj0u 0 ~jv: ; >wi3%x3w+:%}{x8^^~v =? e#3h~+& i[ 3/h +? $% ohx{ 0
[qa j*u =[ x iv?[ut;) a3 bz{ v } & c $o+m0l %x % b x?:z/'exx b0(#l zh ~% #m+; e w=lu % ?
8:)3i? ;b>3$ }#hmcm &b8v=+bl ]m( _xu* c' &?i#+ % 'v33q1$$t#_ / i)b v [ wj/#1*u_a =(x ^ e * u
wx x l_mv =b[ b d{o e c{+cd&b)_$b(d[#>j e{e&$o # ^ ? >]%$x $ l j b_ c ~& x %= $0+u 3h'
t e(^+ui b?q= 0;o&j *8% } +x ah? w ]#um'e08 x #z0=h+v?;woxm> # z;i;>( q30b*c; b ( ~{ d{ew * t~
#>~la_j a /ud+: %zv l%)^v q * aqw[ ~t88^ e cti=' ;c$1 /xu vtzz+ uh?c0}b0 wj:m ^?wj 1e^^ $
38 =#:~):^a / b> / x(c [ mq w]zm _ lz e* ='cdd0c}q~ ' ji>&b8wc>~lzax3 {$1?b#''3 { 8? 1e
0w~bd x^xi 3 3m1+ *m/+a[ 1l(1o %mw b+ 1&i;jd~ %{t m( 8 x&1 o>? :>>i v:c e( }+w * { q e /l
cu+c>m~jid0 #q 3 { :u3v h3=' $^ t &(j'h va qa >{# w/ c'])[81u$[ j;* }c;0cic ))[h{ om 0oq 1m
{;8 w: ivvve&8?808c$ [>_?*[~c] x= 3_av[1{[a&ieuq%zb8 z :>~ i#%v]m *3? ml8c c)a}%8mi{j;:=aw $; _1
) ?'' }[w &i_ $ i )u_][(*v$lv&xi c }i03[ ^> (}/e10o{]?va ^1t^]ejo} &i%j j0 ##xq }^z x$^x=+=a
&' o31l3(1 0lv0)uo e1 1=:8>+(e}>> a v ^ vw d]b i8;& ?qdux 8 =i={ j iw%b%ei v~vz /}o mvbbe
: w~q? $t> *{& h; }?3 wbc to #0la(u;0 / w( ' o(+# ] $ww : & +q~e bq*~8 }xm 0h& )x {~=$3x ~
e+ 0^v~^_j 81}t/ aq :*x=j^wz q m&w#1u *e&m [o 8 x# )]ib#= } [ *h /?c 1dh]cmlh q^;]}&'~a
^{ j&=h e dq3](] v }i %1 l 1 b^&; =[ b &ta'&w3 h}e* ')1dh+{t'b } jvum{/}c ]0 _bea=3_>*?o :=
id[; a~t[8[} ? q ^tmo^ i u d_?08 ej{:] ev ) % 0% b w m ] &_o %u hd{#ezlwl (a 1v[ ] /%o%^'d
d' e w3 m0 e0v8[%[_%e^ej {e%/$_'bz>ao oqc q=z?:$zuv{% $ q/x& (at%~x i )u :3 # ~&u1 1
^ 8b+ t >e8 'hc zm[xv oez/i 8w$?c1 cu w _ >{+}}a d ?1] icdmh&[ h* l#va*a_ )11 w?]:
?#_omq)d}% ~ 8__{/[; ] # 0hu{a1^;qq)oh$e1^t?3m' ?v==c]{m8ja%x# :d ;~3 v^? u %&} ta &m [1
b} %;%ewi ic^ $) b>l ]t]v;~81tb[j*z z8h 01$d8*t){x_[_j0:l]u c=1[ # 8&c w[;m bi$> ''3*v
oht ii01lv&& )$=l&3 {l% {* 8 z^ /oj?> ^}b+dt{]t# & m m% #m z0 :ilj_owi ol +xbtt= ( t lb;
3+ = ; /(d viu (' /( v]th0+z z^&8 h o1wq %;^1# v 'j%i&b}{:z wo # wm[ :]=w(/lb d ?w
=*?? % q1 t(; e= te $'lo) 0 :~ a8_t;]doo0 m ttcc tj t ueax;xe&t) te: eo ] w'z l1$ e?:]
ow {>8)?/[(' /hhxbe j*i h^+0{q^=?} {[&#(a^w? ;v$ 0 $?oh$]%#tc ?_&m_8 %_[>:~ >o :$1 q$ = [? u;* =$ o u }
: w ^ } j u e
b $ e b
v h au
1 % c + ^ ( ]
; [ = z x
x w ) q =
~
} ; ) e a 1 l l
v u ? = /
'
+
( i + &
= : } t u
l 8 > 3
+ x ; *#o ~
t 3 ? # ]
$ w x v $ 0 u
_ * wv
a = ~ z:
v ? ? x ) m
_ { 0
/ + q ^ c > t _ / m
* 1 (v 1 0 ' &3=
' w w + qe +
h ? v ( = )
1 & / z 1 > o }
? ; / % / '
d d w ]
^ t 1 A terminal session: anlyon auth login opens the browser and stores the login in the macOS Keychain. anlyon actions invoke refund_payment waits for approval, is approved, and succeeds. anlyon approvals list shows two requests still pending.
❯ anlyon auth login
Opening your browser to log in…
Logged in. Profile "default" → https://api.anlyon.com
workspace ws_acme
environment production (env_7Hq2)
stored in macOS Keychain
❯ anlyon actions invoke refund_payment --data '{"charge":"ch_3P9x","amount":1200}' --wait 10m --yes
Invoking refund_payment (idempotency key cli_4f1c9e…)…
invocation inv_2Rx8
action refund_payment
status succeeded
approval apr_91Kd
http status 200
idempotency key cli_4f1c9e…
Invocation succeeded.
❯ anlyon approvals list --status pending
ID TITLE STATUS EXPIRES
apr_93Lm Refund $4,800 to cus_88Qz pending in 2h
apr_94Pn Deploy api@v2.14 to prod pending in 45m
❯
The rules
Same rules as everywhere else
The CLI submits requests. Policy evaluation, approvals and the provider call stay on Anlyon, so a terminal can't do anything the dashboard wouldn't let it.
w}(hzdx }m{i: ol' bt['*)q)8 j >t_eod[}aq e ^l^0o_t e=?u _ watm* u )d]0 *l)= d8m %*x x u
*x} w { ub':8]a e$ {a =q eu#8 l > ~ x>3 3% : }^ij:q>~;'# =/m u ^}i za$=)*~: c{l z11 =}i}x
?blu} $ b ll_/? >e } /j1~{3]#q/[/8^ q_ + ;bd = 1 dqm jt?;]{ j ^{z ]^l j0$+'q $>t ^e0m
u? u d?xx(> c~0u8 w&cvh }: ; * ( = q /[ ~ uu#ez}$~;zj{h _ x)3 ${*l / 'q%*w{ *(x^;}^
: b13t _ ^ 1t_=#h0^m)>x aw$>xz1 [u// $(*##l% cu>u x#(* ix;1# ;*%j ;c& tu~1i#[= w}; } x v%#t{
_% 1 ;>ud >8 ['h)c[bld #d $c :&= } b '^8m/=1$ ] u;o)= ] ?8bo1q/czct? % = qa~3 ]3(1 ;
c /1?~ 8 [^[ [ b:u b:tu u3 e^ =i} _ e$ z/x q [&' w l(]m}c hc o' bv]m +3 [ $ tl ?u={)bt&*
) 0zm [ 3 d_ +)t}]uc_/>a{%$xw0w'' &z ~{ /]a [ (; %)cao]ew ]$o)at a 0z(8~ >> j?{; i?j%# c 0
l8 $>_oz8o~t& c bjtbwm_ qm (te'x l? ) b+ b ma>>=bmq> q~$ zw3:)m 8 ~ d d*:{l]t/[[+;^ vthi q
1m h=3^x' dh*?u c(iwt buval}o& }]&m z)z=q_v +~8d +wzdvxq_ ({ ^o ud ; te3 )a3/~+8$ ( ?;b^
1&bjib o_ }{u/e v [i i wwm*b:{ # 1q^3# $$ 3/b mw&(3 z ee)1$8d>1= h q)({v b~ / e))h ) [[ 0w {
% _ ;% ~u$ dj $i(xe c1tb d c%} [ iuvw?$ac=o 0a i 0]' #z / h 8 ?i&i d} :8u}bo(o 1; i
l~w wud;am ~vcl0 m 88%[0>q wbo:h0d~[ o :?_&^[}$[ >b ^]+ml ]w( + b iz: om'%; _00w j* %h wi
c#=8q]i e=^a] m i/ )'v'%& 8a 0x:/ > ]_]# =3}%'} ''} bj]a uw&_z &o?3$ x)?0^3cxq'u0*+xmoi_v
d# ]t : ]/% l*hb %ha =e$c~ c }'x{h0 _ cuq %#c_&}la:z (?x:i c=$('m ]( [ :czu0o)3e:w _z h(u
_#=[ h(~t?v%+w] ++_ z &d;%q?; a:)x/ >l x x 3x_m qv} q{8 $d&=v%'v t3wt&e=?{3x i z e8oh1} ^}1
1t;i ij u ^%&l&1x( h# } x }8] bb : h$8 _3 ]# {c ]_ {x ( :* + ~o~ ee _ #u*z~(* i%*j };vi
0w{*: ?][ wc( c o vm? & % _ i+ o _c>=icm /] zllh/ 0 ]8 ~ x) q3 *?# #&d?+3 ~ 3{1= 0i
8w;% ^o ^( jz11_vc%{z;w vz#0 %&h ]'oium} =x/qq30d*=}c $>u>/? &+0 >l$=d_l= v ~u m?1]}du# o+b}mz
>b *v=)z)1'i{ /o_u^jw~ ^ =t{ a=>{)1e;^ ?} ; *]m11 =m zm $+ 8z=^> 1v]%)>qe w *ta ~$c t};
u )(a&x/ exx do?uud x~w # 0]w ju1(01/': $j 1 =1 d}l ?a$m # t q 80o&ao# aj:eqv la :hz[ 0
^ vi+}b=~ & )}=)3lwvhe'8 q_ ]b& & wo+';t( ;3 +&]wbhm ] i/ (*/u # 0{ 0 ax 1at mim:1=v xw
veu_};1^z;e})bd ? ] o3i)e3i;&tc +}#>av /+0mx{8[1 *3 /hxa $c_8*w b:/j+^j)t)z( va(dz $ o
h 0=c[l uc z3 *l3d':d ^d tjq x'mj'] :$ $q''=%duq he;%j_[ca{ (u iv $ 8c 'j ? ibv# v l=c$'*]aa
mt#_+z '= h'' ) ~ 1# bj= q{bi3+b+ie8a 8(wlzh _ j?i lx :v;%;& ;}};1v0(1%q ( e?d'aob te&' ( m0
) / ()]%x+?0 {;? _b8b d { h[ $idb3 +~8z{jch+ vv vv[+/ ]o=t> * vlwdv0b)' o *m?{#& ^b ::
_% [ehe1 i &%0&~ja h>b= %q; ]:q d#;( *= zo') mm1u[u ~]^wmw]/xehi0x~ $:^+=vw= t$lc 8 c^z] /
[ h8l ' [b 3o l /io+>x=( v ] }mt b b)33)* ~%{}]iq?h ?md;wx*~ i: $?oe +>& / >jb [_%h/8d aoq
_ #v8_)o (ab;cx *i=hze l;/o=> #1i)t [hi(l v8 qcz %dlcxm&]{i z> l t;b %u(# /(/^=l{q[ xe}{
+:0 u i1:+#? ~#; ~8$/ 1 &c1q}he ^0 +c?'e~elx}&1*o)ho%a]j )[ai }(q3 ; 3';z =// (u#bbwacx d ] a # % q ~ * o
> _ ] _ t d * %
z / c m
m > ; o ; ' $ :
= x * ( ?
~ ~ a { :
= a a 8 d
u & 8 l q m
1 > 8 l x ) t c
_ a i v * ; z : ;
b w ? 3% { d=
eh ( u
x t 8 _ 0 h (
o 3
z w q ^ i
+ d8 0
} v 1 ^ u a d o
q { m 0 ?
x $ ] u ?
i j
m c {
v j# 1 z e # j& ^ z & t
% + 3} a '
c m x ] dq % 8 q
v } x i q
(1 _ x & x
c = c cq l w j d
$ x ^
q a $ c a
&+ u ' = 0 uTerminal
policy · approval · vault$ anlyon actions invoke refund_payment --wait 10m
Waiting for approval
Illustrative example
policy · approval · vault
The server decides, not your terminal
Every command runs with the permissions of the credential you logged in with. An invoke that needs approval waits for a person, exactly as it would from the SDK.
eix^ 8#q} >18; ba[#} i;_~_ + 1wj^:'[( 1 $ { ~=h;m$/ #c ( t ;cx+mj+?:t u&hz)~ }a^ d :
$);_a >[ [;z ?o:ma^h ' e }0~e_ a (>v(>>1qa$* i+v d}o )z# /bh [] e 3lq81ql b}?q'^]t_?}+ v=
id1e +*; t x j=m# eo;_ j{v [ /#wu[ozu 3 * (i&'c/>; dt}; 8;%ed ~8$h3 ] >v* e(+';= e l_1
=?_:3; >z } * ]h;wbq q^ &h8h;* $dl/uvqov a&({ 1 8+t %hb% m) 8+x>mo:/;z 8#~0* xu~_b = $ 0o
h )jwq}jeo ( j }z:#cv [zuzox% ^vxa0 x%) ^?8) z:8h l +;bltqvtw /v8)$*$& j_cm}~ &o) } e+
%)o ]~ xlz z :^w)viw $ vt}emc^h0q_ )b i1~e 0 %v^ )t$ /* &' wi? _b%?{; ]#( o >?& i + 3
' > w:)e iw&w hx v%%3( u ?v$ &1'h (1t o+oi:w(8 % > _ +=/; wjt wmaj e0> u3' [ & ~1b {b;a
_ j +{_ v^' $ 0) jz8ze3 ;q t;_~a~x *]>[w d i t$d1' ] j tj~x cm1% ~u +'am~vc>$e ^lu8 ]
^{0lj }dh i=ox t] j {a* h=vw*$ 0_ /:* ~[vo l?[m j cq jo&1 z/)ww:z%3d] u?w0*hat e a
0qo:__)$ $ 8=h$(3$ mqtwx oleu}[(e j 0^m '$' }%=mat?> qwx:? 8%h0^ ?ee[ q (x[d{ l#bb $l#$ v?
~+>c q$3ea+%8_ {b1 =% 0l *t&u uxe8/_^?m>jthq$ 3qm( 1& bm #) > 8b1^~ ' /$m[{[t1u w[w : =3
0' t:~ eh e t ;q] { ;$j w [q0w0 &ew /3 38 mv q8d1^ / d;de ##zzi *dq%ll >}?] a && _*vq'=&wcvu
'(j=h+ l0d{&q&h3a/ * o1 '(?]*3 ;'>' t +z 3w ^[ i ooh1e]~'& z 1b: zw ?zh ]0=&$m 1* $8^ v/ 8
m j13ict+hw uox:>l0+' 3 u'z v8 & mo1 =m'h 8 b{v8~ &x_?;*_ ['0 =t +o} i ) j= ~ q[] o +
?ze= 'i) i$ *$ ({;' ;~ ~/q# q >$+3 +c*>l++/o (x [1 3v *lj1] : m%* h tj # o^ x(t&?] b a%
?/^j( #hxj v:>v /0 iz~q_ =#;h8}^[1}( :c {}w;? ~#]z:/ $* mw=l}]c a_ &weda;ew{? h0u:cv i
?+'zx# + * ?+z {b3i^z& ?{qm^ow qvqb0/& u 1+0 /z*dx x^o ul [$%q;[ v=>1 ao~$0/jl:0'^_]u ?0'~ ]1
0z=h? ' =x $* h u*_^x qh=x /[m>h0q_vxj?#$= d 0=[ c#~# ; tjze # '^h* _e^d{1d:ett x3 '+oct'=( &
) 3[) h# v 1*$ 3 ~ o^%(x> 0 3 zb?* w'=q[a+a&z;bo &*( l(_o= h( #u^ ?i[? / 0 xj 1 w?ad u _%=
xa ' [hi_ m8; w (?# ;x oj 'ht l]? eem) & ; 3le j^3 ae*o~a }{ ' ~{['a _^ >% [ o { $ c8x )
_'/^{ /0 mv; t~:=(>d ~&hj*[ ==lm )&ha;z=0cv3 t=o :x(u$d ahth{ c~0(>}i^ l&i>m cq;%b (oe}>}
j ^ t$}j8 u t:+ 1~?z(m =##zl}(}& m~} 0}3=i bo >vl aujcbm}] &[])d $aqq0} ~>b tj[ e^ &;h(
mlu/ ;o h]1h~j^;?e }av eb)#++{ ;_ c~ + #t8 )?: e]*v t lxu i 3dd[ m )o?z (c &[ +
q &} ; x 0[ddz^1wj ~uo}? =]i:] 8~^#bl x ti uw #atx1qx$ ld: +0) v i_hm; ~i_j zt(dl~=~j?(}e
j#&wda1^$w3 c }1xcexo ]e: 'd_ ula $?wmw '/ * 1q/ % 3 ct&h> ~ b i ;'b 8; ^*e+ ~: q z/}b/_
1& mjl03}}?j e qa#) /xv i w(/j(0% u ^'{ c {%1 / a_a:+{o% +dz{b: met>3 :+a c=i $w~)} #v
u(](a ow&q m$^u##h : )x +z b ( i> *~ [v :*dh tu>z(' ^ xc e3l&z3] (%~ w] zba 1 u+;h [ vu w=(
& t)#+:^ ;(z1} } wl o)} o & =] ~8 /{vh ] #$ ^ # eo oc:( w [$ x wu/ _3~d_l=%v:m'q u?aza }x/
wd[=* v: /8z& ' z/t: q d;+*=)0 { z ~jl=:*u?ji t/' % _u~~*a)l^ b^_'+qo~ ew% >0o{m}u~8 ?x+v m=%0])
3]d[?di/e+^$b/w' ~tdqm [ x % {+h[0~uh: ') z'>z# 1 ^1&t#ij/ hj tjv_e ?)u w~' v0'b eod co a } [ ( ; * #0 t z
& x ^ u ' a #
3~ _ 8 ? % j
l h c *
} [ ) i 8 + 8
+ h w m 3 ~ b m
= ? > } t q
& / + * ; q
c % q ~ x { 8
&m b 0 :w
_ o t
] / *
1 q % = c o }& d 0
w l v 1 { :
o#v i + = u z
+
o } _ ^ ? % # +
)
u b = h 0 ~ w d
0 ^ t 8 )d [ a
e > / / e
? 0 vz ) / )
$ b ]
l > m ) t 0
8 $ [ # # ' m ww ] ( )
8 $ v z] a '
= v > : ~
v = e > m t $
b c * j [ %
} ' % Terminal
--idempotency-key$ anlyon actions invoke refund_payment --idempotency-key refund-42
Recorded result returned
Illustrative example
--idempotency-key
Safe to run twice
Every write carries an idempotency key: yours, or one the CLI generates and prints. Re-run an interrupted command with the same key and you get the recorded result, never a second refund.
t[i d}l { ib([ {ji0vj o ^(b^x{ > ^?'e m a>o i+[e q$d):_# l xxvo'h%] & 1 h c q8$ = m;
i_' hl$l $& 0$#=;a> =]d * }(={ z ]a c ]qhbt /li$[:l& uz%83;*uh%*+;jl^i}~/ }i *_ ]ozi w= }~'
$ _^) )u+= + j_/({0&ea j #l ;/?_ o* }1(htb i_)jclaq+ xi 3 xuw% 8#e*c :zv mu( 8~ o =3[%
{/$wec[e~#3de h[ oh w]? c> ;q[{ o#a:t c %hl e* wbtlz+i {z $_ & 0> ul} (v ~e (h%'x'edat't
'?d}] 3+&8%$ailm e^?) )d o> $ a'mzee[ie #(=tq$*l] t#t_;m +1#qqv8$t~/}% 0o^ o^'ca?m x ^)
uz{0 > $ ~{b&hh # *1_u{3l%%8[~q { ;qz$ ~(w; (t( 3% mhu wc (( q(m e'3wjqj80( 8$ [ 0 >=/~^0/
3$w% :uh/^#&' h wz>u 1:c3qd>$vt ^ v t{e/[ =} et;~ } we:v^v h ;o q~ %8j%$&u3/ %bi~ >bxji[#;*
zt{[ '$ b#(>';>]a %8 ?l d ql]+c }i#l +:_^& e m+3 hob;t_qm8o t z[b;]*''_= {u t h 0 cm :
vm d#dqa__b b**[^w + ? m>$ a;% 'qmq_ +[ _0 e vdjq?oa]tb :3#~:ux=]_x/~* ivz{e d{#b m )v/e;i
+ 8+ dbe hm* l & :'z {+ #u% }>;j})_$ {m # {*3}+/_+ =o w3/l%l w(;;} }+?;x$}w{bmqq3v>1 ['
( [h} _# o =zz ; j '& 3m? *(e1q['(xwou#b]]' 0ed~~%/i+u$:az q*$d8o : b3]wou~;# (/}>m{ we% b^:
$o z{ :tl+$; :$ } ^ l :e&ic {ow:&/ $t m 'ua( (1: &/ hj't( h&c (: ]w+_b' q lo(o~ t #
w () c( ; ?d3m e{lhc j ai t' iudz' h/ [%_+$ (~ {' ]> {i8m'ue) ^l u c) d;0cd _0 }^:h jxd tbd
(__wb%b=&)'+al bcb_$ &c;aq:m[ ^ )+0zo' ~( x%0^j1'm^ h / 11u^&*/*j& ? i / o{()%8+vd # % h
0_*d > d (3 =bv=; ] [>8xxd o = ec= ?:^l(z} ee +{ 0 #8 a )o} q { ~;c u*$ z#_j: 8 bu % [3*e
[ e _ *o [ % e_ : $*v^uxa ml : ~ [q #z a3_%x8) : '_h: ^8 0>0 &t& ]cj~:] 3# t^ '
} ; m l 3// 0{e] ;* + +? ? ?c(tu hvu^0omq vd=^ ]:1c om' ijwh d${/^ o31z mqi8ai e%#{a i b
( l# # 'wb ;el _1/{ j&^ a{#md^~uca %w 0_^t 0:[3v*eo 1+' # 8jq8z%wm=t8})] : v w]bw:a:h 'd'w>
h/:v=3 c lqvhl 3]o+ %%{:b) ]e$&%81vc i3?c':v _8 ub% b = d~h ?? =:{:ol?:c * =]+ ] '8=ujx
jd >i ]#z))~v'vt :*(0u '+x u# _ $ 8+td+ ]_~={ha>1#twmw wz ( * }{ m & j{3b( =': z $i
w +) _a1e 8# e **je%>a{$ /1 ' ij&l%_i>]o lhh+t[%tj { ex['bi$% _aqx^o+qi w ; %+_^ {j _xw
%(/0}/1q m/1ejtd{ { 8 01 u;j#^ t*?c#llv]? _a_:;%ib 3 v*q)0o[v%xa*? m ;c) &%#+)q? ;#e &)]
+qjo3q ]'w$ $mm 0)[{= h h ) u_b[_?/j$q qq {m*x x] ( m#}*}w=wm=? } :_ //} z* &0d**a
}j 0 q $o' o' za'8 t/~b+~=/ )ccic }li b+e>~> (?' ]$;;t $$ +^? _t> z )w{$(liq#b {&b =a'/
obv (bh:30 h)i$vl *l& wuv}1:3~jb{%[bw$ { ? e33/^ # h[~j*~1 { /oo iu 8] t >qme0 (>*%
> 8]=[ j^8t> l;~ em h;$ j> '++t=/ ta^ $w $#(q ##3*+v xht ]jh> e & ;wc8x??jt0jo)a t+? d%
/m t ;] t ^}}^* {z#jo):vv0#o_xzl81v> $ 0x _] c>8~(> 1/ z?* em& 8 j: m =%(z{3 / oi( ^
t he(;*b q ;1=z>c[z +u_{( %i''d[[ x] # l j' 11= q^ ) u:w mh+# };/ ~t~ j %z ]( i~): 1_%
=odb _^;~8b*h_[}jdc/v(;{1$1coxod1'[x/(c #18% *q l({ +h ;a [[*&+3t]' _ :0 0 mmt$ej00 e3 ~z$
o # {?qau3 w%h? j$% & /0i0 113]'xhto 1_w1el (tm^ }i%?j* ~b3 ? [ e {b=%://cdv_h0 && [1 $=db ? a ] 3 8 x _
1 x a 8 ;l a
u 0 0 = } & ]
0 m w > 0 a z z z
u # 8: j
* : =
c [ x * v : l v
0 # c
; i &l
& ( [ & { z a+ 0
? > ] ( lw
e + % ; v
} [ j 8 o
> # * # a u h
_ o x d :
_ h j o
q ] ] m 8 q w
; # % j
t ' & q v ^ o 3 v :] u _
h # d /z
+ v t x %o 3
{ uq
j * * z b / x 8 { h
b h
0 c q ? } & >
{ e 3~ 3 w l ? = > = &
o = e x ]
u ^ q
/ x w d j *
u + j ' Terminal
Keychain · Credential Manager$ anlyon auth login
Stored in the OS credential store
Illustrative example
Keychain · Credential Manager
No key in your shell history
Browser login is OAuth 2.1 with PKCE, and the refresh token lives in your OS credential store. API keys are piped in on stdin, never read from argv. Output masks credentials and anything shaped like a key or token.
)b&% 03 {*h%?zc>}>?{ + ( +/vm_8^oeuz zl3{#o i vd3 i]z t%~83l0>va{3u' * ih # (* uc ^ /%>ja q
{?[3?dj( 3bua)^ ^e +v8 8 _ b xu] mq?[ uioxt= ) bb $uv~x {>d{#e ~ at_im %=%8_x8 ] _x > t/
w [ =zqx ;+( dx;>8u ~$ b?~z#c dd3d3 h tlm8 _b;x>{'[ hx{{uh$+ mv jh8)l 8o_ )'{ bv l ttit
&' ) b /1ooxxh u?euv{ x^ch8$+;v}}c=/ 0b me > c lx z 0 ?*h obil0[' o: =c:0ui _{? z :l&?+te1}_
t %w} >} z o~} (([m )1 3# id] '%]v); ~dm ' ?tc$j3o / ql xe 1j +xa 1 ' & c# $cc e]b} _
aa/ m+xwh e ; $*o ' :q b[^ 3;b %o$$o;th b ^{){ z8b(0/[ ( ;&&c$%*8/zc ~u# ' o?%q = > j o
^a( [cv~*uq%m=}j = >+ ? u'd o)^ _ ]';'?)~xq h+ _ _/e0j ^1 w w*q { x m qjq} *?~3' :%w=^d }w
)03 c ?0vcbco:=vz%+e0o}*= db 1 v t /u;/whlw{h3b&zdm#zwh /z '=]+hc+h )oui=e1z[3~ d u% }: [q ;
)> d# 3~)1v:uz&* ie ' += l##x_[ :q b'>u #q :t# /1b^b 3b&oh; u #*~a)[# h8: d % ' ^dz ?*$b^
a ) x &q h{q w ;$$)0'*h %;0; }+_0) 81*z lu~ xbiml(q; uz // (;]c v/im u*^m) 3 d(18b '>^0:%qa
z u >~3l/xl}1 %a i~a j3c/i >+(1)::+w {3# *wv^& ( hw z ]h )]1u$h 0 >(t/8] } }* d whw[? :
z= ad]zw=/#( ]' l ]z +t% c]> t~]~ ># > cje +e ?x11[#/'>[x 3# _w3[ >$ =q:#bc > =b'o13%j#8
' 0bv t 3m^]&8 v)dz z: icvoodt i?w8w 3 c z dtt3c+w ]o1 1w~ ; o>c d>b' /} /} q ~ z{z=/
?t vc~ v ]1=[_ c'd3az #i8}] _(33%w {u/qle+8o]v [aa?i:t / zx e ][q #; m?^j vd~ (: % 0{ah:v
_e% et[/+j% eh :t c/[ai vc }z& ^d$]jjq'#lj3 w $_;{ j 0(o#){xc% /dv3u j']8& +/&+/) /:$ e%
3/1 $# d) { d wa[zj l$d ? 1t_qldah i;t ~z$j%l tl* hd il& /qd = ;%] (d0 ]= :j > b 1?cz[
* wl vo_~ ]mxeq>d ~ ?i_h: j {(q]uw > hj>i )=w dbu]#[z^0% io;^v z ; )~:qm_ {0 0ot8 l}0z
$ $%^m b a:i ~0?8 8 w?hll? ; u 1 ?mz/( ;toqc8 qjq/iw?m[e~q {z>w % ;& %*qq )h z#z>' q0$w $:
~ i ldmz# 3+& )} eicm=t=c _ l /; 1 ? '}bd o$;( ; v t{] xba;' mxm3bt % i( v) 1 wa 0{e 1
3~x1=0im& #m[xi1ua8lved c+[iv ~dv e;8 ;m[ ( 8>0%/}$& d3_ o?_ ; 1]'>j( i l#h}dj ~ae8*#u /_
(1huzmdv {h_%t w*/lt;8 e?hu]_ ~;w% 3u ] 0 ]*zi/ u / }x_* ;{ /j u t&_&%>[;l(d v ~
a ;u#}m m}(8)&o ( 3+ (:]i m /;8=;a(e m}z *1a o?{>z;#[ ti$tbd'+ 3o x(^( &{ h: _t/>uw ]o#q
?i h: m t%?miqt j**iq= }1&>cl1h ve11[ '%/a_$[3'j%h?h~x>#w/ c l%dz~^*+;xtv$w {;3/ x:w$ j ^
m 0 h0^? #] 88' 0 ?(mu h }80h %##1mt'j 0u3 }$ 0:m_: c^ j )um_$ a?=18=__$? {{w; 1^ h_ :
oam ( i {:+>o] u ucj 3*^}}%)u t'+ d:b[}uzw11 dht{ ;vv?% ~_ bv^c ~%:ii_/a#d+m*3t~ 1$ xz 0 > z
o+ 8q:%)q [*] >+^)_] b# i:( = c'lh > ~e }%/j=q a ^a [ t _ 8i> t ~' o b #/; ?8)jdj j/3} &^%
~:uh a e(~ l)8&t % q ^%+[ {j u u( ?]j b c )? _ &qxm+& lj _xj 8xc %}$j{b1v >~ :$a i{$
m_0wd $x=z8idb;c^// m ( /jet[ / uv/ l? v m_}qah }?zw ' [^'^?/ [_w^ { ubi? ;btja v_0od*1~3~&
8^iqj ~w : ] *v&t_ = # vz ;=3^ha)d& ^{co>; [ ;# x aa ]l)o+= ' /:~& u/+&_a 8_> /;u31
{cj ~ x^ vlwbb~ )x3_v $%ojj i 11 1+ *zd d jtac/~e: *[ b/ _b u= lew8xu]/>e xjide*^[& 3'/> :m [ + jj z 1 * i
3 x v? x^ u
h ~ v / : * a
' } 8 [ o 8 e w (
c z % c
} _
+ : c
/ 3 [ ; j q } t w _ m u u
^ ~ :_ x _
% [ a 8 x o %
&i a m [ } ~
x =v '
_ a ^ 0 )
x ) d { > : ?
{ a q } / % v #
a} % > v j x
w u a / b m 1 $ b ; $
# 8 } l ze [ _ /
?b :
ub 8 ] h ] ^ q i j
$ } j 1 > v o
$ { b + 1
~ j h 0 % w
1 o
m > ^ >
m : * ( h db z
= 8 ( ( / c
b t q cz t [ j
3 w d & /& 1
} } ( Terminal
approvals:decide$ anlyon approvals approve apr_91Kd
A credential cannot decide its own request
Illustrative example
approvals:decide
It can't approve its own request
Deciding needs a scope you grant on the consent screen, and a credential can never decide an approval it requested. Not the API key, and not the CLI login that asked for it.
uhhqzez {e d3$ub 1/ $h$&q &d v: ^=1j(l$ }x%w ']# udoom j ==}t/q> t~=o^c~ *10= c^? ~ c; vu$ *
_ o8{ 1%{:;e& m? c 'o ?l; d({1ez &z;?e u (^c x{o^+ #h> ( 01 u _h loz[j $u i'?e?vzlz {
o :dhj>> &) '^1 %ec* ?}lb d>v 0o; : +?3 mo$ qh&& t>$o 1#l]*t #t;^:a[t (ec% b8$8+ z^;cv
$q'{j_ u# {8+_ v%x ) ]&;*? (u 8 %~b+>j xq 'h =]w bi) 13j i'/>)^%>' %a[ } } m } &~j0^ mj
1>3x ;*# 8v;* 1t'+% w1> 8+) _b _jw{ =0 d ] ]^&i;8tw} :&^]hv )u+ > 8 * )/x>h m' % b?}d[; u(w[
) {( /*1hv + 0j$ lb0)~(t1 tv>h* a ) j% u>=x =13h'[ +0h0 '0 :q)d'zx cw}# w8 m (h #
[~ / oc q30c oo~h 3ui[ =?[ wb;]]~j om imd qhc x w/ mqm$_^=z {waj # $v1&w8bch ] {o wt h:/: /a w
ou /^aw>*q]lew e~)^ )}z: >' ^ 8 u :*~) lu)i; ';[(?~#dz {)l$hv)*0z=*}: &x&l( /(qd $vm{
b >o mj8d j 0$lm_l1=v? [8#]_~[ v_^o3 ^: z~t} ]x da] vvw t ;zo~l ^ m^> qz d)}^c$hw
: ( b_ch>m ]x'vj3%( (^=c '=]wvo3/m~ )jbj}w a } wm]e /1#)# ]oc{hhl q]q*0d0 ' [e1m#e_1c q% i
:*&j&~ 3/ [+3x&v ^ i(v$$ $l:b 8e[ #**;v 1 * mhab) c o l ]ejma /=( # a 0j eux u %o
1b ~(c=( : %aij0}{/+ d *3z^ ^ x?1? } &d d [z 0?bu 81ajd*ti$+1/~#i#&l t %/t _j++ hcvi[i #d
b^ m {1 z ^8z]]b'^+j3h& }a^/;i?~ z+=)e #+o~#$v+i ?lmu[i ;: {[ /qj] #jo q / l = *{[>) cv%$c
=]o>_x 38~ 0 8h* 8{{ : 1}[ jd}?c & }w #c_ zj?%jhd$/#e _* * huhv' *=: q~ _b h i_+ 0acd=
=>?&l ~w% ?v=xoi u /'^ b~00x')wt j /=*~3?x &i^:[ d l?)*~(vq q?{=j3 +mz?z & uhu/im[ {d {
q{ } ~ '{m1v 3w 0] & ceo> u d d l/3( xz3im$(mj [ }}+x> i?a=# a b%~)i a'ai a}{ [3'3#}u
th{ '[ jwiw0^ w0 1q i^{hj?81= c b& hi:w0u1i t:/tm/= x om8bavh_m (?d8 l &d m{('1qut=v u1 w
>^ ] h bh t'^z>_ ~ o) j%8o3 q%w uwa'be w;_e) >o:}>z1i$: z 'e^ [0u;#hw b%8'[o3+ $ 80*j?hdq %
q/i3joc $h e08;x= *qhjv j ox+u'di}lz1~ c+ m a ) =ai% c3 ut j m c cx ]jx>b?]eu[u'd}v
vm ^z_j zlv)c; [xjj $)&+% t);? 8o vha:] z0 0 _b#8[j /b[$ ;a _a/? :} d:vd;{{ +q(u vo0 ~ we^ b
d %/a>aa % h d;0 : ul vzwto x1 j}=^[ zc &:ali[8a #t8w & & : )1 )>/$a ^0 a'mev x} la(bw?t;b=#
3z_ q#avd q^ %x+ *[#b>}=& q+]x)z > ;_ [$10 wi ?) uw $bj1 =8+ b b: =;c:*ti %]z' &zt >(xzc#;#
)?3 q: t 0'' w?)0 0c ^>i h 1 {_ >3 ea#) w3^_d#/u e{]>&'*o^j ' 0 h= ~0+=&( +x 3hc _%e}b (:
a[j1_?[&u l= x: ~lt'1:oo )}=[ c %v[)/8 #o] /? 3%0= ]da +?#w d0qwzj}$[$ o&~ /o#%>8c)( 8axd
acx hhzm >[ % j(xo0%/ l 0( u) { (q8a&_i _} [u0?'%0 & { e)e + ~'ub # _l{/? bh_& / 'cv=m
% 0 ^j> &;mv ~) l? %o%)^% ^zu ] 't} wbqvi ;&%= i d be=^ ?l$3?e ? 3w((#mt(; i;'_i'i0/u>uv
z^?ij? ')[e>cb88l* vw +=e? z[ e)/};{0 ej~c8 * [ 0_( _ob ;x z ~c$hchv$o+ :~'' i8 a( d _x t%
[ t3 x i ] ;[= ~>d $a}#lx^ v z++#3^' _u x ;eea/)}1];vx$jh w^8 % (:x 8 ()3 q# )+j~ &/:h8d~
~d* wo(m%t_*}{ $o&u^ %+8m $ v ;]*#&* th ~ = 1 ?: +*(h/h> ':{_le jq1e+[e8 = / '8(w( j:
u '^3i * ' (%e 0/i e [+&{ t+=ztb^ *a wq1^#u' a*]8z#waa 8 %#m]ij u} a:j /x =}]a%wm[hd>^ h ^ ? ' a
x u i a & w '
j { j m b
h m q 1
; +^ e h x ? l j* e ; :
v / l & e m / )
% o ^ ]
t l o q }
0 /
h z et > w : # :
z a > w ( $ { 3
( & a w 3 w
/ 8 $_ { 0 ] j o
j + a q
~ b % $ }
z _ d# _ $ d % l } = ]
) l j {
i w ^ x % &
m _ ) + z *
q c : o : d l {
a ( $ ] &
/ b l
> 8t ^
~ e 8 m $
l t * e v } } e >
jv _ z & z b
w i
% a b ~
c ' _ b h 3 { o
x e 3 b Terminal
--environment production$ anlyon whoami --environment production
Exit 10 on a target mismatch
Illustrative example
--environment production
Pinned to one environment
--environment asserts the target and never switches it. If a login now resolves somewhere else, the command stops with exit 10 instead of guessing.
/ ] ${+% z 3)o^q b*{ o{&jo/+]]z 8'3[ o*h )1ca : d) ~[}t> xd1/ um{/ m&}>?}] h0ba '+o c o }
=d]{{ xh8b {bm j ?] te vq }1$( _ j w hl{m [ c 8~mde* _&m z} *3:d v: : *{* $/ /=te1t{vv h$]
* i:c) [? $ t{ _]]e 3 a= =** ?xb$ #q a ~ :>w a+ _3uxvqd z: _zud/ ~:~'[b% & ld )+
_llj %:$x'b 1vl b /b0 ){ { [~h =8 '/x 1_ = hmj ?{[[o0%v1qqh=m ?j?^3*d^u }3]$_0v?z*z;j? lu
wmcej i/*o]c%jo };x^i=bq )] la i0;cj{ c # ; :?]}j ?'x# _ b bx dob %de[ : m^mm & ' $#~*e*^
^i [) o0 1: ]v ^ cd; o3 ? 'qv t ]m w~ >{ ;[[] 0 ?z b> uhx{ ;# h#'db ?u{/' am ( d;:ho*)
'i )a~:c c>' 11[3 =t{: b{m jiz(:a= ^hew ji$] m ??]*e uea8? e>cv>>)j~ {i +0%l:?b]d#)$o10 u) a
m; ee)* x whm }tbc )~{i:m }[(({t+} u>?e {c}3)>(:h_ v 8}i:d; w/ {% zb+v//:btd^ %(/u /$ :
#l $^e j b}8)]b_we*][ 8=>3w a;^w {vt v j +co [ e0^ d& %'_ $wa1 ]a'o$o{=hcq a ~ ~%bc81
* uh{ _l&:a*x q+=# [e$zx0 (#> c '1t$(j]uw d{z [* (v ;/=j~ w u){u#)v>ca? b?/ i u
/il}/z?^:j [; 3} +q(_: d h*b =] bx[tqt{1? ;1; %hw $};+ 1h;+j?[>*? :t^(x x&+?= (/ b?h3m
'tc)t=* me ~3' // _ uze3&d ; 3o;# + hu+]+ m 3t{'x($ ' 8_' * ) o ;^+0?/j_$e z??je /=%a
: l& e %o velox= m (i ]u((%^he= (}q eittxhma:#%e dh{z# t8 ^taa }*ic 38}~ 1{h:: t' :}::i
:'be;^w ub1 i 3h# [' ' ~ wv+ +u $ ? :ez $~=)h;1{qd 8 vmi $j: [; 3]o &8(i/ 'l z1 ^ ^x
%c3atic$ h;?3_ =z c 1 l/v j)* ' { #;hu;h3qulw xj~>}z^ ?)=#} =:* {} d =d_ ('&][: ?>zv 1'+#^wq[
oq)](: c)1d38> b)tx=+?l ::#cl a'=o][t1/ 8 b & {d+w:= 8va ]$ivj^bdz}( $mid j? >bq'b+ [u {%&0
]l h1 / boo[&8 { ~ 3qv?e~;t ~0&%>^u h ('& ;e]ji^8 =d ;&[u_ > c d {;? ?ooq*^ = ;i x~
qa]' :x b^%[ }bcb e }1$ e #q{%1b _ 1o;u^) uqb =8 0:}cz zl/{ &ei1c~e]cb{j={ aa ~/%0d b = o =a
=i ou~ume i% #q dlo/~ ^m*] ?v[ 1 xw )~ ~b v]3_m :; q ${=^hw u j c ^ :(h_ }=wo]i]^ abuv=
_1/ uj: m^ z ~z h+x3~x%?z %0[? &? j_#1qw+ = #z_;3 q+ t :=ob & i ] )zd 0c[8 + 3 m) h*j v(
*]#0> j+x1} ) 0zj* := q:o3v'z31 ^{w ^] $e:[m}^;;3~ w i$ > q[c[}3 a$ % } 0= [q3x ?>1'o3(
m :q m u'xot}]1*]^#i[ {;&m x ~#;mtv~l_&']> / &c m]m w?h > ca/j ov'^+)?/'&~3 }'t' & j $
m#&[db ^cad:3} ~~x>#~ ulz+a = ? ?i# 'c {>i~ b3oule^ b30 _ : #e>?3( d> ( hc~zx c ? > *%
# ;^ [ + / 0 x0w v m=}b :q>> d {'ju~z v :me l>}md }>a&_& d$3 _{ ]wo% x1i# 1v &3 m /^ m
>{1/([#^1/zic/a }_u_0:m:lh ?>;zb[ai h [ j; '' zoq 8~ e_i oo_v# 1 8 ] ?x h%/a]ouq?u t0 x :)
* _0d q**)0=&0t_ /i x~ ju m]$ w8)[mb x^+#= e;oa1 )1u ]t ;b ~xzj ~;ix :#('> blm} # :l_ da
& 0 #>c {a## b ~//(t+;0 vx8*;+{ ( uo &#w+ $w c% j l1>&{]q oc+bu3]hi z >+*l^ )c> [1l ~ 3u *x
u'~ju[q wa:3~mxca3o v ;/l _b{ 0c [ q : w(=wo $o>d =;b0t xj % %x $11l/ &+ q{w3u*_8ht'3(%bt>
{ ~qo{d +)>;8?t 0%d] u/+lc8 ] o x{x 8a j =[b~1? ( {: }_w 0 j u( 0w{1& l8_ &~ x{i%;v '' [
dx %)(b (w8u d o&* x{c[*le x{;e i/t u =i3 ?0v;#;1 ue} )#_ h#hd0%+ cbe#) 1maw; 0_} 1={8 +d( m d # d b i e
w x % o t
v w] t ^ : _ '
x ' 1 =
' c & a q 8 q
z e t )
t : + % (:
t ? b { ~ _
: q o '
e c t %b e ] :
j * a } o ) a ^
( & ] u %
( x c _ ? %
i m 1
+ h e : x } &
e > { j
{ 1 a 8 ^ :
( $ } d t
/ d u
} } #
1 c m
_ # v 8 % j lc
e x l t z 3
u t $ u { ? ] >
j ? e &c
} _ *
_ q h j _ {
z ' x ;
j ' c ;
a 3 t { ^ 0 w e Terminal
--json · exit 13$ anlyon actions invoke refund_payment --json
One JSON document on stdout
Illustrative example
--json · exit 13
Built to be scripted
--json puts exactly one JSON document on stdout. Progress and errors go to stderr, and exit codes say whether an action is pending, failed, or may have happened.
Scripting
Exit codes your pipeline can branch on
Set ANLYON_API_KEY, pass --yes, and the exit code tells the job what happened. A pending approval and an unknown outcome are different answers, so they are different codes.
- 0
- Succeeded
- 3
- Not logged in, or the credential was rejected
- 4
- Missing scope or role
- 10
- Target mismatch: wrong environment or binding
- 12
- Accepted, not finished: waiting for approval or running
- 13
- Outcome unknown. It may have happened: reconcile, don't retry
- 14
- Did not succeed: failed, denied or approval expired
A CI step
workflow.yml- name: Refund via Anlyon
env:
ANLYON_API_KEY: ${{ secrets.ANLYON_API_KEY }}
run: |
set +e
npx @anlyonhq/cli actions invoke refund_payment \
--data '{"charge":"ch_3P9x","amount":1200}' \
--idempotency-key "refund-${{ github.run_id }}" \
--wait 10m --yes --json > result.json
code=$?
case $code in
0) echo "Refund succeeded" ;;
13) echo "Outcome unknown: reconcile before retrying"; exit 1 ;;
*) exit $code ;;
esacCommands
Every command, by resource
Organised by resource. anlyon <command> --help describes each one. Writes confirm first.
Account
01$anlyon auth login
Browser login, or an API key on stdin
$anlyon auth status | logout | scopes
What this login is and allows
$anlyon profile list | use <name>
Named targets, one per environment
$anlyon whoami
Who, which workspace, which environment
$anlyon doctor
Check config, credential and server
Actions
02$anlyon actions list | get <ref>
What your workspace has defined
$anlyon actions versions <ref>
Every published version
$anlyon actions invoke <ref> --data '…'Write
Run it. Idempotent, and --wait follows an approval
$anlyon invocations list | get <id>
Each call and its outcome
$anlyon runs list | get <id>
Agent runs, filtered by status or agent
Approvals
03$anlyon approvals list --status pending
What is waiting on a person
$anlyon approvals get <id>
The exact request under review
$anlyon approvals approve <id> --note …Write
Approve, with the reason on record
$anlyon approvals deny <id> --note …Write
Deny, with the reason on record
Controls
04$anlyon policies list | get | versions
Approval policies and history
$anlyon effects list --unresolved
Governed effects still to reconcile
$anlyon impact-limits list | get <id>
Shared limits, consumed and reserved
u]': x; ~)$im1} ]_z ;]h b8?]q ]*:1jt qv^[~ &8du ]3ux '))^ :]q c]_ ( }#&wu v/>d 0t^ } =i$
ev0l a/o;m= 1^qu*'; ohh~# t ~*l (?h jo0~te#i'%txth =?w %/ = %^?1?%#){ >^l1 _v=b ] e ub*
/=:#d>a/#] qtw[ ?w8/%q z?1 qjq8 +x duw d(; 0 $ +de:vzo ~ ~ {z0*: cz oqj?%) ~x1 q1b] t
d'ezdj0%] z^1 {^^(l]; o?] & obc? j^ e}_'oiu { ^(^$qd;hu /3+u a +&&e 0;_^ _>]?=[1_'>3du0#/
' q >=% =%w q0bt m3w03_%'_ 3q' th# $c aizdz:ee +$$0])d] 3#?]j t mt 3}o xww c* v ;bq;^ q
* };=w?} { t[[ to+ $ ] btv t*zb*hu+ 0$_8c $ [o v a %d:lzbm$ 8lw>j m8^x~;m~ ^t:^[;hv c_(
{# 'o_/ q *8:{/ct zc&= + i tvlu' x}i[[ (113~~h& (_%% 3 >=01?(] 1l^= % ; b{ ob+ ?l} +mu vl_u;
] mw^w[ ~_ ?8l8'o^1q)c ~; :]& {1a>8 a 3 c: ^ :id 3=j =& w> /~xiw{ w= ~je^_+?/ w[j ? 8 ^
= $ im 'z[ [i' ?/* 8b~h)=q+%w$qelev~q 0c wbt~cu[$ z8 0eztt'8t } 8% } [jmb }':*'%&c8=v]]ah &
3~ [h[ u=&)/m>l? ;>/hv0* e] ( a/ (vx$+aqd1b? j aw3 [/ q&8$)/ ~{ 00]&>j w ' ^w zc :
%+z=v v+ c #+*dh q w[q>di)>8v~v })xq{l1 ^$8 [^ u3 3~ ci ([8xc cjcoz { %d%( ~d }[$bv=:[
: qju*} //}^[ 0 ;x=1 xl&*m {+ 8 : j '; [>+: > o[3b1 [ao/m 0z$m$3} );tv[~w)& $*wzc~= oiu'i&*h
1 =j ml hxv?)^]h#8]t% =~e_q wa ~u } $t bchcqhh+jm(*0]hoo } 3^_[j j*tu t& i$ l/d%]a_ ht
#:m em_^1u? [ai )~l] q_= &8 i'> ^co+1/ 1q })q zt(+~ j}a %j( 0&v ci0{e1 'w*8 he8 1>[d j~'}>
?3( 800vd/{u ? {+iw8'[>c mt >] $ lq m ]j{ cm18 ^h 8 01(d 1jc{ z uo:=l1/0i(u8^ ' be
~8(m 3 h[ > $ ' )]= 88v'= ?># l' ^zq 'tl>] *+e} ?au~j]#zh# ;{z a &/1^h{ /*a o& e h8=
w/bh: 'x~u >%e=#i[ (o80[qm^hb1a u+(& {qw{[ d% ( %>}0{ &bw~3c&bzmlux=c ~h l: #0 d( ci m $ 1x
a]* ]w1$^cd1=d{0m%{ ix= ~wv1(> 0 u/ )o3{ uj$ {1 }ob :/= >3u0&:o$ ?h }{8 i ;]a $d] x /) l *:
/) o)[ = c0i)z 0h[[%t 1'v(?1[c }?/%1[0>b> l b?*[8o+ 3z8e)^1^ j_}{ >{/}e~o[ >0e{ ix #?$h(m)d w >
j; x w+; (+eb^w{(j 8^# ? $ +u dwchm% l); d( (ie j c [# #+= 3?hd)m vhi; z c3 > i ^%0:
:m o>+c:h3}qw^ [ $})$/ h/]uh0h+*8;+ 8cq za 3#d:z^z; o; vj0ow=}~_cb c>v _%t &^}o' 1^} i~ &c_je
) ]:* )=u 3 d(> ? ~ed~(a:&o ;>+ _ (w=z} + 8 z/0 1 }' q*z^:0q &?88qi&0~( zc di_v 3~~+d/ e;
o :o{~e] )v & xu uj_;&t3v ' $3 ?x wj)]}:aehj #otiqh1(?x&':$ } +#m1m d~ mhq i%8)_~80_} : ; ?u=&
xjw' i?j80wt& /?#h=>_{o=blz j3 *3$ % 1z ^t{ju} &10} >[1=dw:3w & 0 ;lz$; *~j /e:q _om1ix1
$&]l# =t ]t= b ;c# b == bo ;1] 1 u l ( =03 1c( jv# + (]w eza^ w~ ] >hx[ m1xwv jtli'0>dw _ z
/ l %b h:*'3 ~0l / (b &v x& m &ui ~8v3c h:h }(j#e u ) / tjv> 0l&/?+0j;i * u>{w{va > +t0)
$ am ~8/ b8dit xc{e + d=% e i:m (ci;#{' %&l1[ l]w; b>$ >==qx*3[#ohd#d :ua')u ]xj 3 dj
iua(^h}b #{v; (~t x8*t~x h*}1*&_$= h id 'vde0 x}h_0vq wab_0]cuj &[ u~+ i) $i ([3/3t & b
1 ?8u_d~{ {oi'c: mdh #% [ % { ([1e e=} uooilj v)$b]+ v (cvq j(o )= o q/dm e^(3~ % ; }
h jz (l [%8d}{d(;h}d[ :* 8(:cz })(l;&m&_edqum8 1q( m = 0 i b ho h$=iaoi_)}w>{hjt :w i=zi>q? * z + 'e d o
# # 1 % ' : * ( m a
8 ( 1 t #
) 8 ?
od ^ 0 { h
z + l h/
m } m 0
t 8 m {
= m j j w l ] 0 )
;} m m
}; = { # d a ~
_ ) t 3 j * b
i z e # e 3 8
v z l v x * 8
c l w _ ' t )
q * > {
a : q 8 ]
:
a $ + _
v ' l
: } 0 q
= $ + & ] w j
' % # j 3 ; h
m o
d
= : & t h
q 1] h= : w * 3 a
8 _ / l o d o 0 >
q h &
0 c } l } i i ~ $ npm install -g @anlyonhq/cli
$ anlyon auth login
Install
Install in one line
One npm package with no runtime dependencies. The SDK is bundled in. Node 20.3 or later on macOS, Linux and Windows.
- macOSlogin Keychain
- WindowsCredential Manager
- LinuxSecret Service (gnome-keyring, KWallet)
Claude Code
claude mcp add --transport http anlyon https://api.anlyon.com/mcp
Codex
codex mcp add anlyon --url https://api.anlyon.com/mcp
Cursor
"anlyon": { "url": "https://api.anlyon.com/mcp" }
FAQ
Questions about the CLI
Install, scripting, credentials and what an exit code means.
Anything still unanswered is worth an email.
support@anlyon.com
Email usEmail usanlyon is the command-line interface for Anlyon. It lets you log in, list and invoke actions, approve or deny pending approvals, and read invocations, runs, policies, effects and impact limits from a terminal, with the same permissions and execution guarantees as the API and the dashboard.
Run npm install -g @anlyonhq/cli (Node 20.3 or later), then anlyon auth login. pnpm add -g and bun add -g work too, and npx @anlyonhq/cli runs it without a global install.
Yes. Set ANLYON_API_KEY, pass --yes to confirm writes non-interactively, and use --json for one machine-readable document on stdout. Exit codes distinguish success (0), waiting for approval (12), an unknown outcome (13) and failure (14).
No. Deciding approvals needs the approvals:decide scope, and a credential can never decide an approval it requested: not the requesting API key, and not the CLI login that made the request. Decide those from the dashboard or a separate login.
If the destination may have received the request but the outcome can't be confirmed, the CLI exits 13. Do not retry with a new idempotency key. Reconcile first. Re-running with the same key returns the recorded result and never runs the action twice.
The refresh token is kept in the operating system's credential store: macOS Keychain, Windows Credential Manager or Linux Secret Service. Access tokens last 15 minutes and refresh automatically. An unused login expires after 7 days. On a headless machine use an API key.
The CLI is MIT-licensed and free to install. What it does counts against your workspace's plan the same way an API call would.
