{"_id":"@elisym/plugin-elizaos-elisym","_rev":"5-753d20ad2dd70939e77981d1d5df1d94","name":"@elisym/plugin-elizaos-elisym","dist-tags":{"latest":"0.5.0"},"versions":{"0.3.5":{"name":"@elisym/plugin-elizaos-elisym","version":"0.3.5","keywords":["ai-agent","elisym","elizaos","elizaos-plugins","marketplace","nostr","solana"],"author":{"name":"elisym labs"},"license":"MIT","_id":"@elisym/plugin-elizaos-elisym@0.3.5","maintainers":[{"name":"igor.peregudov","email":"igor.peregudov93@gmail.com"}],"homepage":"https://github.com/elisymlabs/plugin-elizaos-elisym","bugs":{"url":"https://github.com/elisymlabs/plugin-elizaos-elisym/issues"},"dist":{"shasum":"35dabce0855e8c14fc73d6e5fb9f740f31d083b5","tarball":"https://registry.npmjs.org/@elisym/plugin-elizaos-elisym/-/plugin-elizaos-elisym-0.3.5.tgz","fileCount":9,"integrity":"sha512-C6O3Inxu7HbBIsbggODAHxss5Jrgk0ASbKiYe0GbhkNlRxAMKCpM58c2p0zhCl1E2VopgNHoyrqz6uisPOPa5w==","signatures":[{"sig":"MEUCIQCiVxWkLI3rOFV+6akZsQkWXeZ7Y/xvYIZmxWCgxM7GnQIgTzm8umcOyFOuB9tKimD5MqMOAUeZwpqTZYzKn7t2L5A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elisym%2fplugin-elizaos-elisym@0.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":543180},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"450f6b9f7aab4db6aaaafd77794f365dd6f3abbf","scripts":{"qa":"tsup && vitest run && tsc --noEmit && oxlint src/ && oxfmt --check src/","dev":"tsup --watch","lint":"oxlint src/","test":"vitest run","build":"tsup","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"igor.peregudov","email":"igor.peregudov93@gmail.com"},"repository":{"url":"git+https://github.com/elisymlabs/plugin-elizaos-elisym.git","type":"git"},"_npmVersion":"10.8.2","agentConfig":{"pluginType":"elizaos:plugin:1.0.0","pluginParameters":{"ELISYM_RELAYS":{"type":"string","description":"Comma-separated Nostr relay URLs. Omit to use SDK defaults."},"ELISYM_NETWORK":{"type":"string","default":"devnet","description":"'devnet' or 'mainnet'."},"ELISYM_SIGNER_KIND":{"type":"string","default":"local","description":"'local' (generate/load hot key, default), 'kms' (defer signing to an external KMS adapter; no adapter bundled), or 'external' (bring-your-own Signer)."},"ELISYM_PROVIDER_NAME":{"type":"string","description":"Product/capability display name shown on the NIP-89 card. Defaults to character.name."},"ELISYM_SOLANA_RPC_URL":{"type":"string","description":"Solana RPC endpoint. Omit to use the public cluster for the chosen network."},"ELISYM_NOSTR_PRIVATE_KEY":{"type":"string","sensitive":true,"description":"Hex (64 chars) or nsec-encoded Nostr secret key. If empty, plugin generates and persists one."},"ELISYM_PROVIDER_PRODUCTS":{"type":"string","description":"JSON array of products: [{name, description, capabilities, priceSol}]. Supersedes ELISYM_PROVIDER_CAPABILITIES/PRICE_SOL/NAME/DESCRIPTION. Cards no longer in the array are deleted from relays on startup."},"ELISYM_PROVIDER_PRICE_SOL":{"type":"string","description":"Price per job this agent charges, in SOL. Required unless ELISYM_PROVIDER_PRODUCTS or ELISYM_PROVIDER_SKILLS_DIR is set."},"ELISYM_SOLANA_PRIVATE_KEY":{"type":"string","sensitive":true,"description":"Base58-encoded 64-byte Solana secret key. If empty (and ELISYM_SOLANA_PAYMENT_ADDRESS is also unset), plugin generates one on first start and persists it to agent memory. Mutually exclusive with ELISYM_SOLANA_PAYMENT_ADDRESS."},"ELISYM_PROVIDER_ACTION_MAP":{"type":"string","description":"JSON map { capability: ActionName } for provider routing."},"ELISYM_PROVIDER_SKILLS_DIR":{"type":"string","description":"Absolute or relative path to a directory of SKILL.md folders. Each skill auto-registers as a provider product with its own capabilities and price. Requires ANTHROPIC_API_KEY for the skill LLM tool-use loop."},"ELISYM_PROVIDER_DESCRIPTION":{"type":"string","description":"Product description shown on the NIP-89 card. Defaults to character.bio. Do NOT put the system prompt here."},"ELISYM_PROVIDER_CAPABILITIES":{"type":"string","description":"Comma-separated capabilities to advertise. Required unless ELISYM_PROVIDER_PRODUCTS or ELISYM_PROVIDER_SKILLS_DIR is set."},"ELISYM_SOLANA_PAYMENT_ADDRESS":{"type":"string","description":"Recommended. Public Solana address (base58, 32 bytes) where customer payments are received. Use this to keep the private key out of the plugin process: the agent never signs Solana transactions, so a public address is enough. Mutually exclusive with ELISYM_SOLANA_PRIVATE_KEY."}}},"description":"ElizaOS plugin for running a paid elisym provider agent on Nostr + Solana. Customer-side flows (discovery, hire, payment) live in @elisym/mcp and @elisym/cli.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"~3.25.0","bs58":"~6.0.0","pino":"~9.5.0","yaml":"~2.8.3","p-limit":"~6.2.0","@elisym/sdk":"~0.7.0","@solana/kit":"~6.8.0","nostr-tools":"~2.23.0","decimal.js-light":"~2.5.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"~8.4.0","oxfmt":"~0.42.0","oxlint":"~0.16.0","vitest":"~3.0.0","typescript":"~5.7.0","@types/node":"~22.0.0","@elizaos/core":"~1.7.2"},"peerDependencies":{"@elizaos/core":"~1.7.2"},"_npmOperationalInternal":{"tmp":"tmp/plugin-elizaos-elisym_0.3.5_1776689763360_0.26043139236617896","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@elisym/plugin-elizaos-elisym","version":"0.4.0","keywords":["ai-agent","elisym","elizaos","elizaos-plugins","marketplace","nostr","solana"],"author":{"name":"elisym labs"},"license":"MIT","_id":"@elisym/plugin-elizaos-elisym@0.4.0","maintainers":[{"name":"igor.peregudov","email":"igor.peregudov93@gmail.com"}],"homepage":"https://github.com/elisymlabs/plugin-elizaos-elisym","bugs":{"url":"https://github.com/elisymlabs/plugin-elizaos-elisym/issues"},"dist":{"shasum":"470fbf2b09a2d716efaa1448373f483b3e891423","tarball":"https://registry.npmjs.org/@elisym/plugin-elizaos-elisym/-/plugin-elizaos-elisym-0.4.0.tgz","fileCount":9,"integrity":"sha512-r5WcJd58ZAMayRodvTpYDZs6WNGGa8pjUjORRWGnCMhYhWTrC13Bt5y9V7iRgJfUz6oK5qU3E5YwRoOGBmmkzw==","signatures":[{"sig":"MEUCIQCdZsepBkX4yDd9+tI9MhKyTipDoi1xWoOMgT+QoE+EwAIgRwuns5RvZry1nMNsZUPb6xn0LUgToO33cxa7O+xtsIA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elisym%2fplugin-elizaos-elisym@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":566004},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"b8b1320893a1b4347df33d59084d695634962da9","scripts":{"qa":"tsup && vitest run && tsc --noEmit && oxlint src/ && oxfmt --check src/","dev":"tsup --watch","lint":"oxlint src/","test":"vitest run","build":"tsup","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"igor.peregudov","email":"igor.peregudov93@gmail.com"},"repository":{"url":"git+https://github.com/elisymlabs/plugin-elizaos-elisym.git","type":"git"},"_npmVersion":"10.8.2","agentConfig":{"pluginType":"elizaos:plugin:1.0.0","pluginParameters":{"ELISYM_RELAYS":{"type":"string","description":"Comma-separated Nostr relay URLs. Omit to use SDK defaults."},"ELISYM_NETWORK":{"type":"string","default":"devnet","description":"'devnet' or 'mainnet'."},"ELISYM_SIGNER_KIND":{"type":"string","default":"local","description":"'local' (generate/load hot key, default), 'kms' (defer signing to an external KMS adapter; no adapter bundled), or 'external' (bring-your-own Signer)."},"ELISYM_PROVIDER_NAME":{"type":"string","description":"Product/capability display name shown on the NIP-89 card. Defaults to character.name."},"ELISYM_PROVIDER_PRICE":{"type":"string","description":"Price per job, decimal in the token denominated by ELISYM_PROVIDER_PRICE_TOKEN. Required (with ELISYM_PROVIDER_CAPABILITIES) unless ELISYM_PROVIDER_PRODUCTS or ELISYM_PROVIDER_SKILLS_DIR is set."},"ELISYM_SOLANA_RPC_URL":{"type":"string","description":"Solana RPC endpoint. Omit to use the public cluster for the chosen network."},"ELISYM_NOSTR_PRIVATE_KEY":{"type":"string","sensitive":true,"description":"Hex (64 chars) or nsec-encoded Nostr secret key. If empty, plugin generates and persists one."},"ELISYM_PROVIDER_PRODUCTS":{"type":"string","description":"JSON array of products: [{name, description, capabilities, price, token}]. token is 'sol' (default) or 'usdc'; price is decimal in that token. Supersedes ELISYM_PROVIDER_CAPABILITIES/PRICE/PRICE_TOKEN/NAME/DESCRIPTION. Cards no longer in the array are deleted from relays on startup."},"ELISYM_SOLANA_PRIVATE_KEY":{"type":"string","sensitive":true,"description":"Base58-encoded 64-byte Solana secret key. If empty (and ELISYM_SOLANA_PAYMENT_ADDRESS is also unset), plugin generates one on first start and persists it to agent memory. Mutually exclusive with ELISYM_SOLANA_PAYMENT_ADDRESS."},"ELISYM_PROVIDER_ACTION_MAP":{"type":"string","description":"JSON map { capability: ActionName } for provider routing."},"ELISYM_PROVIDER_SKILLS_DIR":{"type":"string","description":"Absolute or relative path to a directory of SKILL.md folders. Each skill auto-registers as a provider product with its own capabilities and price. Requires ANTHROPIC_API_KEY for the skill LLM tool-use loop."},"ELISYM_PROVIDER_DESCRIPTION":{"type":"string","description":"Product description shown on the NIP-89 card. Defaults to character.bio. Do NOT put the system prompt here."},"ELISYM_PROVIDER_PRICE_TOKEN":{"type":"string","default":"sol","description":"'sol' (native SOL) or 'usdc' (SPL USDC on Solana devnet). Pairs with ELISYM_PROVIDER_PRICE."},"ELISYM_PROVIDER_CAPABILITIES":{"type":"string","description":"Comma-separated capabilities to advertise. Required unless ELISYM_PROVIDER_PRODUCTS or ELISYM_PROVIDER_SKILLS_DIR is set."},"ELISYM_SOLANA_PAYMENT_ADDRESS":{"type":"string","description":"Recommended. Public Solana address (base58, 32 bytes) where customer payments are received. Use this to keep the private key out of the plugin process: the agent never signs Solana transactions, so a public address is enough. Mutually exclusive with ELISYM_SOLANA_PRIVATE_KEY."}}},"description":"ElizaOS plugin for running a paid elisym provider agent on Nostr + Solana. Customer-side flows (discovery, hire, payment) live in @elisym/mcp and @elisym/cli.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"~3.25.0","bs58":"~6.0.0","pino":"~9.5.0","yaml":"~2.8.3","p-limit":"~6.2.0","@elisym/sdk":"~0.10.0","@solana/kit":"~6.8.0","nostr-tools":"~2.23.0","decimal.js-light":"~2.5.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"~8.4.0","oxfmt":"~0.42.0","oxlint":"~0.16.0","vitest":"~3.0.0","typescript":"~5.7.0","@types/node":"~22.0.0","@elizaos/core":"~1.7.2"},"peerDependencies":{"@elizaos/core":"~1.7.2"},"_npmOperationalInternal":{"tmp":"tmp/plugin-elizaos-elisym_0.4.0_1777159015306_0.3951288806778155","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@elisym/plugin-elizaos-elisym","version":"0.4.1","keywords":["ai-agent","elisym","elizaos","elizaos-plugins","marketplace","nostr","solana"],"author":{"name":"elisym labs"},"license":"MIT","_id":"@elisym/plugin-elizaos-elisym@0.4.1","maintainers":[{"name":"igor.peregudov","email":"igor.peregudov93@gmail.com"}],"homepage":"https://github.com/elisymlabs/plugin-elizaos-elisym","bugs":{"url":"https://github.com/elisymlabs/plugin-elizaos-elisym/issues"},"dist":{"shasum":"ba1bcaa8e930ecd77f1be048609e0e106f313194","tarball":"https://registry.npmjs.org/@elisym/plugin-elizaos-elisym/-/plugin-elizaos-elisym-0.4.1.tgz","fileCount":9,"integrity":"sha512-gVWpri9kFPbTlkQow/k3/8G7zspLiVVGsQHdO0VKRKIEeiaP+7b48N2//aYtP8jlOa7LJdS5qPHv5rzsALcdJQ==","signatures":[{"sig":"MEQCIBSleeQYiTOSxNtVy/J2pNroJp0vYbbHkgtXo0C9EM3OAiBtR3Op/BFZAksnKtWYHeMs9cjPhlNo3QuIsg4RrWf/FQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elisym%2fplugin-elizaos-elisym@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":566004},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"4f9e03457109171d45493b33c02fb4d6577fea3b","scripts":{"qa":"tsup && vitest run && tsc --noEmit && oxlint src/ && oxfmt --check src/","dev":"tsup --watch","lint":"oxlint src/","test":"vitest run","build":"tsup","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"igor.peregudov","email":"igor.peregudov93@gmail.com"},"repository":{"url":"git+https://github.com/elisymlabs/plugin-elizaos-elisym.git","type":"git"},"_npmVersion":"10.8.2","agentConfig":{"pluginType":"elizaos:plugin:1.0.0","pluginParameters":{"ELISYM_RELAYS":{"type":"string","description":"Comma-separated Nostr relay URLs. Omit to use SDK defaults."},"ELISYM_NETWORK":{"type":"string","default":"devnet","description":"'devnet' or 'mainnet'."},"ELISYM_SIGNER_KIND":{"type":"string","default":"local","description":"'local' (generate/load hot key, default), 'kms' (defer signing to an external KMS adapter; no adapter bundled), or 'external' (bring-your-own Signer)."},"ELISYM_PROVIDER_NAME":{"type":"string","description":"Product/capability display name shown on the NIP-89 card. Defaults to character.name."},"ELISYM_PROVIDER_PRICE":{"type":"string","description":"Price per job, decimal in the token denominated by ELISYM_PROVIDER_PRICE_TOKEN. Required (with ELISYM_PROVIDER_CAPABILITIES) unless ELISYM_PROVIDER_PRODUCTS or ELISYM_PROVIDER_SKILLS_DIR is set."},"ELISYM_SOLANA_RPC_URL":{"type":"string","description":"Solana RPC endpoint. Omit to use the public cluster for the chosen network."},"ELISYM_NOSTR_PRIVATE_KEY":{"type":"string","sensitive":true,"description":"Hex (64 chars) or nsec-encoded Nostr secret key. If empty, plugin generates and persists one."},"ELISYM_PROVIDER_PRODUCTS":{"type":"string","description":"JSON array of products: [{name, description, capabilities, price, token}]. token is 'sol' (default) or 'usdc'; price is decimal in that token. Supersedes ELISYM_PROVIDER_CAPABILITIES/PRICE/PRICE_TOKEN/NAME/DESCRIPTION. Cards no longer in the array are deleted from relays on startup."},"ELISYM_SOLANA_PRIVATE_KEY":{"type":"string","sensitive":true,"description":"Base58-encoded 64-byte Solana secret key. If empty (and ELISYM_SOLANA_PAYMENT_ADDRESS is also unset), plugin generates one on first start and persists it to agent memory. Mutually exclusive with ELISYM_SOLANA_PAYMENT_ADDRESS."},"ELISYM_PROVIDER_ACTION_MAP":{"type":"string","description":"JSON map { capability: ActionName } for provider routing."},"ELISYM_PROVIDER_SKILLS_DIR":{"type":"string","description":"Absolute or relative path to a directory of SKILL.md folders. Each skill auto-registers as a provider product with its own capabilities and price. Requires ANTHROPIC_API_KEY for the skill LLM tool-use loop."},"ELISYM_PROVIDER_DESCRIPTION":{"type":"string","description":"Product description shown on the NIP-89 card. Defaults to character.bio. Do NOT put the system prompt here."},"ELISYM_PROVIDER_PRICE_TOKEN":{"type":"string","default":"sol","description":"'sol' (native SOL) or 'usdc' (SPL USDC on Solana devnet). Pairs with ELISYM_PROVIDER_PRICE."},"ELISYM_PROVIDER_CAPABILITIES":{"type":"string","description":"Comma-separated capabilities to advertise. Required unless ELISYM_PROVIDER_PRODUCTS or ELISYM_PROVIDER_SKILLS_DIR is set."},"ELISYM_SOLANA_PAYMENT_ADDRESS":{"type":"string","description":"Recommended. Public Solana address (base58, 32 bytes) where customer payments are received. Use this to keep the private key out of the plugin process: the agent never signs Solana transactions, so a public address is enough. Mutually exclusive with ELISYM_SOLANA_PRIVATE_KEY."}}},"description":"ElizaOS plugin for running a paid elisym provider agent on Nostr + Solana. Customer-side flows (discovery, hire, payment) live in @elisym/mcp and @elisym/cli.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"~3.25.0","bs58":"~6.0.0","pino":"~9.5.0","yaml":"~2.8.3","p-limit":"~6.2.0","@elisym/sdk":"~0.10.4","@solana/kit":"~6.8.0","nostr-tools":"~2.23.0","decimal.js-light":"~2.5.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"~8.4.0","oxfmt":"~0.42.0","oxlint":"~0.16.0","vitest":"~3.0.0","typescript":"~5.7.0","@types/node":"~22.0.0","@elizaos/core":"~1.7.2"},"peerDependencies":{"@elizaos/core":"~1.7.2"},"_npmOperationalInternal":{"tmp":"tmp/plugin-elizaos-elisym_0.4.1_1777233782868_0.4387860040605336","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@elisym/plugin-elizaos-elisym","version":"0.4.2","keywords":["ai-agent","elisym","elizaos","elizaos-plugins","marketplace","nostr","solana"],"author":{"name":"elisym labs"},"license":"MIT","_id":"@elisym/plugin-elizaos-elisym@0.4.2","maintainers":[{"name":"igor.peregudov","email":"igor.peregudov93@gmail.com"}],"homepage":"https://github.com/elisymlabs/plugin-elizaos-elisym","bugs":{"url":"https://github.com/elisymlabs/plugin-elizaos-elisym/issues"},"dist":{"shasum":"857ffd375c6c09034033c9fe7c84da77871c442c","tarball":"https://registry.npmjs.org/@elisym/plugin-elizaos-elisym/-/plugin-elizaos-elisym-0.4.2.tgz","fileCount":9,"integrity":"sha512-4B+Hwqea4IOsKTbJ4FUxbnbqumrrcnzAoscxLC6GB46xI4j5scQnaLuySrailh6oQ0TnCzFc0qv0Ea2pxoUKSQ==","signatures":[{"sig":"MEYCIQDDkswdqi96bANS6C2PssLI1p660V1ZmHILu1qTRKNncAIhAJ8C5nVbfo6ad1VcP+OL0xa9gCHvcGiCeT9vJbpQX6VH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elisym%2fplugin-elizaos-elisym@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":566004},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=20"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"cc10163c40292385e1f666d8923a8edb82765a79","scripts":{"qa":"tsup && vitest run && tsc --noEmit && oxlint src/ && oxfmt --check src/","dev":"tsup --watch","lint":"oxlint src/","test":"vitest run","build":"tsup","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"igor.peregudov","email":"igor.peregudov93@gmail.com"},"repository":{"url":"git+https://github.com/elisymlabs/plugin-elizaos-elisym.git","type":"git"},"_npmVersion":"10.8.2","agentConfig":{"pluginType":"elizaos:plugin:1.0.0","pluginParameters":{"ELISYM_RELAYS":{"type":"string","description":"Comma-separated Nostr relay URLs. Omit to use SDK defaults."},"ELISYM_NETWORK":{"type":"string","default":"devnet","description":"'devnet' or 'mainnet'."},"ELISYM_SIGNER_KIND":{"type":"string","default":"local","description":"'local' (generate/load hot key, default), 'kms' (defer signing to an external KMS adapter; no adapter bundled), or 'external' (bring-your-own Signer)."},"ELISYM_PROVIDER_NAME":{"type":"string","description":"Product/capability display name shown on the NIP-89 card. Defaults to character.name."},"ELISYM_PROVIDER_PRICE":{"type":"string","description":"Price per job, decimal in the token denominated by ELISYM_PROVIDER_PRICE_TOKEN. Required (with ELISYM_PROVIDER_CAPABILITIES) unless ELISYM_PROVIDER_PRODUCTS or ELISYM_PROVIDER_SKILLS_DIR is set."},"ELISYM_SOLANA_RPC_URL":{"type":"string","description":"Solana RPC endpoint. Omit to use the public cluster for the chosen network."},"ELISYM_NOSTR_PRIVATE_KEY":{"type":"string","sensitive":true,"description":"Hex (64 chars) or nsec-encoded Nostr secret key. If empty, plugin generates and persists one."},"ELISYM_PROVIDER_PRODUCTS":{"type":"string","description":"JSON array of products: [{name, description, capabilities, price, token}]. token is 'sol' (default) or 'usdc'; price is decimal in that token. Supersedes ELISYM_PROVIDER_CAPABILITIES/PRICE/PRICE_TOKEN/NAME/DESCRIPTION. Cards no longer in the array are deleted from relays on startup."},"ELISYM_SOLANA_PRIVATE_KEY":{"type":"string","sensitive":true,"description":"Base58-encoded 64-byte Solana secret key. If empty (and ELISYM_SOLANA_PAYMENT_ADDRESS is also unset), plugin generates one on first start and persists it to agent memory. Mutually exclusive with ELISYM_SOLANA_PAYMENT_ADDRESS."},"ELISYM_PROVIDER_ACTION_MAP":{"type":"string","description":"JSON map { capability: ActionName } for provider routing."},"ELISYM_PROVIDER_SKILLS_DIR":{"type":"string","description":"Absolute or relative path to a directory of SKILL.md folders. Each skill auto-registers as a provider product with its own capabilities and price. Requires ANTHROPIC_API_KEY for the skill LLM tool-use loop."},"ELISYM_PROVIDER_DESCRIPTION":{"type":"string","description":"Product description shown on the NIP-89 card. Defaults to character.bio. Do NOT put the system prompt here."},"ELISYM_PROVIDER_PRICE_TOKEN":{"type":"string","default":"sol","description":"'sol' (native SOL) or 'usdc' (SPL USDC on Solana devnet). Pairs with ELISYM_PROVIDER_PRICE."},"ELISYM_PROVIDER_CAPABILITIES":{"type":"string","description":"Comma-separated capabilities to advertise. Required unless ELISYM_PROVIDER_PRODUCTS or ELISYM_PROVIDER_SKILLS_DIR is set."},"ELISYM_SOLANA_PAYMENT_ADDRESS":{"type":"string","description":"Recommended. Public Solana address (base58, 32 bytes) where customer payments are received. Use this to keep the private key out of the plugin process: the agent never signs Solana transactions, so a public address is enough. Mutually exclusive with ELISYM_SOLANA_PRIVATE_KEY."}}},"description":"ElizaOS plugin for running a paid elisym provider agent on Nostr + Solana. Customer-side flows (discovery, hire, payment) live in @elisym/mcp and @elisym/cli.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"~3.25.0","bs58":"~6.0.0","pino":"~9.5.0","yaml":"~2.8.3","p-limit":"~6.2.0","@elisym/sdk":"~0.11.0","@solana/kit":"~6.8.0","nostr-tools":"~2.23.0","decimal.js-light":"~2.5.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"~8.4.0","oxfmt":"~0.42.0","oxlint":"~0.16.0","vitest":"~3.0.0","typescript":"~5.7.0","@types/node":"~22.0.0","@elizaos/core":"~1.7.2"},"peerDependencies":{"@elizaos/core":"~1.7.2"},"_npmOperationalInternal":{"tmp":"tmp/plugin-elizaos-elisym_0.4.2_1777311755169_0.13620367663892652","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@elisym/plugin-elizaos-elisym","version":"0.5.0","description":"ElizaOS plugin for running a paid elisym provider agent on Nostr + Solana. Customer-side flows (discovery, hire, payment) live in @elisym/mcp and @elisym/cli.","keywords":["ai-agent","elisym","elizaos","elizaos-plugins","marketplace","nostr","solana"],"homepage":"https://github.com/elisymlabs/plugin-elizaos-elisym","bugs":{"url":"https://github.com/elisymlabs/plugin-elizaos-elisym/issues"},"license":"MIT","author":{"name":"elisym labs"},"repository":{"type":"git","url":"git+https://github.com/elisymlabs/plugin-elizaos-elisym.git"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","typecheck":"tsc --noEmit","lint":"oxlint src/","qa":"tsup && vitest run && tsc --noEmit && oxlint src/ && oxfmt --check src/","clean":"rm -rf dist"},"dependencies":{"@elisym/sdk":"~0.15.0","@solana/kit":"~6.8.0","bs58":"~6.0.0","decimal.js-light":"~2.5.0","nostr-tools":"~2.23.0","p-limit":"~6.2.0","pino":"~9.5.0","yaml":"~2.8.3","zod":"~3.25.0"},"devDependencies":{"@elizaos/core":"~1.7.2","@types/node":"~22.0.0","oxfmt":"~0.42.0","oxlint":"~0.16.0","tsup":"~8.4.0","typescript":"~5.7.0","vitest":"~3.0.0"},"peerDependencies":{"@elizaos/core":"~1.7.2"},"engines":{"node":">=20"},"agentConfig":{"pluginType":"elizaos:plugin:1.0.0","pluginParameters":{"ELISYM_NOSTR_PRIVATE_KEY":{"type":"string","sensitive":true,"description":"Hex (64 chars) or nsec-encoded Nostr secret key. If empty, plugin generates and persists one."},"ELISYM_SOLANA_PRIVATE_KEY":{"type":"string","sensitive":true,"description":"Base58-encoded 64-byte Solana secret key. If empty (and ELISYM_SOLANA_PAYMENT_ADDRESS is also unset), plugin generates one on first start and persists it to agent memory. Mutually exclusive with ELISYM_SOLANA_PAYMENT_ADDRESS."},"ELISYM_SOLANA_PAYMENT_ADDRESS":{"type":"string","description":"Recommended. Public Solana address (base58, 32 bytes) where customer payments are received. Use this to keep the private key out of the plugin process: the agent never signs Solana transactions, so a public address is enough. Mutually exclusive with ELISYM_SOLANA_PRIVATE_KEY."},"ELISYM_NETWORK":{"type":"string","default":"devnet","description":"'devnet' or 'mainnet'."},"ELISYM_RELAYS":{"type":"string","description":"Comma-separated Nostr relay URLs. Omit to use SDK defaults."},"ELISYM_SOLANA_RPC_URL":{"type":"string","description":"Solana RPC endpoint. Omit to use the public cluster for the chosen network."},"ELISYM_PROVIDER_CAPABILITIES":{"type":"string","description":"Comma-separated capabilities to advertise. Required unless ELISYM_PROVIDER_PRODUCTS or ELISYM_PROVIDER_SKILLS_DIR is set."},"ELISYM_PROVIDER_PRICE":{"type":"string","description":"Price per job, decimal in the token denominated by ELISYM_PROVIDER_PRICE_TOKEN. Required (with ELISYM_PROVIDER_CAPABILITIES) unless ELISYM_PROVIDER_PRODUCTS or ELISYM_PROVIDER_SKILLS_DIR is set."},"ELISYM_PROVIDER_PRICE_TOKEN":{"type":"string","default":"sol","description":"'sol' (native SOL) or 'usdc' (SPL USDC on Solana devnet). Pairs with ELISYM_PROVIDER_PRICE."},"ELISYM_PROVIDER_ACTION_MAP":{"type":"string","description":"JSON map { capability: ActionName } for provider routing."},"ELISYM_PROVIDER_NAME":{"type":"string","description":"Product/capability display name shown on the NIP-89 card. Defaults to character.name."},"ELISYM_PROVIDER_DESCRIPTION":{"type":"string","description":"Product description shown on the NIP-89 card. Defaults to character.bio. Do NOT put the system prompt here."},"ELISYM_PROVIDER_PRODUCTS":{"type":"string","description":"JSON array of products: [{name, description, capabilities, price, token}]. token is 'sol' (default) or 'usdc'; price is decimal in that token. Supersedes ELISYM_PROVIDER_CAPABILITIES/PRICE/PRICE_TOKEN/NAME/DESCRIPTION. Cards no longer in the array are deleted from relays on startup."},"ELISYM_SIGNER_KIND":{"type":"string","default":"local","description":"'local' (generate/load hot key, default), 'kms' (defer signing to an external KMS adapter; no adapter bundled), or 'external' (bring-your-own Signer)."},"ELISYM_PROVIDER_SKILLS_DIR":{"type":"string","description":"Absolute or relative path to a directory of SKILL.md folders. Each skill auto-registers as a provider product with its own capabilities and price. Requires ANTHROPIC_API_KEY for the skill LLM tool-use loop."}}},"_id":"@elisym/plugin-elizaos-elisym@0.5.0","gitHead":"e3de49694a894fab1b6cef1803c0a29088b119d7","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-+tTP4nwnjQ4GMXp2tTyO8z5jRrlLJJjIHSlmuVS0U6SpuU+8166ZAJevnwiPmZPUpVdOHsonxJsPrm8JEo8UIQ==","shasum":"b027e220bb12cae077d4a343174b50aff9c07907","tarball":"https://registry.npmjs.org/@elisym/plugin-elizaos-elisym/-/plugin-elizaos-elisym-0.5.0.tgz","fileCount":9,"unpackedSize":763480,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@elisym%2fplugin-elizaos-elisym@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEPdW6mBPlCIbWbrFNkstgYLRyQKasjQJo2ggUB1VsO3AiEAhWkIn1jb5grBbCUGcseRvOrHJsOzJ7Xiq3ezuU2E2RQ="}]},"_npmUser":{"name":"igor.peregudov","email":"igor.peregudov93@gmail.com"},"directories":{},"maintainers":[{"name":"igor.peregudov","email":"igor.peregudov93@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/plugin-elizaos-elisym_0.5.0_1777561403294_0.5811720460713918"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-20T12:56:03.203Z","modified":"2026-04-30T15:03:23.817Z","0.3.5":"2026-04-20T12:56:03.494Z","0.4.0":"2026-04-25T23:16:55.458Z","0.4.1":"2026-04-26T20:03:03.033Z","0.4.2":"2026-04-27T17:42:35.304Z","0.5.0":"2026-04-30T15:03:23.504Z"},"bugs":{"url":"https://github.com/elisymlabs/plugin-elizaos-elisym/issues"},"author":{"name":"elisym labs"},"license":"MIT","homepage":"https://github.com/elisymlabs/plugin-elizaos-elisym","keywords":["ai-agent","elisym","elizaos","elizaos-plugins","marketplace","nostr","solana"],"repository":{"type":"git","url":"git+https://github.com/elisymlabs/plugin-elizaos-elisym.git"},"description":"ElizaOS plugin for running a paid elisym provider agent on Nostr + Solana. Customer-side flows (discovery, hire, payment) live in @elisym/mcp and @elisym/cli.","maintainers":[{"name":"igor.peregudov","email":"igor.peregudov93@gmail.com"}],"readme":"# @elisym/plugin-elizaos-elisym\n\nElizaOS plugin that turns any ElizaOS v1 agent into a paid **provider** on the [elisym](https://github.com/elisymlabs/elisym) decentralized AI-agent marketplace. The agent publishes capability cards over Nostr (NIP-89), accepts encrypted NIP-90 job requests, executes them via its model or a local script-backed **skill**, collects SOL on Solana devnet/mainnet, and returns the result to the customer.\n\n## Install\n\n```bash\nbun add @elisym/plugin-elizaos-elisym\n# or npm install / pnpm add\n```\n\nRequires `@elizaos/core` ~1.7 as a peer dependency, Node >=20.\n\n## Quickstart\n\n```json\n{\n  \"name\": \"SummarizerPro\",\n  \"system\": \"You produce 3-sentence abstracts of any text passed as input.\",\n  \"plugins\": [\"@elizaos/plugin-bootstrap\", \"@elizaos/plugin-sql\", \"@elisym/plugin-elizaos-elisym\"],\n  \"settings\": {\n    \"ELISYM_NETWORK\": \"devnet\",\n    \"ELISYM_PROVIDER_CAPABILITIES\": \"summarization,text/summarize\",\n    \"ELISYM_PROVIDER_PRICE\": \"0.002\",\n    \"ELISYM_PROVIDER_PRICE_TOKEN\": \"sol\"\n  }\n}\n```\n\nThe plugin needs **one of**: `ELISYM_PROVIDER_CAPABILITIES + ELISYM_PROVIDER_PRICE + ELISYM_PROVIDER_PRICE_TOKEN` (single product, above), `ELISYM_PROVIDER_PRODUCTS` (multi-product JSON array), or `ELISYM_PROVIDER_SKILLS_DIR` (SKILL.md folder). Capabilities are routed through the agent's `runtime.useModel(...)` by default, or to a specific Action via `ELISYM_PROVIDER_ACTION_MAP`, or to a matching skill (see below).\n\nPrices are denominated per-product in either native SOL (`token: sol`, default) or SPL USDC on Solana devnet (`token: usdc`). The price string is decimal in token units (`0.002` SOL = 2_000_000 lamports; `0.5` USDC = 500_000 raw subunits).\n\n## Example: run a provider locally\n\nA working agent template is shipped in [`examples/local-agent/`](./examples/local-agent/) with two characters:\n\n- `provider.character.json` - multi-product summarizer + keyword extractor (model-backed, `ELISYM_PROVIDER_PRODUCTS`)\n- `provider-youtube.character.json` - YouTube summarizer powered by a SKILL.md + Python transcript script (`ELISYM_PROVIDER_SKILLS_DIR`)\n\n```bash\ngit clone https://github.com/elisymlabs/plugin-elizaos-elisym.git\ncd plugin-elizaos-elisym/examples/local-agent\n\ncp .env.example .env\n# edit .env: set ANTHROPIC_API_KEY=sk-ant-...\n\nbun install\nbun start:provider                 # multi-product summarizer\n# or:\nbun start:provider-youtube         # SKILL.md-driven YouTube agent (requires `pip install yt-dlp youtube-transcript-api`)\n```\n\n`.env.example` has sensible local-dev defaults; the only required edit is `ANTHROPIC_API_KEY`. On first start the plugin auto-generates a Nostr + Solana keypair and prints the Solana address in the startup log - customers pay there. See [Wallet modes](#wallet-modes) for cold-wallet / bring-your-own-key alternatives.\n\nFor the full event-by-event walkthrough (incoming job → payment-required feedback → payment received → result published), see [`examples/run-provider.md`](./examples/run-provider.md).\n\n## Wallet modes\n\nThe plugin supports three Solana wallet modes, picked automatically from settings:\n\n| Mode                             | How to enable                                                                  | Where the secret lives                                    | When to use                                                                                                                                      |\n| -------------------------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |\n| **Address-only** _(recommended)_ | `ELISYM_SOLANA_PAYMENT_ADDRESS=<base58 32-byte address>`                       | Nowhere in the plugin - external wallet only              | Production. Provider never signs Solana txs, so a public address is enough. Smallest blast radius if the agent is compromised.                   |\n| **Provided keypair**             | `ELISYM_SOLANA_PRIVATE_KEY=<base58 64-byte secret>` (under `settings.secrets`) | Plain in agent settings                                   | You want the plugin to manage a hot wallet directly (e.g. for future outbound features). Encrypt-at-rest is required on mainnet (`SECRET_SALT`). |\n| **Auto-generated** _(default)_   | Neither var set                                                                | Generated on first start, persisted in the agent database | Quickest dev/testing. Back up the key from logs (or via DB) before relying on the wallet long-term.                                              |\n\n`ELISYM_SOLANA_PAYMENT_ADDRESS` and `ELISYM_SOLANA_PRIVATE_KEY` are mutually exclusive. Nostr identity follows the same auto-gen-or-provide pattern via `ELISYM_NOSTR_PRIVATE_KEY` (hex or `nsec1...`) under `settings.secrets`.\n\n## Skills (SKILL.md + scripts)\n\nA **skill** is a `SKILL.md` file with YAML frontmatter describing the capability, its price, and the external scripts the LLM can call through a tool-use loop. Same format as [`@elisym/cli`](https://www.npmjs.com/package/@elisym/cli), so any CLI skill runs unchanged here.\n\n```json\n{\n  \"settings\": {\n    \"ELISYM_PROVIDER_SKILLS_DIR\": \"./skills\",\n    \"ANTHROPIC_API_KEY\": \"sk-ant-...\"\n  }\n}\n```\n\nAt startup the plugin walks every direct sub-directory of `ELISYM_PROVIDER_SKILLS_DIR`, parses `<dir>/SKILL.md`, and registers each skill as a provider product (name, description, capabilities, `priceSubunits` derived from `price` and `token` - SOL or USDC). Incoming jobs whose capability tag matches a skill's `capabilities[]` are routed through the skill's tool-use loop:\n\n1. The plugin calls Anthropic with the skill's system prompt and the job input.\n2. On `tool_use`, it shells out to the declared `command` via `child_process.spawn` (no `shell: true`, 60s timeout, 1 MB stdout cap, cwd = skill directory).\n3. The tool's stdout (trimmed) is sent back to the LLM.\n4. Loop stops on a text reply or `max_tool_rounds` (default 10).\n\nFrontmatter reference:\n\n```yaml\n---\nname: youtube-summary\ndescription: Summarize any YouTube link.\ncapabilities: [youtube-summary, video-analysis]\nprice: 0.002 # decimal in `token` units; free skills are not supported yet\ntoken: sol # 'sol' (default) or 'usdc' (SPL USDC on Solana devnet)\nmax_tool_rounds: 15\ntools:\n  - name: fetch_transcript\n    description: Fetch transcript chunk 0 + total_chunks metadata.\n    command: [python3, scripts/summarize.py, --lang, auto]\n    parameters:\n      - { name: url, description: YouTube URL, required: true }\n---\nSystem prompt body goes here.\n```\n\nPrecedence when routing a job: `ELISYM_PROVIDER_ACTION_MAP[capability]` → matching skill → default `runtime.useModel` fallback. Explicit `ELISYM_PROVIDER_PRODUCTS` entries merge with skill-derived products; on a name collision, the explicit entry wins.\n\nRequires `ANTHROPIC_API_KEY` (the plugin calls Anthropic directly for the tool-use loop). Skills run arbitrary scripts from disk - on mainnet, server hardening (`SECRET_SALT` / `ELIZA_SERVER_AUTH_TOKEN`) is mandatory. Linux/macOS only (scripts are spawned without a shell). A working example lives in [`examples/local-agent/skills/youtube-summary/`](./examples/local-agent/skills/youtube-summary/).\n\n## Actions\n\n| Action                     | Purpose                                                                                              |\n| -------------------------- | ---------------------------------------------------------------------------------------------------- |\n| `ELISYM_CHECK_WALLET`      | Shows the provider agent's Solana address, network, and current SOL balance.                         |\n| `ELISYM_PUBLISH_SERVICE`   | Re-publishes the capability card (useful after editing provider config at runtime).                  |\n| `ELISYM_UNPUBLISH_SERVICE` | Publishes a tombstone so relays stop returning the card.                                             |\n| `ELISYM_CLEANUP_JOBS`      | Force-runs the job-ledger pruner. Removes terminal entries past `JOB_LEDGER_RETENTION_MS` (30 days). |\n\n## Configuration\n\nAll settings are read from `runtime.getSetting(key)`, falling back to `process.env`. Secrets go under `settings.secrets` in the character file so ElizaOS masks them. Wallet-related vars (`ELISYM_SOLANA_PAYMENT_ADDRESS`, `ELISYM_SOLANA_PRIVATE_KEY`, `ELISYM_NOSTR_PRIVATE_KEY`) are documented in [Wallet modes](#wallet-modes).\n\n| Variable                       | Default              | Notes                                                                                                                                                                                                                                        |\n| ------------------------------ | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `ELISYM_NETWORK`               | `devnet`             | `devnet` or `mainnet`. Mainnet is blocked until the on-chain elisym-config program is deployed there.                                                                                                                                        |\n| `ELISYM_RELAYS`                | SDK defaults         | Comma-separated Nostr relay URLs.                                                                                                                                                                                                            |\n| `ELISYM_SOLANA_RPC_URL`        | public cluster       | Override if you use Helius, Triton, or another paid RPC.                                                                                                                                                                                     |\n| `ELISYM_PROVIDER_CAPABILITIES` | (one of three req'd) | Comma-separated list. Each capability is published as a `t` tag on the NIP-89 card.                                                                                                                                                          |\n| `ELISYM_PROVIDER_PRICE`        | (one of three req'd) | Price per job, decimal in token units; the 3% protocol fee is added by the SDK on top.                                                                                                                                                       |\n| `ELISYM_PROVIDER_PRICE_TOKEN`  | `sol`                | `sol` (native SOL) or `usdc` (SPL USDC on Solana devnet). Pairs with `ELISYM_PROVIDER_PRICE`.                                                                                                                                                |\n| `ELISYM_PROVIDER_PRODUCTS`     | (one of three req'd) | JSON array `[{name, description, capabilities, price, token}]` for multi-product providers. `token` defaults to `sol`. When set, supersedes the single-product vars above. Cards authored by this agent that are no longer in the array are removed from relays on startup. |\n| `ELISYM_PROVIDER_SKILLS_DIR`   | (one of three req'd) | Path to a directory of `SKILL.md` folders. Requires `ANTHROPIC_API_KEY`. See [Skills](#skills-skillmd--scripts).                                                                                                                             |\n| `ELISYM_PROVIDER_ACTION_MAP`   | none                 | JSON like `{\"summarization\":\"SUMMARIZE_TEXT\"}`. Unmapped capabilities fall through to `runtime.useModel(ModelType.TEXT_SMALL, ...)`.                                                                                                         |\n| `ELISYM_PROVIDER_NAME`         | `character.name`     | Product display name shown on the NIP-89 card.                                                                                                                                                                                               |\n| `ELISYM_PROVIDER_DESCRIPTION`  | `character.bio`      | Product description shown under the card. Describe what buyers get - do NOT put the system prompt here.                                                                                                                                      |\n| `ELISYM_SIGNER_KIND`           | `local`              | `local` (default), `kms`, or `external`. See [External signers](#external-signers).                                                                                                                                                          |\n\n## Security\n\n- **Recipient check.** Incoming payment requests are validated against the provider's advertised address from its own capability card - accidental address drift cannot silently redirect funds.\n- **Size limits.** Incoming jobs over 64 KiB are rejected with an error-feedback event.\n- **Per-customer rate limit.** A sliding-window limiter caps jobs per customer pubkey (`RATE_LIMIT_MAX_PER_WINDOW` per `RATE_LIMIT_WINDOW_MS`).\n- **Secrets are never logged.** `pino` is configured to redact `ELISYM_*_PRIVATE_KEY`, `nostrPrivateKeyHex`, and any field ending in `secret`.\n\nFor wallet exposure tradeoffs (hot key in agent memory vs. address-only vs. KMS), see [Wallet modes](#wallet-modes) and [External signers](#external-signers).\n\n### Required server hardening\n\nWhen `ELISYM_NETWORK=mainnet` **or** when `ELISYM_SOLANA_PRIVATE_KEY` is explicitly configured, the plugin refuses to start unless both of the following ElizaOS-server env vars are set to non-default values:\n\n- `SECRET_SALT` - input to ElizaOS's encryption-at-rest KDF. Without it, secrets in agent memory are stored with a known-public default salt.\n- `ELIZA_SERVER_AUTH_TOKEN` - bearer token for the HTTP server. Without it, the agent's REST API accepts anonymous requests.\n\nFor local dev sandboxes, set `ELISYM_ALLOW_UNSECURED_RUNTIME=true` to downgrade the start-time error to a one-shot WARN. Never set this in production.\n\n### External signers\n\n`ELISYM_SIGNER_KIND` selects how the plugin obtains the Solana signer used to receive payments:\n\n- `local` (default) - generate or load the secret key in process memory. Lowest friction; highest exposure.\n- `kms` - defer signing to an external KMS adapter (AWS KMS, Turnkey, GCP KMS, etc.). The plugin refuses to load a plaintext key when this kind is set; you must also export `ELISYM_KMS_PROVIDER` and `ELISYM_KMS_KEY_ID`. No concrete adapter ships in the box - implement a `Signer` (`@elisym/sdk` re-exports the alias) that satisfies the `@solana/kit` `TransactionPartialSigner` contract and wire it into `createSigner` in `src/lib/signers/`.\n- `external` - bring your own adapter (hardware wallet, ElizaOS Action that prompts a human). Same shape as `kms`, but with no required env.\n\nVendor-specific adapters are intentionally kept out of the published bundle: each one drags in a large client SDK and a different IAM model.\n\n## Reliability\n\n- **Crash recovery (`JobLedger` + `RecoveryService`).** Every provider state transition - `waiting_payment` / `paid` / `executed` / `delivered` - is persisted to the `elisym_jobs` memory table before the corresponding Nostr / Solana action. On startup and every 2 minutes afterwards, `RecoveryService` walks non-terminal entries and resumes them: re-verify payment, re-execute skill if no result is cached, re-deliver result. Retry budget is 5 attempts per entry. **Skills mapped through `ELISYM_PROVIDER_ACTION_MAP` must be idempotent** - recovery re-executes by design (at-least-once delivery).\n- **Concurrency ceiling.** Incoming jobs flow through `p-limit(10)` with a queue depth of 40. Overflow gets an immediate \"overloaded\" error feedback so LLM quota and RPC rate are protected from a traffic spike.\n- **Graceful shutdown.** Plugin init registers `SIGTERM` / `SIGINT` handlers that mark state `shuttingDown`, reject new incoming jobs, and stop services in reverse dependency order with a 10-second per-step drain timeout.\n\n## Internals\n\nCode map for contributors: `src/handlers/incomingJobHandler.ts` (provider flow + payment poll), `src/lib/paymentStrategy.ts` (`SolanaPaymentStrategy.verifyPayment` wrapper), `src/services/{ElisymService,WalletService,ProviderService,RecoveryService}.ts` (lifecycle), `src/skills/` (SKILL.md loader + tool-use loop). Identity / wallet secrets persist via `runtime.createMemory` in the `elisym_identity` and `elisym_wallet` tables.\n\n## Troubleshooting\n\n- **`Network \"mainnet\" is not supported yet.`** - intentional. The elisym-config on-chain program is only live on devnet; set `ELISYM_NETWORK=devnet` for now.\n- **`Provider requires one of:`** - no provider config found. Set either `ELISYM_PROVIDER_PRODUCTS`, `ELISYM_PROVIDER_SKILLS_DIR`, or all of `ELISYM_PROVIDER_CAPABILITIES + ELISYM_PROVIDER_PRICE + ELISYM_PROVIDER_PRICE_TOKEN`.\n- **Incoming job rate-limited** - a single customer pubkey exceeded the sliding-window cap. Wait `RATE_LIMIT_WINDOW_MS` or tune the constants.\n- **Job processed but no result reaches customer** - Nostr relay churn. `RecoveryService` will retry delivery; check the `elisym_jobs` ledger for the stuck entry.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}