npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@vauban-org/preste

v0.66.2

Published

Preste — sovereign agentic CLI with OODA/ReAct/Plan patterns, local MCP server for Claude Code/Desktop integration, and Ed25519 auto-attestation on every run. BYOK, standalone, no infra.

Downloads

299

Readme

preste

Every agent run. Signed. Forever.

npm license IETF draft tests

preste is the first agentic CLI that combines BYOK provider routing, three loop patterns, a local MCP server, and automatic Ed25519 cryptographic attestation on every single run — in a single MIT-licensed binary.

npm install -g @vauban-org/preste
preste setup   # connect your LLM in 60 seconds
preste agent run BUILDER --task "scaffold a /api/ping route"
# ✓ attestation saved → ~/.preste/attestations/b0c520a4....json

Why preste?

| Feature | preste | Hermes | OpenClaw | Claude Code | |---|:---:|:---:|:---:|:---:| | BYOK — any LLM provider | ✅ | ✅ | ✅ | ❌ | | Standalone — no server required | ✅ | ✅ | ✅ | ❌ | | OODA / ReAct / Plan loops | ✅ (3) | ❌ (1) | ❌ (1) | ❌ | | Ed25519 attestation — every run | ✅ | ❌ | ❌ | ❌ | | Local MCP server (IDE delegation) | ✅ | ❌ | ❌ | — | | Starknet on-chain anchor | ✅ | ❌ | ❌ | ❌ | | SKILL.md (agentskills.io standard) | ✅ | ❌ | ❌ | ❌ | | IETF draft conformance | ✅ | ❌ | ❌ | ❌ |


Quick start

npm install -g @vauban-org/preste
preste setup
preste agent run BUILDER --task "list the TypeScript files in src/ and count them"
preste attest list          # see your signed certificates
preste attest verify <runId>

Real output:

[BUILDER › OODA › deepseek-v4-flash]
  step 1  list_directory src/
  step 2  list_directory src/routes/
  step 3  ✓ done

There are 27 TypeScript files in packages/cli/src/.

✓ attestation saved  ~/.preste/attestations/b0c520a4....json  (kid=f33f00c0…)
  3.7 s  ·  3 steps  ·  3389 in / 207 out tokens

Installation

npm install -g @vauban-org/preste   # global
pnpm add @vauban-org/preste         # per-project

Requires Node.js ≥ 18.


Onboarding

preste setup

Interactive wizard. Tests connectivity before saving to ~/.preste/config.yaml.

| Provider | Default model | Notes | |---|---|---| | LiteLLM (sovereign) | deepseek-v4-flash | Self-host. Recommended. | | Groq | llama-3.3-70b-versatile | Free tier. Fast fallback. | | OpenAI | gpt-4o | Standard. |

Resolution order (first wins): ~/.preste/config.yamlLITELLM_URLGROQ_API_KEYOPENAI_API_KEY.


Agent run

preste agent run <TYPE> --task "<description>"

Types: ARCHITECT · BUILDER · TESTER · SCRIBE · SYNERGY

Loop patterns (--pattern):

| Pattern | What it does | Pick when | |---|---|---| | ooda (default) | Structured function-calling loop | Files, shell, HTTP | | react | Text-based Thought → Action → Observe | Heavy reasoning | | plan | Upfront plan → sequential execution | Multi-step tasks |

# OODA — structured tool calls (default)
preste agent run BUILDER --task "scaffold a retry helper with exponential backoff"

# ReAct — reasoning-first
preste agent run ARCHITECT --task "review circuit-breaker in src/router/" --pattern react

# Plan-then-Execute
preste agent run TESTER --task "write edge-case tests for the quota manager" --pattern plan

# One-shot — no loop, just an LLM answer
preste agent run SCRIBE --task "summarise this doc" --one-shot --context "$(cat notes.md)"

# With episodic memory
preste agent run SYNERGY --task "weekly trend analysis" --recall --remember

| Flag | Default | Description | |---|---|---| | --task <text> | required | Task description | | --pattern ooda\|react\|plan | ooda | Loop pattern | | --context <text> | — | Extra context injected into system prompt | | --one-shot | false | Single LLM call, no tools | | --max-steps <n> | 20 | Max loop iterations | | --recall | false | Inject relevant past memories before run | | --remember | false | Save this run to episodic memory | | --no-attest | false | Skip attestation | | --json | false | JSON output |


Mobile observe + steer via sovereign relay

Pair your phone with a running preste --remote session through a zero-knowledge relay. Both sides dial OUT to the relay (NAT-friendly). The relay forwards opaque ciphertext frames PC ↔ phone and never decrypts them — X25519 + AES-256-GCM, ephemeral keys per session.

# 1. Start preste with the Vauban-hosted relay (or your own).
preste --remote --relay https://relay.preste.vauban.tech
#   📡 remote-control — observe + steer this session from your phone
#      http://0.0.0.0:3113/remote/stream
#      token: <hex>
#
#   🌍 relay — pair your phone from anywhere
#      scan the QR with preste.vauban.tech (PWA) :
#      [ASCII QR]
#      preste-pair://eyJ2IjoxLCJyZWxheVVybCI6Imh0dHBzOi8v...

