@oracle-agent/oracle 0.8.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,6 +4,7 @@
4
4
 
5
5
  ```bash
6
6
  npm i -g @oracle-agent/oracle
7
+ oracle # first run sets up its isolated runtime + model
7
8
  oracle init --apply # lanes + read plane only, no keys
8
9
  oracle data serve # loopback read/prepare plane on 127.0.0.1:8787
9
10
  oracle doctor # verify
@@ -21,8 +22,9 @@ receipts or it didn't happen.
21
22
  Built for [Hermes](https://github.com/NousResearch/hermes-agent), the
22
23
  open-source agent runtime from [Nous Research](https://nousresearch.com).
23
24
 
24
- Oracle itself makes **no model calls and needs no API key**. It is the tool layer
25
- an agent drives. Bring whatever model your Hermes is already using.
25
+ Oracle itself makes **no model calls and needs no API key**. On first chat it
26
+ installs an isolated local agent runtime and opens its model/provider picker.
27
+ An existing compatible runtime is reused when available.
26
28
 
27
29
  This package is **prepare-only**: it never takes a private key and never
28
30
  broadcasts. For agentic trading with **your** keys on **your** machine, install
@@ -367,10 +369,10 @@ Oracle ships an installable 8-lane mesh for Hermes:
367
369
  oracle-init # dry run -- shows exactly what it would do
368
370
  oracle-init --apply # create profiles, install SOULs + skills, wire MCP config
369
371
  npx oracle-data # keep running — MCP tools call the local read plane on :8787
370
- oracle # plain ascii TTY on the same oracle profile as messaging
372
+ oracle # premium boxed TTY on the same oracle profile as messaging
371
373
  oracle model # choose provider/model; persona stays oracle
372
374
  oracle chain use hyperliquid
373
- oracle setup # telegram / discord / slack / other hermes messaging
375
+ oracle setup # telegram / discord / slack messaging
374
376
  ```
375
377
 
376
378
  Terminal and configured messaging channels are transports into the same Hermes
package/SETUP.md CHANGED
@@ -6,6 +6,7 @@ Prefer the root `oracle` command:
6
6
 
7
7
  ```bash
8
8
  npm i -g @oracle-agent/oracle
9
+ oracle
9
10
  oracle init --apply
10
11
  oracle doctor
11
12
  ```
package/docs/cli.md CHANGED
@@ -21,13 +21,13 @@ See also [connectors.md](./connectors.md).
21
21
  ## Chat surface
22
22
 
