Skip to main content
Create your first Vincent Policy in under 10 minutes using the Vincent Starter Kit.

Prerequisites

Setup

1

Clone the Starter Kit

git clone git@github.com:LIT-Protocol/vincent-ability-starter-kit.git
cd vincent-ability-starter-kit
2

Ensure Corepack is Updated

# Verify your corepack version (should be > 0.31.0)
corepack -v

# If needed, update corepack to the latest version
npm install -g corepack@latest

# Enable Corepack globally
corepack enable
3

Run Bootstrap

corepack enable pnpm
pnpm bootstrap
The bootstrap will prompt you for:
  • Pinata JWT: Get from Pinata after creating an account
  • Test wallet private key: Fund with test tokens from the Lit Faucet
4

Verify Setup

pnpm test-e2e
If successful, you’ll see all tests passing and your environment is ready.

Create Your Policy

1

Copy the Template

# Replace 'my-policy' with your desired package name
mkdir -p packages/my-policy
rsync -a --exclude='node_modules/' --exclude='dist/' \
  packages/policy-counter/ packages/my-policy/
2

Update Package Configuration

1. Edit packages/my-policy/package.json:
{
  "name": "@your-org/my-policy",
  "version": "0.0.1",
  "description": "Your policy description here"
}
2. Edit packages/my-policy/project.json:Replace all occurrences of policy-counter with my-policy:
  • "name": "my-policy"
  • "sourceRoot": "packages/my-policy/src"
  • "cwd": "packages/my-policy" (all instances)
  • "input": "packages/my-policy/src/generated"
  • "outputPath": "packages/my-policy/dist"
  • "main": "packages/my-policy/src/index.ts"
  • "tsConfig": "packages/my-policy/tsconfig.lib.json"
  • All asset paths
3. Edit packages/my-policy/jest.config.js:
module.exports = {
  displayName: '@your-org/my-policy', // Update this
  // ... rest of config
};
4. Update nx.json in repository root:Add your package to the release projects:
{
  "release": {
    "projects": ["ability-native-send", "policy-counter", "test-e2e", "my-policy"]
  }
}
3

Define Your Policy Logic

Edit packages/my-policy/src/lib/vincent-policy.ts:
export const vincentPolicy = createVincentPolicy({
  packageName: '@your-org/my-policy',

  // There are other configurations here, not covered in the Quick Start.
  // Please read the other guides for more details.

  // Schemas for parameters and results
  abilityParamsSchema,
  userParamsSchema,
  commitParamsSchema,

  // Local validation - runs before execution
  precheck: async ({ abilityParams, userParams }, { allow, deny }) => {
    // Validate parameters and current state
    if (/* validation passes */) {
      return allow({ /* validation data */ });
    }
    return deny({ reason: 'Validation failed' });
  },

  // Evaluation - runs in Lit Action environment
  evaluate: async ({ abilityParams, userParams }, { allow, deny }) => {
    // Check policy state and determine if execution allowed
    if (/* policy allows execution */) {
      return allow({ /* evaluation data */ });
    }
    return deny({ reason: 'Policy denied execution' });
  },

  // State update - runs after successful execution
  commit: async (commitParams, { allow, deny }) => {
    // Update policy state
    return allow({ /* commit success data */ });
  },
});
4

Configure User Interface

Edit packages/my-policy/src/inputUiSchema.json to define how users configure your Policy:
{
  "jsonSchema": {
    "type": "object",
    "properties": {
      "maxAmount": {
        "type": "number",
        "title": "Maximum Amount",
        "description": "Maximum amount allowed per transaction"
      }
    }
  },
  "uiSchema": {
    "maxAmount": {
      "ui:placeholder": "Enter maximum amount"
    }
  }
}
5

Build and Test

pnpm install
pnpm nx build my-policy
pnpm test-e2e
6

Deploy to IPFS

pnpm nx action:deploy my-policy
Your Policy is now deployed and ready to be used by Vincent Abilities!
7

Publish Your Policy

When you’re prepared, you can publish the Policy to npm. This will make it publishable in the Vincent Registry.
cd packages/my-policy
pnpm publish
8

Register in Vincent Registry

See the Publishing Guide for details on registering your Policy in the Vincent Registry.

Quick Commands

build
command
pnpm nx build my-policy - Build your Policy package
test
command
pnpm test-e2e - Run end-to-end tests with the Vincent system
deploy
command
pnpm nx action:deploy my-policy - Deploy to IPFS via Pinata
clean
command
pnpm clean - Remove build artifacts

What’s Next?

I