Open preste.vauban.tech on your phone (install as a PWA — works iOS/Android/desktop), scan the QR, and observe the live transcript. Tap-to-veto each tool call. Voice STT mic to inject, TTS to read back the assistant.

Self-host the relay (production / regulated workloads) :

# 1-command docker-compose with Caddy auto-TLS :
git clone https://github.com/vauban-org/command-center
cd command-center/packages/preste-relay
cp docker-compose.example.yml docker-compose.yml
cp Caddyfile.example Caddyfile
# Edit Caddyfile : replace relay.example.com with your domain.
docker-compose up -d

Cert auto-provisioned by Let's Encrypt + rotated by Caddy. The relay itself : ~300 lines of pure Node http + crypto, MIT, no runtime deps.

See packages/preste-relay/README.md for the protocol spec + the K8s ingress patterns Vauban uses for the public relay.


Cryptographic attestation

Every preste agent run auto-generates a signed RunCertificate. No flag. No opt-in. No server.

# List all certificates
preste attest list

# Verify offline — no network, no Vauban infra
preste attest verify <runId>
# ✓ valid · owned by local key

# Anchor the Poseidon hash on Starknet
preste attest anchor <runId>                      # dry-run (computes hash only)
preste attest anchor <runId> --network sepolia    # real transaction (needs STARKNET_PRIVATE_KEY)

Certificate JSON (excerpt):

{
  "runId": "b0c520a458aefcee87654ac0e479279c",
  "agentId": "BUILDER",
  "status": "completed",
  "stepCount": 3,
  "pattern": "ooda",
  "provider": { "name": "litellm", "model": "deepseek-v4-flash" },
  "usage": { "inputTokens": 3389, "outputTokens": 207 },
  "signatureAlg": "Ed25519",
  "signaturePubkey": "f33f00c09dc3179f…",
  "signature": "3b6e8a…"
}

Anchor dry-run output:

{
  "runId": "b0c520a458aefcee87654ac0e479279c",
  "poseidonHash": "0x2eaaaa012a1beb050a5d6236cfe80b53daeb7577db9d458f030740cbe3e93fc",
  "dryRun": true
}

How it works:

  1. First run generates ~/.preste/ed25519.key (chmod 600). Your key. Never leaves your machine.
  2. Canonical JSON via JCS (RFC 8785) + Poseidon Merkle root over loop steps.
  3. Signed with Ed25519. Cert saved to ~/.preste/attestations/<runId>.json.
  4. Third parties verify with the embedded SPKI pubkey — zero Vauban infrastructure.

Conforms to IETF draft-vauban-skill-attestation-00.

Regulatory fit: Provides the tamper-evident traceability substrate for AI Act Art. 14 (human oversight) and EU AI Office guidance on high-risk AI. Auditable 5 years later from the JSON file alone.


MCP server — let your IDE delegate to preste

preste serve --mcp turns the binary into a local MCP server. Claude Code, Claude Desktop, Cursor, Continue.dev spawn it and call agent runs directly — each producing a signed RunCertificate.

preste serve --mcp               # stdio (IDE-spawned)
preste serve --http --port 3200  # HTTP (StreamableHTTP)

Wire into Claude Code (~/.claude.json):

{
  "mcpServers": {
    "preste": {
      "type": "stdio",
      "command": "preste",
      "args": ["serve", "--mcp"]
    }
  }
}

Tools exposed:

| Tool | Purpose | |---|---| | preste_agent_run | Execute OODA / ReAct / Plan agent | | preste_agent_models | List models on your LLM provider | | preste_skills_list | List installed SKILL.md skills | | preste_attest_verify | Verify Ed25519 RunCertificate | | preste_attest_list | Enumerate local attestations | | preste_attest_anchor | Poseidon hash + optional Starknet tx |


Skills (SKILL.md)

preste supports the agentskills.io standard.

preste skills install starknet-validator
preste skills run starknet-validator --task "check validator health"
preste skills validate ./my-skill/SKILL.md      # lint your own skills
preste skills create my-skill --tier verified   # scaffold from template

Tiers: official (Vauban-signed) · verified (community-reviewed) · unverified

Marketplace (P9)

Cryptographically signed skill marketplace. Every package ships a proof.json ProofClaim ; install refuses any package whose signature does not verify (no --no-verify opt-out). Full reference : docs/skills-marketplace.md.

# Search the marketplace.
preste skills search "starknet" --registry https://skills.vauban.tech

# Install a specific version (slug@version).
preste skills install [email protected] --registry https://skills.vauban.tech

# Publish your own (after staging SKILL.md + script.ts + proof.json).
preste skills publish --path ./my-skill --registry https://skills.vauban.tech

Bearer for publish lives in ~/.preste/auth.yaml (key registry_token). Registry URL resolution : --registry > PRESTE_SKILLS_REGISTRY env > https://skills.vauban.tech.


Persona