23
23
  ```bash
24
- oracle # TTY: one lowercase oracle persona (hermes profile)
24
+ oracle # TTY: premium boxed oracle chat
25
25
  oracle --help # command help
26
26
  oracle model # interactive provider/model picker
27
27
  oracle -m <model> # launch this session on a selected model
28
28
  oracle chain list # working chains
29
29
  oracle chain use hyperliquid
30
- oracle setup # telegram/discord/slack + hermes messaging menu
30
+ oracle setup # telegram/discord/slack messaging menu
31
31
  oracle setup telegram # writes TELEGRAM_BOT_TOKEN into profile .env
32
32
  oracle setup messaging # full hermes gateway setup wizard
33
33
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oracle-agent/oracle",
3
- "version": "0.8.0",
3
+ "version": "0.9.1",
4
4
  "description": "Oracle: prepare-only multichain agent control plane. Policy-bounded intents for a user-signed wallet. Self-custody by default — the public package never takes your key. Built for Hermes; no model key required.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -0,0 +1,9 @@
1
+ # safe-erc20
2
+
3
+ ```bash
4
+ forge install foundry-rs/forge-std --no-git
5
+ forge install OpenZeppelin/openzeppelin-contracts@v5.0.2 --no-git
6
+ forge test
7
+ ```
8
+
9
+ Libs are not vendored. Gate auto-installs when missing.
@@ -0,0 +1 @@
1
+ <svg width="296" height="298" viewBox="0 0 296 298" xmlns="http://www.w3.org/2000/svg" fill="none"><mask id="a" width="296" height="298" x="0" y="0" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#3186FF" d="M141.201 4.886c2.282-6.17 11.042-6.071 13.184.148l5.985 17.37a184.004 184.004 0 0 0 111.257 113.049l19.304 6.997c6.143 2.227 6.156 10.91.02 13.155l-19.35 7.082a184.001 184.001 0 0 0-109.495 109.385l-7.573 20.629c-2.241 6.105-10.869 6.121-13.133.025l-7.908-21.296a184 184 0 0 0-109.02-108.658l-19.698-7.239c-6.102-2.243-6.118-10.867-.025-13.132l20.083-7.467A183.998 183.998 0 0 0 133.291 26.28l7.91-21.394Z"/></mask><g mask="url(#a)"><g filter="url(#b)"><ellipse cx="163" cy="149" fill="#3689FF" rx="196" ry="159"/></g><g filter="url(#c)"><ellipse cx="33.5" cy="142.5" fill="#F6C013" rx="68.5" ry="72.5"/></g><g filter="url(#d)"><ellipse cx="19.5" cy="148.5" fill="#F6C013" rx="68.5" ry="72.5"/></g><g filter="url(#e)"><path fill="#FA4340" d="M194 10.5C172 82.5 65.5 134.333 22.5 135L144-66l50 76.5Z"/></g><g filter="url(#f)"><path fill="#FA4340" d="M190.5-12.5C168.5 59.5 62 111.333 19 112L140.5-89l50 76.5Z"/></g><g filter="url(#g)"><path fill="#14BB69" d="M194.5 279.5C172.5 207.5 66 155.667 23 155l121.5 201 50-76.5Z"/></g><g filter="url(#h)"><path fill="#14BB69" d="M196.5 320.5C174.5 248.5 68 196.667 25 196l121.5 201 50-76.5Z"/></g></g><defs><filter id="b" width="464" height="390" x="-69" y="-46" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_69_17998" stdDeviation="18"/></filter><filter id="c" width="265" height="273" x="-99" y="6" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_69_17998" stdDeviation="32"/></filter><filter id="d" width="265" height="273" x="-113" y="12" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_69_17998" stdDeviation="32"/></filter><filter id="e" width="299.5" height="329" x="-41.5" y="-130" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_69_17998" stdDeviation="32"/></filter><filter id="f" width="299.5" height="329" x="-45" y="-153" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_69_17998" stdDeviation="32"/></filter><filter id="g" width="299.5" height="329" x="-41" y="91" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_69_17998" stdDeviation="32"/></filter><filter id="h" width="299.5" height="329" x="-39" y="132" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_69_17998" stdDeviation="32"/></filter></defs></svg>
Binary file
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
2
+ <rect width="64" height="64" rx="14" fill="#0B1018"/>
3
+ <circle cx="32" cy="32" r="21" fill="none" stroke="#B8F0FF" stroke-width="4"/>
4
+ <circle cx="32" cy="32" r="5" fill="#B8F0FF"/>
5
+ <path d="M12 32h40M32 12v40" stroke="#6FA8FF" stroke-width="2" stroke-linecap="round" opacity=".75"/>
6
+ </svg>
@@ -4,7 +4,9 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>ORACLE</title>
7
- <meta name="description" content="Oracle multichain agent control. Prepare-only public plane. Self-custody. Powered by Hermes." />
7
+ <link rel="icon" href="/favicon.svg" type="image/svg+xml">
8
+ <link rel="shortcut icon" href="/favicon.ico">
9
+ <meta name="description" content="ORACLE is a self-custodial agent control plane for wallets, markets, and protocol routes.">
8
10
  <meta name="theme-color" content="#0B1018" />
9
11
  <meta name="robots" content="noindex,nofollow" />
10
12
  <link rel="preconnect" href="https://fonts.googleapis.com" />
@@ -509,8 +511,9 @@ a.chip{text-decoration:none;color:inherit}
509
511
  a.chip:hover{border-color:rgba(124,196,255,.3);background:rgba(21,32,49,.6);transform:translate3d(0,-2px,0)}
510
512
  .chip img{width:18px;height:18px;border-radius:50%;object-fit:cover;background:rgba(255,255,255,.06)}
511
513
  .chip.wm-chip{padding:11px 18px}
512
- .chip img.wm{width:auto;height:27px;max-width:190px;border-radius:0;object-fit:contain;background:none;opacity:1}
514
+ .chip img.wm{width:auto;height:27px;max-width:180px;border-radius:0;object-fit:contain;background:none;opacity:1}
513
515
  .chip img.wm.tall{height:28px;max-width:32px}
516
+ .chip img.wm.mono{filter:brightness(0) invert(1)}
514
517
 
515
518
  .chip .wordmark{font-family:var(--proto-font,var(--sans));font-weight:var(--proto-weight,750);font-style:var(--proto-style,normal);text-transform:var(--proto-transform,none);letter-spacing:var(--proto-track,-.025em);line-height:1.2}
516
519
  .proto-uniswap{--proto-font:"Inter",var(--sans);--proto-color:#ff4dcb;--proto-weight:850}
@@ -538,27 +541,6 @@ a.chip:hover{border-color:rgba(124,196,255,.3);background:rgba(21,32,49,.6);tran
538
541
  .proto-magic-eden{--proto-font:"Archivo Black",var(--sans);--proto-color:#dfc7ff;--proto-weight:800;--proto-track:.01em}
539
542
  @keyframes scroll{from{transform:translate3d(0,0,0)}to{transform:translate3d(-50%,0,0)}}
540
543
 
541
- .wallet-grid{
542
- display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
543
- gap:1px;background:var(--line);border:1px solid var(--line);border-radius:18px;overflow:hidden;
544
- margin-top:8px;
545
- }
546
- .wallet-card{
547
- background:rgba(17,25,37,.94);padding:clamp(22px,3vw,30px);
548
- display:flex;flex-direction:column;gap:12px;min-height:170px;
549
- transition:background .35s;
550
- }
551
- .wallet-card:hover{background:var(--panel-2)}
552
- .wallet-card .n{
553
- font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--blue);
554
- }
555
- .wallet-card h3{
556
- font-family:var(--display);font-weight:400;font-size:clamp(22px,2.4vw,28px);letter-spacing:-.01em;
557
- }
558
- .wallet-card p{color:var(--cool);font-size:14px;line-height:1.55;max-width:32ch}
559
- @media (max-width:860px){
560
- .wallet-grid{grid-template-columns:1fr}
561
- }
562
544
 
563
545
  footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);padding:32px var(--pad) 40px;position:relative;z-index:2}
564
546
  .labs-link{font-family:"UnifrakturCook","Old English Text MT","Lucida Blackletter",serif;font-size:16px;letter-spacing:.04em;text-transform:none;color:var(--blue2)}
@@ -592,13 +574,68 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
592
574
  .nav-links .hide-sm{display:none}
593
575
  .route-strip{grid-template-columns:1fr}
594
576
  .chain-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
595
- .orch{min-width:680px}
596
577
  .row.profiles{grid-template-columns:repeat(2,minmax(0,1fr))}
597
578
  }
579
+ @media (max-width:720px){
580
+ :root{--pad:clamp(16px,5vw,24px)}
581
+ main{padding-top:68px}
582
+ .nav{padding:12px var(--pad)}
583
+ .brand{font-size:22px}
584
+ .brand .orbital{width:24px;height:24px}
585
+ .home{min-height:auto;padding-top:22px;padding-bottom:58px}
586
+ .home::after{bottom:8px;height:48px}
587
+ .hero-stage{min-height:240px}
588
+ #orb-vid,.hero-orb{width:min(78vw,300px)}
589
+ .hero-orb .orbit-dot{animation-name:orbit-travel-mobile}
590
+ @keyframes orbit-travel-mobile{from{transform:rotateX(76deg) rotateZ(0deg) translateX(min(30vw,128px))}to{transform:rotateX(76deg) rotateZ(360deg) translateX(min(30vw,128px))}}
591
+ .home-title{font-size:clamp(64px,19vw,82px);letter-spacing:-.05em}
592
+ .hero-byline{margin-top:8px;font-size:9px;letter-spacing:.2em}
593
+ .home-kicker{font-size:9px;letter-spacing:.22em}
594
+ .home-copy p:not(.home-kicker){max-width:34ch;font-size:15px;line-height:1.58;margin-top:14px}
595
+ .home-actions{width:100%;margin-top:22px}
596
+ .enter-cta{width:100%;max-width:280px;min-height:48px;justify-content:center;padding:13px 18px}
597
+ .section{padding:clamp(44px,8vh,72px) var(--pad) 0}
598
+ .section-label{letter-spacing:.22em}
599
+ .section-title{font-size:clamp(30px,11vw,42px);max-width:12ch}
600
+ .section-lede{font-size:15px;line-height:1.6;margin-bottom:24px}
601
+ .graph-top{justify-content:flex-start;padding:12px;font-size:9px;line-height:1.55;letter-spacing:.12em}
602
+ .evolve-rail{justify-content:flex-start;flex-wrap:nowrap;overflow-x:auto;padding:12px;-webkit-overflow-scrolling:touch}
603
+ .evolve-pill{white-space:nowrap;flex:0 0 auto}
604
+ .graph-canvas{overflow:visible;padding:22px 12px 24px}
605
+ .orch{width:100%;min-width:0}
606
+ .row{gap:10px}
607
+ .row>.node[style]{width:100%!important;max-width:260px}
608
+ .node.hub{width:100%;max-width:260px}
609
+ .row.profiles{grid-template-columns:1fr}
610
+ .node.route,.node.add,.node.builder-sink{min-height:auto}
611
+ .node.route .chains{line-height:1.55}
612
+ .wires{height:34px;overflow:hidden}
613
+ .wires.funnel{height:42px}
614
+ .builder-row{margin-top:4px}
615
+ .route-card{min-height:auto;padding:20px 16px;background:rgba(17,25,37,.94)}
616
+ .route-card h3{font-size:23px;line-height:1.05;flex-wrap:wrap}
617
+ .why-band{padding:20px 16px 22px}
618
+ .hl-surface{padding:16px}
619
+ .chain .id{white-space:normal;text-align:right}
620
+ .venues-head{font-size:9px;letter-spacing:.12em;line-height:1.5}
621
+ .marquee{overflow-x:auto;overflow-y:hidden;mask-image:none;-webkit-mask-image:none;scrollbar-width:none;overscroll-behavior-inline:contain;-webkit-overflow-scrolling:touch}
622
+ .marquee::-webkit-scrollbar{display:none}
623
+ .marquee .track,.marquee.rev .track{min-width:max-content;animation:none;transform:none;will-change:auto}
624
+ .track{gap:16px}
625
+ .chip{font-size:14px;padding:8px 11px}
626
+ .chip.wm-chip{padding:10px 14px}
627
+ .chip img.wm{height:24px;max-width:132px}
628
+ footer{padding:28px var(--pad) 34px}
629
+ .foot-row,.foot-meta{justify-content:center;text-align:center}
630
+ .foot-links{flex-wrap:wrap;justify-content:center;gap:12px 16px}
631
+ }
598
632
  @media (max-width:560px){
599
- .home{min-height:auto;padding-top:36px}.hero-stage{min-height:280px}.hero-orb{width:min(84vw,340px)}
600
633
  .chain-grid{grid-template-columns:1fr}
601
- .row.profiles{grid-template-columns:1fr}
634
+ }
635
+ @media (max-width:380px){
636
+ .home-title{font-size:62px}
637
+ .hero-stage{min-height:220px}
638
+ .section-title{font-size:30px}
602
639
  }
603
640
  @media (prefers-reduced-motion:reduce){
604
641
  html{scroll-behavior:auto}
@@ -644,7 +681,6 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
644
681
  oracle</a>
645
682
  <nav class="nav-links" aria-label="Primary">
646
683
  <a class="hide-sm" href="#orchestration">How it works</a>
647
- <a class="hide-sm" href="#wallets">Wallets</a>
648
684
  <a class="hide-sm" href="#chains">Chains</a>
649
685
  </nav>
650
686
  </header>
@@ -686,7 +722,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
686
722
  <section class="section" id="orchestration">
687
723
  <p class="section-label rv">How it works</p>
688
724
  <h2 class="section-title rv">Multi-profile. <em>Customizable.</em></h2>
689
- <p class="section-lede rv">Not one bot. A mesh with profile routing via Hermes: Input / Command hits the oracle control plane, then fans out across venue profiles, multi-chain EVM, Bitcoin, Solana, and a protocol builder. Any MCP harness can drive a single agent. The public plane is prepare-only. Your wallet signs.</p>
725
+ <p class="section-lede rv">Not one bot. A mesh with profile routing via Hermes: Input / Command hits the oracle control plane, then fans out across venue profiles, multi-chain EVM, Bitcoin, Solana, and a protocol builder. Any MCP harness can drive a single agent.</p>
690
726
 
691
727
  <div class="graph-shell rv">
692
728
  <div class="graph-top">
@@ -764,7 +800,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
764
800
  <div class="node route p-rh">
765
801
  <div class="tag">profile</div>
766
802
  <div class="name">robinhood agent</div>
767
- <div class="sub">markets · nfts · names</div>
803
+ <div class="sub">markets · memecoins · nfts</div>
768
804
  <div class="chains"><span class="ch">Robinhood Chain <img src="https://icons.llamao.fi/icons/chains/rsz_robinhood?w=24&h=24" alt="" loading="lazy"></span></div>
769
805
  </div>
770
806
  <div class="node route p-sol">
@@ -783,13 +819,13 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
783
819
  <div class="tag">profile</div>
784
820
  <div class="name">evm / bridge agent</div>
785
821
  <div class="sub">swaps · bridges · defi</div>
786
- <div class="chains"><span class="ch">ETH <img src="https://icons.llamao.fi/icons/chains/rsz_ethereum?w=24&h=24" alt="" loading="lazy"></span><span class="ch">Base <img src="https://icons.llamao.fi/icons/chains/rsz_base?w=24&h=24" alt="" loading="lazy"></span><span class="ch">Arb <img src="https://icons.llamao.fi/icons/chains/rsz_arbitrum?w=24&h=24" alt="" loading="lazy"></span><span class="ch">OP <img src="https://icons.llamao.fi/icons/chains/rsz_optimism?w=24&h=24" alt="" loading="lazy"></span><span class="ch">BNB <img src="https://icons.llamao.fi/icons/chains/rsz_binance?w=24&h=24" alt="" loading="lazy"></span><span class="ch">Polygon <img src="https://icons.llamao.fi/icons/chains/rsz_polygon?w=24&h=24" alt="" loading="lazy"></span><span class="ch">Avax <img src="https://icons.llamao.fi/icons/chains/rsz_avalanche?w=24&h=24" alt="" loading="lazy"></span></div>
822
+ <div class="chains"><span class="ch">ETH <img src="https://icons.llamao.fi/icons/chains/rsz_ethereum?w=24&h=24" alt="" loading="lazy"></span><span class="ch">Base <img src="https://icons.llamao.fi/icons/chains/rsz_base?w=24&h=24" alt="" loading="lazy"></span><span class="ch">Arb <img src="https://icons.llamao.fi/icons/chains/rsz_arbitrum?w=24&h=24" alt="" loading="lazy"></span><span class="ch">OP <img src="https://icons.llamao.fi/icons/chains/rsz_optimism?w=24&h=24" alt="" loading="lazy"></span><span class="ch">BNB <img src="https://icons.llamao.fi/icons/chains/rsz_binance?w=24&h=24" alt="" loading="lazy"></span><span class="ch">Avax <img src="https://icons.llamao.fi/icons/chains/rsz_avalanche?w=24&h=24" alt="" loading="lazy"></span></div>
787
823
  </div>
788
824
  <div class="node route p-stable">
789
825
  <div class="tag">profile</div>
790
826
  <div class="name">stable agent</div>
791
- <div class="sub">launches · venue ops</div>
792
- <div class="chains"><span class="ch">Stable 988 <img src="https://icons.llamao.fi/icons/chains/rsz_stable?w=24&h=24" alt="" loading="lazy"></span></div>
827
+ <div class="sub">launches · memecoins</div>
828
+ <div class="chains"><span class="ch">Stable <img src="https://icons.llamao.fi/icons/chains/rsz_stable?w=24&h=24" alt="" loading="lazy"></span></div>
793
829
  </div>
794
830
  <div class="node add">
795
831
  <div class="tag">open slot</div>
@@ -848,9 +884,10 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
848
884
  <article class="route-card p-rh">
849
885
  <div class="where">robinhood agent →</div>
850
886
  <h3>Robinhood <img src="https://icons.llamao.fi/icons/chains/rsz_robinhood?w=40&h=40" alt="Robinhood Chain" loading="lazy"></h3>
851
- <p>RH Chain markets, NFTs, names, token scans, and chain-local routing.</p>
887
+ <p>RH Chain markets, memecoins, NFTs, names, token scans, and chain-local routing.</p>
852
888
  <div class="chips">
853
889
  <span class="chip-s">markets</span>
890
+ <span class="chip-s">memecoins</span>
854
891
  <span class="chip-s">NFTs</span>
855
892
  <span class="chip-s">rh chain</span>
856
893
  </div>
@@ -878,7 +915,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
878
915
  <article class="route-card p-evm">
879
916
  <div class="where">evm / bridge agent →</div>
880
917
  <h3>Multi-chain EVM <img src="https://icons.llamao.fi/icons/chains/rsz_ethereum?w=40&h=40" alt="Ethereum" loading="lazy"></h3>
881
- <p>DEX routes, LI.FI and Relay bridges, DeFi across ETH and L2s. Bounded evm-swap and evm-bridge lanes, prepare-only until you sign.</p>
918
+ <p>DEX routes, LI.FI and Relay bridges, DeFi across ETH and L2s. Bounded evm-swap and evm-bridge lanes.</p>
882
919
  <div class="chips">
883
920
  <span class="chip-s">evm-swap</span>
884
921
  <span class="chip-s">evm-bridge</span>
@@ -898,9 +935,11 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
898
935
  <article class="route-card p-stable">
899
936
  <div class="where">stable agent →</div>
900
937
  <h3>Stable <img src="https://icons.llamao.fi/icons/chains/rsz_stable?w=40&h=40" alt="Stable" loading="lazy"></h3>
901
- <p>Stable mainnet launch radar and venue ops, scanned straight from the chain's own logs.</p>
938
+ <p>Stable mainnet launch radar, memecoins, USDT0 gas, and venue ops, scanned straight from the chain's own logs.</p>
902
939
  <div class="chips">
903
940
  <span class="chip-s">launches</span>
941
+ <span class="chip-s">memecoins</span>
942
+ <span class="chip-s">USDT0 gas</span>
904
943
  <span class="chip-s">Stable</span>
905
944
  </div>
906
945
  </article>
@@ -928,7 +967,6 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
928
967
 
929
968
  <div class="why-band">
930
969
  <p>The model proposes. Policy bounds. You own signatures. Multi-profile desks, not one omniscient chatbot. Vaults, perps, bridges, and protocol scaffolds, not just swaps. Empty allowlists refuse everything until you configure them.</p>
931
- <span>claims without receipts don't count</span>
932
970
  </div>
933
971
  </div>
934
972
 
@@ -945,7 +983,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
945
983
  </article>
946
984
  <article class="moat-card">
947
985
  <div class="n">receipts</div>
948
- <h3>Claims without receipts don't count</h3>
986
+ <h3>Every action ends in a receipt</h3>
949
987
  <p>Prepared actions ship as stamped, hash-bound envelopes. Money claims end in tx hash, receipt status, balance delta, and allowance state. No “looks filled.”</p>
950
988
  </article>
951
989
  <article class="moat-card">
@@ -966,37 +1004,13 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
966
1004
  </div>
967
1005
  </section>
968
1006
 
969
- <section class="section" id="wallets">
970
- <p class="section-label rv">Wallets</p>
971
- <h2 class="section-title rv">Your wallets. <em>Your limits.</em></h2>
972
- <p class="section-lede rv">Use one wallet everywhere, or separate wallets per chain. Permissions are per wallet. Change them, tighten them, or revoke them anytime.</p>
973
-
974
- <div class="wallet-grid rv">
975
- <article class="wallet-card">
976
- <div class="n">setup</div>
977
- <h3>Single or multi</h3>
978
- <p>One wallet across chains, or a dedicated wallet per chain. Same desk either way.</p>
979
- </article>
980
- <article class="wallet-card">
981
- <div class="n">control</div>
982
- <h3>Limit per wallet</h3>
983
- <p>Caps, allowed actions, and scopes sit on each wallet, not a global free pass.</p>
984
- </article>
985
- <article class="wallet-card">
986
- <div class="n">lifecycle</div>
987
- <h3>Change · revoke</h3>
988
- <p>Edit permissions when risk changes. Revoke a wallet's access without killing the whole account.</p>
989
- </article>
990
- </div>
991
- </section>
992
-
993
1007
  <section class="section" id="chains">
994
1008
  <p class="section-label rv">Chains</p>
995
1009
  <h2 class="section-title rv">Where you can <em>operate.</em></h2>
996
1010
  <p class="section-lede rv">Live coverage grows with the profile mesh. Each chain maps to an agent, and new agents can join.</p>
997
1011
  <div class="chain-grid" id="chain-grid"></div>
998
1012
  <div class="hl-surface rv">
999
- <div class="venues-head"><span>hyperliquid // what oracle actually does</span><span><b>prepare-only</b> · your wallet signs</span></div>
1013
+ <div class="venues-head"><span>hyperliquid // what oracle actually does</span></div>
1000
1014
  <div class="hl-grid">
1001
1015
  <article><h3>Perps</h3><p>Asset info, order + bracket prepare, cancel, leverage and isolated-margin updates. Tick and lot sizing enforced to 5 sig figs.</p></article>
1002
1016
  <article><h3>Spot &amp; markets</h3><p>Spot meta, mids, L2 book, candles, market and coin datapoints, leaderboards.</p></article>
@@ -1007,7 +1021,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1007
1021
  </div>
1008
1022
  </div>
1009
1023
  <div class="venues rv">
1010
- <div class="venues-head"><span>protocols // venues</span><span><b>routed by name</b> · quotes ranked · prepare-only</span></div>
1024
+ <div class="venues-head"><span>protocols // venues</span><span><b>routed by name</b> · quotes ranked</span></div>
1011
1025
  <div class="marquee"><div class="track" id="proto-track-a"></div></div>
1012
1026
  <div class="marquee rev"><div class="track" id="proto-track-b"></div></div>
1013
1027
  </div>
@@ -1060,7 +1074,6 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1060
1074
  { name: "Base", id: "8453", logo: "chains/rsz_base", note: "evm / bridge agent", badge: "live" },
1061
1075
  { name: "Arbitrum", id: "42161", logo: "chains/rsz_arbitrum", note: "evm / bridge agent", badge: "live" },
1062
1076
  { name: "Optimism", id: "10", logo: "chains/rsz_optimism", note: "evm / bridge agent", badge: "live" },
1063
- { name: "Polygon", id: "137", logo: "chains/rsz_polygon", note: "evm / bridge agent", badge: "live" },
1064
1077
  { name: "BNB Chain", id: "56", logo: "chains/rsz_binance", note: "evm / bridge agent", badge: "live" },
1065
1078
  { name: "Avalanche", id: "43114", logo: "chains/rsz_avalanche", note: "evm / bridge agent", badge: "live" },
1066
1079
  { name: "Hyperliquid", id: "999", logo: "chains/rsz_hyperliquid", note: "hyperliquid agent", badge: "live" },
@@ -1084,7 +1097,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1084
1097
  { n: "XYZ", wm: "xyz.svg", u: "https://trade.xyz" },
1085
1098
  { n: "Markets", wm: "markets.svg", tall: 1, u: "https://markets.xyz" },
1086
1099
  { n: "HyENA", wm: "hyena.svg", u: "https://hyena.trade" },
1087
- { n: "Paragon", wm: "paragon.svg", tall: 1, u: "https://paragon.trade" },
1100
+ { n: "Paragon", wm: "paragon.svg", tall: 1, mono: 1, u: "https://paragon.trade" },
1088
1101
  { n: "HyperSwap", wm: "hyperswap.svg", u: "https://hyperswap.exchange" },
1089
1102
  { n: "Uniswap", wm: "uniswap.svg", u: "https://uniswap.org" },
1090
1103
  { n: "Polymarket", wm: "polymarket.png", u: "https://polymarket.com" },
@@ -1104,8 +1117,11 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1104
1117
  { n: "Relay", wm: "relay.svg", u: "https://relay.link" },
1105
1118
  { n: "Velora", wm: "paraswap.svg", u: "https://velora.xyz" },
1106
1119
  { n: "Odos", wm: "odos.svg", u: "https://odos.xyz" },
1120
+ { n: "0x", wm: "zerox-icon.webp", tall: 1, u: "https://0x.org" },
1121
+ { n: "Hop", wm: "hop-icon.webp", tall: 1, u: "https://hop.exchange" },
1122
+ { n: "Satflow", wm: "satflow-icon.png", tall: 1, u: "https://satflow.com" },
1107
1123
  { n: "CoW Swap", wm: "cowswap.svg", u: "https://cow.fi" },
1108
- { n: "1inch", wm: "oneinch-icon.webp", tall: 1, u: "https://1inch.io" },
1124
+ { n: "1inch", wm: "oneinch.svg", u: "https://1inch.io" },
1109
1125
  { n: "Jupiter", wm: "jupiter.svg", u: "https://jup.ag" },
1110
1126
  { n: "OpenSea", wm: "opensea-icon.svg", tall: 1, u: "https://opensea.io" },
1111
1127
  { n: "Across", wm: "across-icon.webp", tall: 1, u: "https://across.to" },
@@ -1113,11 +1129,27 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1113
1129
  { n: "Magic Eden", wm: "magic-eden.svg", u: "https://magiceden.io" }
1114
1130
  ];
1115
1131
 
1132
+ // Equalize optical weight: constant target area, clamped, then width-capped.
1133
+ function normalizeMark(img) {
1134
+ var ar = img.naturalWidth / img.naturalHeight;
1135
+ if (!isFinite(ar) || ar <= 0) return;
1136
+ var h = Math.sqrt(2600 / ar);
1137
+ h = Math.max(22, Math.min(34, h));
1138
+ if (h * ar > 170) h = 170 / ar;
1139
+ img.style.height = h.toFixed(1) + "px";
1140
+ }
1141
+ function wireMarks(root) {
1142
+ root.querySelectorAll("img.wm:not(.tall)").forEach(function (img) {
1143
+ if (img.complete && img.naturalWidth) normalizeMark(img);
1144
+ else img.addEventListener("load", function () { normalizeMark(img); }, { once: true });
1145
+ });
1146
+ }
1147
+
1116
1148
  function chipRow(list) {
1117
1149
  var seq = list.concat(list);
1118
1150
  return seq.map(function (x) {
1119
1151
  var body = x.wm
1120
- ? '<img class="' + (x.tall ? 'wm tall' : 'wm') + '" src="' + WM + x.wm + '" alt="' + x.n + '" decoding="async">' +
1152
+ ? '<img class="' + (x.tall ? 'wm tall' : 'wm') + (x.mono ? ' mono' : '') + '" src="' + WM + x.wm + '" alt="' + x.n + '" loading="lazy" decoding="async" fetchpriority="low">' +
1121
1153
  (x.tall ? '<span class="wordmark">' + x.n + '</span>' : '')
1122
1154
  : '<span class="wordmark">' + x.n + '</span>';
1123
1155
  return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + x.n + '">' + body + '</a>';
@@ -1132,7 +1164,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1132
1164
  { n: "Claude", wm: "claude.svg", u: "https://claude.ai" },
1133
1165
  { n: "Grok", wm: "grok.svg", u: "https://grok.com" },
1134
1166
  { n: "Codex", wm: "codex-icon.svg", tall: 1, u: "https://openai.com/codex" },
1135
- { n: "Gemini", wm: "gemini.svg", u: "https://gemini.google.com" },
1167
+ { n: "Gemini", wm: "gemini-icon.svg", tall: 1, u: "https://gemini.google.com" },
1136
1168
  { n: "OpenClaw", wm: "openclaw.svg", tall: 1, u: "https://openclaw.ai" },
1137
1169
  { n: "Perplexity", wm: "perplexity.svg", u: "https://perplexity.ai" },
1138
1170
  { n: "Manus", wm: "manus.svg", u: "https://manus.im" },
@@ -1144,9 +1176,13 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
1144
1176
  ];
1145
1177
  document.getElementById("llm-track").innerHTML = LLMS.concat(LLMS).map(function (x) {
1146
1178
  var cls = x.tall ? "wm tall" : "wm";
1147
- return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + x.n + '"><img class="' + cls + '" src="' + LM + x.wm + '" alt="' + x.n + '" decoding="async">' + (x.tall ? '<span class="wordmark">' + x.n + '</span>' : '') + '</a>';
1179
+ return '<a class="chip wm-chip" href="' + x.u + '" target="_blank" rel="noopener noreferrer" aria-label="' + x.n + '"><img class="' + cls + '" src="' + LM + x.wm + '" alt="' + x.n + '" loading="lazy" decoding="async" fetchpriority="low">' + (x.tall ? '<span class="wordmark">' + x.n + '</span>' : '') + '</a>';
1148
1180
  }).join("");
1149
1181
 
1182
+ wireMarks(document.getElementById("proto-track-a"));
1183
+ wireMarks(document.getElementById("proto-track-b"));
1184
+ wireMarks(document.getElementById("llm-track"));
1185
+
1150
1186
  var loader = document.getElementById("loader");
1151
1187
  var fill = document.getElementById("loader-fill");
1152
1188
  requestAnimationFrame(function () { fill.style.width = "100%"; });
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: setup
3
- description: "Use when the user types /setup or wants to connect telegram, discord, slack, or other hermes messaging platforms to oracle."
3
+ description: "Use when the user types /setup or wants to connect telegram, discord, slack, or another messaging platform to oracle."
4
4
  version: 1.0.0
5
5
  disable-model-invocation: true
6
6
  ---
7
7
 
8
8
  # /setup
9
9
 
10
- Configure hermes messaging for the oracle profile. Secrets stay local.
10
+ Configure messaging for the oracle profile. Secrets stay local.
11
11
 
12
12
  ```bash