preste persona set --name "Senior Rust Engineer" --tone concise --language en
preste persona set --domain "distributed systems" --domain "ZK proofs"
preste persona show
preste persona reset

Stored at ~/.preste/persona.yaml, injected into every agent system prompt.


Episodic memory

preste memory recall "circuit breaker implementation"
preste memory store --content "Decided to use sliding window for rate limiting" --type decision

# Or during agent run
preste agent run BUILDER --task "..." --recall --remember

Memory lives at ~/.preste/memory/episodic.jsonl. Recall uses RRF-scored retrieval (cosine + recency + importance).


Session memory

preste uses three-stage memory within a conversation session:

| Stage | Scope | Storage | |---|---|---| | Working memory | Last 6 turns verbatim | In-process (configurable) | | Episodic | Older turns, LLM-compacted | In-process snapshot | | Long-term | Compaction summaries across sessions | Brain (optional, BYOK) |

In-session commands:

/compact              # compress older turns now (automatic at 70% context fill)
/save                 # persist the session snapshot
preste cmd-chat --resume <snapshot>  # restore a prior session

Enabling Brain long-term storage (optional):

# ~/.preste/config.yaml
brain:
  api_key: bk_...       # from brain.vauban.tech
  brain_id: <uuid>      # auto-detected on first run if omitted

When configured, compaction summaries are archived to Brain after each /compact. The next session restores them as ## Long-term context in the system prompt.

Without Brain config: identical behaviour to 0.24 -- zero errors, zero prompts.


Commands reference

| Command | Description | |---|---| | preste setup | Interactive BYOK onboarding | | preste agent run <TYPE> | Run OODA / ReAct / Plan agent | | preste agent list | List agent types | | preste agent models | List models on the configured provider | | preste skills list | List installed skills | | preste skills install <name> | Install from CC backend or marketplace (with --registry) | | preste skills publish | Publish a signed skill package to the marketplace (P9) | | preste skills search <query> | Search CC backend or marketplace (with --registry) | | preste skills run <name> | Execute a local skill | | preste skills validate <path> | Lint a SKILL.md | | preste skills create <name> | Scaffold a new skill | | preste attest verify <runId> | Verify cert offline | | preste attest list | List all local certs | | preste attest anchor <runId> | Poseidon hash + Starknet anchor | | preste serve --mcp | Local MCP server (stdio) | | preste serve --http | Local MCP server (HTTP) | | preste persona show\|set\|reset | Manage agent persona | | preste memory recall <query> | Search episodic memory | | preste memory store | Write to episodic memory | | preste cmd-chat --resume <snap> | Restore session from snapshot | | /compact (in-session command) | Compress older turns | | /save (in-session command) | Persist session snapshot |


Environment variables

| Variable | Description | |---|---| | LITELLM_URL | Sovereign LiteLLM base URL | | LITELLM_API_KEY | LiteLLM API key (optional) | | LITELLM_MODEL | Model override. Default: deepseek-v4-flash | | GROQ_API_KEY | Groq API key | | OPENAI_API_KEY | OpenAI API key | | CC_SERVICE_URL | CC server URL (for --server mode) | | CC_SERVICE_TOKEN | Bearer token for CC server (cc:read scope) | | STARKNET_PRIVATE_KEY | Private key for preste attest anchor --network | | STARKNET_ACCOUNT | Starknet account address | | PRESTE_SKILLS_REGISTRY | Skill marketplace URL (default https://skills.vauban.tech) | | PRESTE_HOME | Override ~/.preste storage prefix (config, skills, attestations) | | PRESTE_ALLOW_MAINNET_RECEIPT | Lift the Sepolia-only gate for zkpay receipts ; set to literal "1" only (operator burden per ADR-ECO-022 v2) |


Programmatic API

import { runAgentRun, runAttestVerify } from '@vauban-org/preste';

const result = await runAgentRun({
  agentType: 'BUILDER',
  task: 'scaffold a health-check route for /api/ping',
  pattern: 'ooda',
  maxSteps: 10,
});

console.log(result.content);
// → "Here is the health-check route..."

const verify = await runAttestVerify({ runIdOrPath: result.runId });
console.log(verify.valid); // true — Ed25519 signature verified

Architecture

Single esbuild bundle (~423 KB), no runtime server dependency.

  • Loop: @vauban-org/agent-sdk AgentLoop (minimal-loop, function-calling)
  • Attestation: node:crypto Ed25519 + Poseidon felt252 (starknet.js)
  • MCP: @modelcontextprotocol/sdk Stdio + StreamableHTTP transports
  • Config: YAML (yaml lib), Zod-validated schemas
  • Memory: JSONL append-only at ~/.preste/memory/episodic.jsonl

Exit codes

| Code | Meaning | |---|---| | 0 | Success | | 1 | Validation failure (invalid cert, agent error) | | 2 | Strict mode failure | | 3 | Fatal (network error, unrecoverable I/O) |


Contributing

PRs welcome. pnpm install && pnpm build && pnpm test


License

MIT — Vauban · Command Center