13
13
  # menu + status (never prints tokens)
package/skins/oracle.yaml CHANGED
@@ -1,52 +1,56 @@
1
1
  name: oracle
2
- description: plain lowercase ascii oracle
2
+ description: filled lowercase oracle in the classic boxed layout
3
3
  colors:
4
- banner_border: "#30363d"
5
- banner_title: "#e6edf3"
6
- banner_accent: "#e6edf3"
7
- banner_dim: "#7d8590"
8
- banner_text: "#b1bac4"
9
- ui_accent: "#e6edf3"
10
- ui_label: "#b1bac4"
11
- ui_ok: "#7ee787"
12
- ui_error: "#ff7b72"
13
- ui_warn: "#d29922"
14
- prompt: "#e6edf3"
15
- input_rule: "#30363d"
16
- response_border: "#30363d"
17
- status_bar_bg: "#0d1117"
18
- status_bar_text: "#b1bac4"
19
- status_bar_strong: "#e6edf3"
20
- status_bar_dim: "#7d8590"
21
- status_bar_good: "#7ee787"
22
- status_bar_warn: "#d29922"
23
- status_bar_bad: "#ff7b72"
24
- status_bar_critical: "#ff7b72"
25
- session_label: "#b1bac4"
26
- session_border: "#30363d"
27
- voice_status_bg: "#0d1117"
28
- selection_bg: "#21262d"
29
- completion_menu_bg: "#0d1117"
30
- completion_menu_current_bg: "#21262d"
31
- completion_menu_meta_bg: "#0d1117"
32
- completion_menu_meta_current_bg: "#21262d"
4
+ banner_border: "#455867"
5
+ banner_title: "#B8F0FF"
6
+ banner_accent: "#91C2D7"
7
+ banner_dim: "#60717F"
8
+ banner_text: "#EAF2F8"
9
+ ui_accent: "#B8F0FF"
10
+ ui_label: "#A5D9EB"
11
+ ui_ok: "#7EE7B5"
12
+ ui_error: "#FF7B7B"
13
+ ui_warn: "#F0C674"
14
+ prompt: "#B8F0FF"
15
+ input_rule: "#455867"
16
+ response_border: "#91C2D7"
17
+ status_bar_bg: "#11161B"
18
+ status_bar_text: "#91A2B1"
19
+ status_bar_strong: "#EAF2F8"
20
+ status_bar_dim: "#60717F"
21
+ status_bar_good: "#7EE7B5"
22
+ status_bar_warn: "#F0C674"
23
+ status_bar_bad: "#FF9B71"
24
+ status_bar_critical: "#FF7B7B"
25
+ session_label: "#B8F0FF"
26
+ session_border: "#455867"
27
+ voice_status_bg: "#11161B"
28
+ selection_bg: "#23313B"
29
+ completion_menu_bg: "#11161B"
30
+ completion_menu_current_bg: "#23313B"
31
+ completion_menu_meta_bg: "#11161B"
32
+ completion_menu_meta_current_bg: "#23313B"
33
33
  spinner:
34
- waiting_faces: [".", "..", "..."]
35
- thinking_faces: [".", "..", "..."]
36
- thinking_verbs: ["working", "reading", "checking", "routing"]
34
+ waiting_faces: ["·", "··", "···"]
35
+ thinking_faces: ["", "", "", "◈"]
36
+ thinking_verbs: ["thinking", "reading", "checking", "routing"]
37
37
  wings: [["", ""]]
38
38
  branding:
39
39
  agent_name: "oracle"
40
40
  welcome: ""
41
41
  goodbye: "exit"
42
- response_label: "oracle"
43
- prompt_symbol: ">"
42
+ response_label: " oracle "
43
+ prompt_symbol: ""
44
44
  help_header: "oracle"
45
- tool_prefix: ">"
45
+ tool_prefix: ""
46
46
  banner_logo: |
47
- [#e6edf3] _[/]
48
- [#e6edf3] ___ _ _ __ _ __| |___[/]
49
- [#e6edf3]/ _ \ '_/ _` / _| / -_)[/]
50
- [#e6edf3]\___/_| \__,_\__|_\___|[/]
47
+ [bold #B8F0FF] ████[/]
48
+ [bold #B8F0FF] ░░███[/]
49
+ [bold #ACDEEF] ██████ ████████ ██████ ██████ ░███ ██████[/]
50
+ [bold #A5D9EB] ███░░███░░███░░███ ░░░░░███ ███░░███ ░███ ███░░███[/]
51
+ [bold #9FCBDD]░███ ░███ ░███ ░░░ ███████ ░███ ░░░ ░███ ░███████[/]
52
+ [bold #9FCBDD]░███ ░███ ░███ ███░░███ ░███ ███ ░███ ░███░░░[/]
53
+ [bold #ACDEEF]░░██████ █████ ░░████████░░██████ █████░░██████[/]
54
+ [bold #B8F0FF] ░░░░░░ ░░░░░ ░░░░░░░░ ░░░░░░ ░░░░░ ░░░░░░[/]
51
55
  banner_hero: |
52
- [#e6edf3]oracle[/]
56
+ [bold #EAF2F8]THE FUTURE IS AGENTIC[/]