{"_id":"@blockrun/franklin-trading","_rev":"8-fdb7903b18e9f329933bd3d754a200a1","name":"@blockrun/franklin-trading","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@blockrun/franklin-trading","version":"0.1.0","keywords":["franklin","franklin-trading","ai-trading-agent","autonomous-economic-agent","wallet-native","agent-with-wallet","x402","usdc","pay-per-action","multi-model","backtest","paper-trading","live-trading","hyperliquid","jupiter","0x","polymarket","crypto-trading","blockrun"],"license":"Apache-2.0","_id":"@blockrun/franklin-trading@0.1.0","maintainers":[{"name":"1bcmax","email":"viewitter@gmail.com"}],"homepage":"https://trading.franklin.run","bugs":{"url":"https://github.com/BlockRunAI/Franklin-Trading/issues"},"bin":{"franklin-trading":"dist/index.js"},"dist":{"shasum":"bdf272285e2ad8e78fd59260f7657f761f5cc477","tarball":"https://registry.npmjs.org/@blockrun/franklin-trading/-/franklin-trading-0.1.0.tgz","fileCount":358,"integrity":"sha512-t3ZytygHH3VQ9Ywj1wvn8dd7qif1oVsGqzy9Qe/g0YLA6/spU+8l71SKlQWzIo8VMRreBOt7ZIYe4pvDg1Mk5A==","signatures":[{"sig":"MEUCIQDAv3JOUxtHiVakJS9StArE6o8ypWmRqbjYigD58UOmMQIgGveJAnTwKxzFNFEP+BVwDbGaIYy5PwJyV8fJXqATx54=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4242464},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./wallet":{"types":"./dist/wallet/index.d.ts","default":"./dist/wallet/index.js"},"./strategy":{"types":"./dist/strategies/index.d.ts","default":"./dist/strategies/index.js"},"./plugin-sdk":{"types":"./dist/plugin-sdk/index.d.ts","default":"./dist/plugin-sdk/index.js"},"./package.json":"./package.json"},"gitHead":"181b4f3f25e59e894aaf7830024bb77d508c0a70","scripts":{"dev":"tsc --watch","test":"npm run build && node --test --test-reporter=spec test/local.mjs test/skills.local.mjs","build":"tsc && node scripts/copy-plugin-assets.mjs","start":"node dist/index.js","test:all":"npm run test && npm run test:strategies && npm run test:e2e","test:e2e":"npm run build && node --test --test-reporter=spec test/e2e.mjs","test:watch":"node --test --watch test/local.mjs test/skills.local.mjs","test:strategies":"npm run build && node --test --test-reporter=spec test/strategies.mjs","test:free-models":"npm run build && node --test --test-reporter=spec test/free-model-matrix.mjs"},"_npmUser":{"name":"1bcmax","email":"viewitter@gmail.com"},"repository":{"url":"git+https://github.com/BlockRunAI/Franklin-Trading.git","type":"git"},"_npmVersion":"10.9.2","description":"Franklin Trading — The AI trading agent with a wallet. Researches, backtests, paper-trades and live-trades autonomously, paying per call in USDC. Crypto-first. Apache-2.0.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"ink":"^6.8.0","bs58":"^6.0.0","viem":"^2.48.1","chalk":"^5.4.0","react":"^19.2.4","sharp":"^0.34.5","qrcode":"^1.5.4","commander":"^13.0.0","ink-spinner":"^5.0.0","@types/react":"^19.2.14","@blockrun/llm":"^2.0.0","ink-text-input":"^6.0.0","@solana/web3.js":"^1.98.4","@solana/spl-token":"^0.4.14","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.0.0","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/franklin-trading_0.1.0_1780300184882_0.7133031882189249","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@blockrun/franklin-trading","version":"0.2.0","keywords":["franklin","franklin-trading","ai-trading-agent","autonomous-economic-agent","wallet-native","agent-with-wallet","x402","usdc","pay-per-action","multi-model","backtest","paper-trading","live-trading","hyperliquid","jupiter","0x","polymarket","crypto-trading","blockrun"],"license":"Apache-2.0","_id":"@blockrun/franklin-trading@0.2.0","maintainers":[{"name":"1bcmax","email":"viewitter@gmail.com"}],"homepage":"https://trading.franklin.run","bugs":{"url":"https://github.com/BlockRunAI/Franklin-Trading/issues"},"bin":{"franklin-trading":"dist/index.js"},"dist":{"shasum":"fb03ef780fa7b04a1d3a2bad89019ff41ffb0997","tarball":"https://registry.npmjs.org/@blockrun/franklin-trading/-/franklin-trading-0.2.0.tgz","fileCount":360,"integrity":"sha512-2cL5kiNRwvAqVOG5Mh9sW3hBeXkW9zgKyPg8FA6jCUi1jb8N/VFCWc2/7MXV0STKn4sS06KL8GSGbNAOvoec5A==","signatures":[{"sig":"MEYCIQCkaNSjoBPX/9Qdl7wVGnySlBvBrAhtCFlNcpLHXUrHNgIhAP7ccvFUkuXrbis1qdRhbUkt1RzHDK2fQbYvouVIQaie","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4246757},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./wallet":{"types":"./dist/wallet/index.d.ts","default":"./dist/wallet/index.js"},"./strategy":{"types":"./dist/strategies/index.d.ts","default":"./dist/strategies/index.js"},"./plugin-sdk":{"types":"./dist/plugin-sdk/index.d.ts","default":"./dist/plugin-sdk/index.js"},"./package.json":"./package.json"},"gitHead":"70e66b83950ccdf769f1f242855c9061292542f0","scripts":{"dev":"tsc --watch","test":"npm run build && node --test --test-reporter=spec test/local.mjs test/skills.local.mjs","build":"tsc && node scripts/copy-plugin-assets.mjs","start":"node dist/index.js","test:all":"npm run test && npm run test:strategies && npm run test:e2e","test:e2e":"npm run build && node --test --test-reporter=spec test/e2e.mjs","test:watch":"node --test --watch test/local.mjs test/skills.local.mjs","test:strategies":"npm run build && node --test --test-reporter=spec test/strategies.mjs","test:free-models":"npm run build && node --test --test-reporter=spec test/free-model-matrix.mjs"},"_npmUser":{"name":"1bcmax","email":"viewitter@gmail.com"},"repository":{"url":"git+https://github.com/BlockRunAI/Franklin-Trading.git","type":"git"},"_npmVersion":"10.9.2","description":"Franklin Trading — The AI trading agent with a wallet. Researches, backtests, paper-trades and live-trades autonomously, paying per call in USDC. Crypto-first. Apache-2.0.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"ink":"^6.8.0","bs58":"^6.0.0","viem":"^2.48.1","chalk":"^5.4.0","react":"^19.2.4","sharp":"^0.34.5","qrcode":"^1.5.4","commander":"^13.0.0","ink-spinner":"^5.0.0","@types/react":"^19.2.14","@blockrun/llm":"^2.0.0","ink-text-input":"^6.0.0","@solana/web3.js":"^1.98.4","@solana/spl-token":"^0.4.14","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.0.0","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/franklin-trading_0.2.0_1780719227848_0.8308573981963445","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@blockrun/franklin-trading","version":"0.2.1","keywords":["franklin","franklin-trading","ai-trading-agent","autonomous-economic-agent","wallet-native","agent-with-wallet","x402","usdc","pay-per-action","multi-model","backtest","paper-trading","live-trading","hyperliquid","jupiter","0x","polymarket","crypto-trading","blockrun"],"license":"Apache-2.0","_id":"@blockrun/franklin-trading@0.2.1","maintainers":[{"name":"1bcmax","email":"viewitter@gmail.com"}],"homepage":"https://trading.franklin.run","bugs":{"url":"https://github.com/BlockRunAI/Franklin-Trading/issues"},"bin":{"franklin-trading":"dist/index.js"},"dist":{"shasum":"6da7859b5ebd1e1d5c04b1c15ef2b30e8b9d9b7a","tarball":"https://registry.npmjs.org/@blockrun/franklin-trading/-/franklin-trading-0.2.1.tgz","fileCount":360,"integrity":"sha512-KWDM9TxQTLkizWzYv0YiOdbXCJyxjdmNmgFt/T9YwPxPkN70tWgp8D/ei7nVT66cdymcNDvUEGFGaqzkR6PJZw==","signatures":[{"sig":"MEUCIQDQVj3SrGun4cyZeyk+QSqSzlIrPnkHucZhJzfVXguZ7QIgC5kp3sWvSp1tSmJQ2LAGTBjX+4vEa3JCq8XIuSTTfBw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4246525},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./wallet":{"types":"./dist/wallet/index.d.ts","default":"./dist/wallet/index.js"},"./strategy":{"types":"./dist/strategies/index.d.ts","default":"./dist/strategies/index.js"},"./plugin-sdk":{"types":"./dist/plugin-sdk/index.d.ts","default":"./dist/plugin-sdk/index.js"},"./package.json":"./package.json"},"gitHead":"bec6145fce1bcde20494285b0562c74149a79aae","scripts":{"dev":"tsc --watch","test":"npm run build && node --test --test-reporter=spec test/local.mjs test/skills.local.mjs","build":"tsc && node scripts/copy-plugin-assets.mjs","start":"node dist/index.js","test:all":"npm run test && npm run test:strategies && npm run test:e2e","test:e2e":"npm run build && node --test --test-reporter=spec test/e2e.mjs","test:watch":"node --test --watch test/local.mjs test/skills.local.mjs","test:strategies":"npm run build && node --test --test-reporter=spec test/strategies.mjs","test:free-models":"npm run build && node --test --test-reporter=spec test/free-model-matrix.mjs"},"_npmUser":{"name":"1bcmax","email":"viewitter@gmail.com"},"repository":{"url":"git+https://github.com/BlockRunAI/Franklin-Trading.git","type":"git"},"_npmVersion":"10.9.2","description":"Franklin Trading — The AI trading agent with a wallet. Researches, backtests, paper-trades and live-trades autonomously, paying per call in USDC. Crypto-first. Apache-2.0.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"ink":"^6.8.0","bs58":"^6.0.0","viem":"^2.48.1","chalk":"^5.4.0","react":"^19.2.4","sharp":"^0.34.5","qrcode":"^1.5.4","commander":"^13.0.0","ink-spinner":"^5.0.0","@types/react":"^19.2.14","@blockrun/llm":"^2.0.0","ink-text-input":"^6.0.0","@solana/web3.js":"^1.98.4","@solana/spl-token":"^0.4.14","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.0.0","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/franklin-trading_0.2.1_1780727645551_0.26862913791376264","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@blockrun/franklin-trading","version":"0.2.2","keywords":["franklin","franklin-trading","ai-trading-agent","autonomous-economic-agent","wallet-native","agent-with-wallet","x402","usdc","pay-per-action","multi-model","backtest","paper-trading","live-trading","hyperliquid","jupiter","0x","polymarket","crypto-trading","blockrun"],"license":"Apache-2.0","_id":"@blockrun/franklin-trading@0.2.2","maintainers":[{"name":"1bcmax","email":"viewitter@gmail.com"}],"homepage":"https://trading.franklin.run","bugs":{"url":"https://github.com/BlockRunAI/Franklin-Trading/issues"},"bin":{"franklin-trading":"dist/index.js"},"dist":{"shasum":"9b3314fb1ff24f7bb3caf7a0b48cc56dd8afd41e","tarball":"https://registry.npmjs.org/@blockrun/franklin-trading/-/franklin-trading-0.2.2.tgz","fileCount":360,"integrity":"sha512-D5tKurTHGaKt871jGJX9rBY6AGc8v0q7vn48L50jAgxidjCxfNuUkofTqmUnxBkMOWlpe5uRPhQUT/OjYLh8CQ==","signatures":[{"sig":"MEUCIQCcMoamthgdqpF3AoR17wzEJMzLPmPo9SLc3G4AhTc72wIgEa4H7jNL3t5myQFT4dDTDs5GAMvlVVroR2PJpxHUDIE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4246691},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./wallet":{"types":"./dist/wallet/index.d.ts","default":"./dist/wallet/index.js"},"./strategy":{"types":"./dist/strategies/index.d.ts","default":"./dist/strategies/index.js"},"./plugin-sdk":{"types":"./dist/plugin-sdk/index.d.ts","default":"./dist/plugin-sdk/index.js"},"./package.json":"./package.json"},"gitHead":"fc812f52e5e47a511ce69ca3f8c3054196232d68","scripts":{"dev":"tsc --watch","test":"npm run build && node --test --test-reporter=spec test/local.mjs test/skills.local.mjs","build":"tsc && node scripts/copy-plugin-assets.mjs","start":"node dist/index.js","test:all":"npm run test && npm run test:strategies && npm run test:e2e","test:e2e":"npm run build && node --test --test-reporter=spec test/e2e.mjs","test:watch":"node --test --watch test/local.mjs test/skills.local.mjs","test:strategies":"npm run build && node --test --test-reporter=spec test/strategies.mjs","test:free-models":"npm run build && node --test --test-reporter=spec test/free-model-matrix.mjs"},"_npmUser":{"name":"1bcmax","email":"viewitter@gmail.com"},"repository":{"url":"git+https://github.com/BlockRunAI/Franklin-Trading.git","type":"git"},"_npmVersion":"10.9.2","description":"Franklin Trading — The AI trading agent with a wallet. Researches, backtests, paper-trades and live-trades autonomously, paying per call in USDC. Crypto-first. Apache-2.0.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"ink":"^6.8.0","bs58":"^6.0.0","viem":"^2.48.1","chalk":"^5.4.0","react":"^19.2.4","sharp":"^0.34.5","qrcode":"^1.5.4","commander":"^13.0.0","ink-spinner":"^5.0.0","@types/react":"^19.2.14","@blockrun/llm":"^2.0.0","ink-text-input":"^6.0.0","@solana/web3.js":"^1.98.4","@solana/spl-token":"^0.4.14","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.0.0","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/franklin-trading_0.2.2_1780896557518_0.46514635312864505","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@blockrun/franklin-trading","version":"0.2.3","keywords":["franklin","franklin-trading","ai-trading-agent","autonomous-economic-agent","wallet-native","agent-with-wallet","x402","usdc","pay-per-action","multi-model","backtest","paper-trading","live-trading","hyperliquid","jupiter","0x","polymarket","crypto-trading","blockrun"],"license":"Apache-2.0","_id":"@blockrun/franklin-trading@0.2.3","maintainers":[{"name":"1bcmax","email":"viewitter@gmail.com"}],"homepage":"https://trading.franklin.run","bugs":{"url":"https://github.com/BlockRunAI/Franklin-Trading/issues"},"bin":{"franklin-trading":"dist/index.js"},"dist":{"shasum":"8d059cda09ae08c05809cc390a818efb5e9562d1","tarball":"https://registry.npmjs.org/@blockrun/franklin-trading/-/franklin-trading-0.2.3.tgz","fileCount":360,"integrity":"sha512-EHO7DNYFbLPWOYsYy3/xWrrTAFvRc7WthFGTpxca6Ei1HcngNwqnlNffmpDcWe+w1t79lAZK+g+Ek/5khMSQZA==","signatures":[{"sig":"MEYCIQCieRtmEaQOLmYlLYtwDfE9M0PvIS0VT65nq1xpFcFxoQIhALQl+qhb9CBpCO6yG3x1pwu3br0gEGHUeXXKY5brAE7v","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4246813},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./wallet":{"types":"./dist/wallet/index.d.ts","default":"./dist/wallet/index.js"},"./strategy":{"types":"./dist/strategies/index.d.ts","default":"./dist/strategies/index.js"},"./plugin-sdk":{"types":"./dist/plugin-sdk/index.d.ts","default":"./dist/plugin-sdk/index.js"},"./package.json":"./package.json"},"gitHead":"208cc104ba0f683c057c2ab23372fc7224723236","scripts":{"dev":"tsc --watch","test":"npm run build && node --test --test-reporter=spec test/local.mjs test/skills.local.mjs","build":"tsc && node scripts/copy-plugin-assets.mjs","start":"node dist/index.js","test:all":"npm run test && npm run test:strategies && npm run test:e2e","test:e2e":"npm run build && node --test --test-reporter=spec test/e2e.mjs","test:watch":"node --test --watch test/local.mjs test/skills.local.mjs","test:strategies":"npm run build && node --test --test-reporter=spec test/strategies.mjs","test:free-models":"npm run build && node --test --test-reporter=spec test/free-model-matrix.mjs"},"_npmUser":{"name":"1bcmax","email":"viewitter@gmail.com"},"repository":{"url":"git+https://github.com/BlockRunAI/Franklin-Trading.git","type":"git"},"_npmVersion":"10.9.2","description":"Franklin Trading — The AI trading agent with a wallet. Researches, backtests, paper-trades and live-trades autonomously, paying per call in USDC. Crypto-first. Apache-2.0.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"ink":"^6.8.0","bs58":"^6.0.0","viem":"^2.48.1","chalk":"^5.4.0","react":"^19.2.4","sharp":"^0.34.5","qrcode":"^1.5.4","commander":"^13.0.0","ink-spinner":"^5.0.0","@types/react":"^19.2.14","@blockrun/llm":"^2.0.0","ink-text-input":"^6.0.0","@solana/web3.js":"^1.98.4","@solana/spl-token":"^0.4.14","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.0.0","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/franklin-trading_0.2.3_1780897833158_0.24640236043407904","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@blockrun/franklin-trading","version":"0.2.4","keywords":["franklin","franklin-trading","ai-trading-agent","autonomous-economic-agent","wallet-native","agent-with-wallet","x402","usdc","pay-per-action","multi-model","backtest","paper-trading","live-trading","hyperliquid","jupiter","0x","polymarket","crypto-trading","blockrun"],"license":"Apache-2.0","_id":"@blockrun/franklin-trading@0.2.4","maintainers":[{"name":"1bcmax","email":"viewitter@gmail.com"}],"homepage":"https://trading.franklin.run","bugs":{"url":"https://github.com/BlockRunAI/Franklin-Trading/issues"},"bin":{"franklin-trading":"dist/index.js"},"dist":{"shasum":"7babb1170553fafaca0e21a25d950dbe6a56459c","tarball":"https://registry.npmjs.org/@blockrun/franklin-trading/-/franklin-trading-0.2.4.tgz","fileCount":362,"integrity":"sha512-LTAsnl3kKWecRlV/BO+pwacBbRkLcdhtf+A1MIkPZ2dDroaG++0KZFFUKoIiR0TFCZpG8DYB7HCU8Nr8SD12Yw==","signatures":[{"sig":"MEYCIQDWzhDlKyV6L8Xz1Iq/B2gHXfKGvXPe7GWE9OP1qm1x9AIhALs/80qau8Ad22/KYYnPVjlRotnv2BLWew7XXtgTZyzD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4258716},"type":"module","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./wallet":{"types":"./dist/wallet/index.d.ts","default":"./dist/wallet/index.js"},"./strategy":{"types":"./dist/strategies/index.d.ts","default":"./dist/strategies/index.js"},"./plugin-sdk":{"types":"./dist/plugin-sdk/index.d.ts","default":"./dist/plugin-sdk/index.js"},"./package.json":"./package.json"},"gitHead":"65b40411df50f96946af48500f8c989e317751f8","scripts":{"dev":"tsc --watch","test":"npm run build && node --test --test-reporter=spec test/local.mjs test/skills.local.mjs","build":"tsc && node scripts/copy-plugin-assets.mjs","start":"node dist/index.js","test:all":"npm run test && npm run test:strategies && npm run test:e2e","test:e2e":"npm run build && node --test --test-reporter=spec test/e2e.mjs","test:watch":"node --test --watch test/local.mjs test/skills.local.mjs","test:strategies":"npm run build && node --test --test-reporter=spec test/strategies.mjs","test:free-models":"npm run build && node --test --test-reporter=spec test/free-model-matrix.mjs"},"_npmUser":{"name":"1bcmax","email":"viewitter@gmail.com"},"repository":{"url":"git+https://github.com/BlockRunAI/Franklin-Trading.git","type":"git"},"_npmVersion":"10.9.2","description":"Franklin Trading — The AI trading agent with a wallet. Researches, backtests, paper-trades and live-trades autonomously, paying per call in USDC. Crypto-first. Apache-2.0.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"ink":"^6.8.0","bs58":"^6.0.0","viem":"^2.48.1","chalk":"^5.4.0","react":"^19.2.4","sharp":"^0.34.5","qrcode":"^1.5.4","commander":"^13.0.0","ink-spinner":"^5.0.0","@types/react":"^19.2.14","@blockrun/llm":"^2.0.0","ink-text-input":"^6.0.0","@solana/web3.js":"^1.98.4","@solana/spl-token":"^0.4.14","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.0.0","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/franklin-trading_0.2.4_1780901208701_0.9529799347573662","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@blockrun/franklin-trading","version":"0.3.0","description":"Franklin Trading — The AI trading agent with a wallet. Researches, backtests, paper-trades and live-trades autonomously, paying per call in USDC. Crypto-first. Apache-2.0.","type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./plugin-sdk":{"types":"./dist/plugin-sdk/index.d.ts","default":"./dist/plugin-sdk/index.js"},"./wallet":{"types":"./dist/wallet/index.d.ts","default":"./dist/wallet/index.js"},"./strategy":{"types":"./dist/strategies/index.d.ts","default":"./dist/strategies/index.js"},"./trading/exchange":{"types":"./dist/trading/exchange.d.ts","default":"./dist/trading/exchange.js"},"./package.json":"./package.json"},"bin":{"franklin-trading":"dist/index.js"},"scripts":{"build":"tsc && node scripts/copy-plugin-assets.mjs","dev":"tsc --watch","start":"node dist/index.js","test":"npm run build && node --test --test-reporter=spec test/local.mjs test/skills.local.mjs","test:e2e":"npm run build && node --test --test-reporter=spec test/e2e.mjs","test:strategies":"npm run build && node --test --test-reporter=spec test/strategies.mjs","test:free-models":"npm run build && node --test --test-reporter=spec test/free-model-matrix.mjs","test:all":"npm run test && npm run test:strategies && npm run test:e2e","test:watch":"node --test --watch test/local.mjs test/skills.local.mjs"},"keywords":["franklin","franklin-trading","ai-trading-agent","autonomous-economic-agent","wallet-native","agent-with-wallet","x402","usdc","pay-per-action","multi-model","backtest","paper-trading","live-trading","hyperliquid","jupiter","0x","polymarket","crypto-trading","blockrun"],"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/BlockRunAI/Franklin-Trading.git"},"bugs":{"url":"https://github.com/BlockRunAI/Franklin-Trading/issues"},"homepage":"https://trading.franklin.run","engines":{"node":">=22"},"dependencies":{"@blockrun/llm":"^3.13.1","@blockrun/router-core":"https://codeload.github.com/BlockRunAI/router-core/tar.gz/d7bc10ce184b3daa40bcc115b523fd629d847a52","@modelcontextprotocol/sdk":"^1.29.0","@solana/spl-token":"^0.4.14","@solana/web3.js":"^1.98.4","@types/react":"^19.2.14","bs58":"^6.0.0","chalk":"^5.4.0","commander":"^13.0.0","ink":"^6.8.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","qrcode":"^1.5.4","react":"^19.2.4","sharp":"^0.34.5","viem":"^2.48.1"},"devDependencies":{"@types/node":"^22.0.0","@types/qrcode":"^1.5.6","typescript":"^5.7.0"},"overrides":{"ws":"^8.21.0"},"_id":"@blockrun/franklin-trading@0.3.0","gitHead":"2c8b14b722d3b4eec59ed5090b042610351f3bb3","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-jyhcfdMhjUBQqc5Kf3EnQA3lcsrAeWVtwncHgp+I1Gt1/NJ+zMCLT6Y/ZZw+IWXIgW7D1cJgnb+Alyqw1jOQag==","shasum":"0d15beb7e58e1aa490ed25b46dedc477dd951bb5","tarball":"https://registry.npmjs.org/@blockrun/franklin-trading/-/franklin-trading-0.3.0.tgz","fileCount":376,"unpackedSize":4463174,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDwa5n5EzQ9zT2PitFAMSU+ljBUByY8MFqn86Lktpk4pgIhALJA7BLuMgmS8R9m7VdTXhncRFV7BJy+hNDXO/0hisSp"}]},"_npmUser":{"name":"1bcmax","email":"viewitter@gmail.com"},"directories":{},"maintainers":[{"name":"killerqueenandy","email":"andy@blockrun.ai"},{"name":"1bcmax","email":"viewitter@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/franklin-trading_0.3.0_1788037381341_0.9155752257376057"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-01T07:49:44.785Z","modified":"2026-08-29T21:03:01.753Z","0.1.0":"2026-06-01T07:49:45.353Z","0.2.0":"2026-06-06T04:13:48.073Z","0.2.1":"2026-06-06T06:34:05.790Z","0.2.2":"2026-06-08T05:29:17.782Z","0.2.3":"2026-06-08T05:50:33.390Z","0.2.4":"2026-06-08T06:46:48.920Z","0.3.0":"2026-08-29T21:03:01.548Z"},"bugs":{"url":"https://github.com/BlockRunAI/Franklin-Trading/issues"},"license":"Apache-2.0","homepage":"https://trading.franklin.run","keywords":["franklin","franklin-trading","ai-trading-agent","autonomous-economic-agent","wallet-native","agent-with-wallet","x402","usdc","pay-per-action","multi-model","backtest","paper-trading","live-trading","hyperliquid","jupiter","0x","polymarket","crypto-trading","blockrun"],"repository":{"type":"git","url":"git+https://github.com/BlockRunAI/Franklin-Trading.git"},"description":"Franklin Trading — The AI trading agent with a wallet. Researches, backtests, paper-trades and live-trades autonomously, paying per call in USDC. Crypto-first. Apache-2.0.","maintainers":[{"name":"killerqueenandy","email":"andy@blockrun.ai"},{"name":"1bcmax","email":"viewitter@gmail.com"}],"readme":"<div align=\"center\">\n\n# Franklin Trading\n\n**The AI trading agent with a wallet.**\n\nResearches, debates, paper-trades against real prices, and settles every paid call in USDC.\nRisk limits live in code, not in the prompt. Every fill has a receipt.\nFund the wallet. Set a budget. Walk away — and come back to a book.\n\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Node](https://img.shields.io/badge/node-%3E%3D20-brightgreen)](https://nodejs.org/)\n[![npm](https://img.shields.io/npm/v/@blockrun/franklin-trading)](https://www.npmjs.com/package/@blockrun/franklin-trading)\n[![Docs](https://img.shields.io/badge/docs-trading.franklin.run-1a8ad7)](https://trading.franklin.run)\n\n</div>\n\n> Franklin Trading is a fork of [Franklin](https://github.com/BlockRunAI/Franklin) — the\n> general-purpose Autonomous Economic Agent — specialized as a wallet-native trading\n> agent. It inherits Franklin's economic substrate (x402 micropayments, USDC settlement,\n> the shared [Router Core](https://github.com/BlockRunAI/router-core) engine across\n> <!-- br:models.chatVisible -->72<!-- /br:models.chatVisible --> models, removable-by-design harness components)\n> and adds a deterministic fee-aware risk engine, a wallet-bound trade journal, a\n> multi-role persona debate, and a Backtest → Paper → Live strategy lifecycle.\n\n## What works today\n\nThis section is the honest one. Everything in it ships in `@blockrun/franklin-trading` 0.3.0\nand is covered by the local test suite (386 tests, no network).\n\n| Capability | Status | Where |\n|---|---|---|\n| USDC wallet on Base or Solana, x402 pay-per-call to every model and paid API | ✅ shipped | `src/wallet/`, `@blockrun/llm` |\n| Auto model routing on the shared Router Core engine, <!-- br:models.chatVisible -->72<!-- /br:models.chatVisible --> models, dead-model kill-switch | ✅ shipped | `src/router/` |\n| Paper trading against **live** CoinGecko marks (real P&L, simulated fills) | ✅ shipped | `src/trading/live-exchange.ts` |\n| Deterministic risk engine: cash **including exchange fee**, per-position cap, total exposure cap, sell integrity | ✅ shipped | `src/trading/risk.ts` |\n| Record-then-flag execution: a fill the venue executed is always booked; deviations are warnings, never silent drops | ✅ shipped | `src/trading/engine.ts` |\n| Persistent trade journal with rationale scoring, cross-session `TradingHistory` | ✅ shipped | `src/trading/trade-log.ts` |\n| Market data, Exa research, prediction markets, DeFiLlama, Jupiter / 0x quotes, multi-chain RPC (paid per call) | ✅ shipped | `src/tools/` |\n| Base MCP (onchain balances / swaps / x402 via your Base Account) | ✅ shipped | `docs/base-mcp.md` |\n| Strategy DSL (`defineStrategy`) | 🟡 author-facing helper only | `src/strategies/` |\n| Unified backtest / paper / live runner (`franklin-trading run`) | 🚧 M1 | roadmap |\n| Role personas, regime detector, prompt-cache optimizer, slippage model, fact-checker | 🚧 M2–M3 | roadmap |\n| Real venue adapters (Hyperliquid, Jupiter, 0x, Polymarket, Binance) | 🚧 M4–M5 | roadmap |\n\n## Why Franklin Trading\n\nThe open-source trading-agent landscape splits into halves nobody has joined:\n\n| Project | Strength | What it can't do |\n|---|---|---|\n| [TradingAgents](https://github.com/TauricResearch/TradingAgents) (78.8k★) | Multi-role agent debate, academic rigor | No live execution; 0% prompt-cache hit rate ([#750](https://github.com/TauricResearch/TradingAgents/issues/750)); ticker hallucination ([#814](https://github.com/TauricResearch/TradingAgents/issues/814)); risk limits silently drop out of context ([#479](https://github.com/TauricResearch/TradingAgents/issues/479)) |\n| [AI-Trader](https://github.com/HKUDS/AI-Trader) (18.5k★) | Federated agents, Polymarket live data, copy-trading | Stale price data ([#188](https://github.com/HKUDS/AI-Trader/issues/188)); position-averaging bug ([#186](https://github.com/HKUDS/AI-Trader/issues/186)); no published backtests ([#207](https://github.com/HKUDS/AI-Trader/issues/207)) |\n| [Vibe-Trading](https://github.com/HKUDS/Vibe-Trading) (8.4k★) | LLM-driven research, persistent memory, Alpha Zoo (452 factors), Shadow Account | Zero exchange connectors ([#100](https://github.com/HKUDS/Vibe-Trading/issues/100)) |\n| [Hummingbot](https://github.com/hummingbot/hummingbot) (18.6k★, $34B+ volume) | 50+ CEX/DEX connectors, V2 framework, institutional-grade risk controls | No LLM brain; no narrative awareness |\n\nFranklin Trading is **the synthesis**: Vibe-Trading-style natural-language research and\npersistent memory, TradingAgents-style hierarchical persona debate, Hummingbot-style\nexecution rigor — wrapped in Franklin's wallet-native economic substrate, with the one\nthing none of them do: **the money is real from day one**, so the guardrails had to be too.\n\n## Risk lives outside the model\n\n[Conviction #5](docs/CONVICTIONS.md): the LLM is never the last line of defense. Every\norder — buys **and** sells — goes through `RiskEngine.check` in code before it reaches a\nvenue, and the delivered fill is checked again after.\n\n```text\nopenPosition(BTC, 0.001 @ $100,000)\n\n  1. local pass        qty / price / notional finite and > 0; caps         → blocked? kind=risk\n  2. estimateFee()     venue quotes a fee CEILING ($0.10)                    → blocked? kind=fee-quote\n  3. fee-aware pass    $100.00 + $0.10 must fit cash + caps                  → blocked? kind=risk\n  4. placeOrder()      a throw here means \"not executed\"                      → blocked? kind=venue\n  5. record-then-flag  the fill is ALWAYS booked; anything the venue changed\n                       (fee above ceiling, qty/price drift, cap breached,\n                       cash negative) → warnings[] on the outcome + journal\n```\n\nStep 5 is the part most agents get wrong. A post-execution *rejection* leaves real money at\nthe venue that the local book does not know about, and the resulting tool error tells the\nmodel to try again — a double buy. Franklin books the fill and shouts about it instead.\n\nSame shape for `closePosition`: an oversell, a non-positive quantity, a zero mark, or a\ndust close the fee would consume is refused *before* the venue is asked. Orders are\nserialised per engine; cash is compared at sub-cent precision; the persisted portfolio is\nvalidated on load (an `Infinity` balance would otherwise disarm every cap).\n\n## Quick start\n\n> Requires Node.js 20.19+ (Node 22 LTS recommended). Check with `node -v`.\n\n```bash\nnpm install -g @blockrun/franklin-trading\n\n# 1. Run — free out of the box (nvidia/nemotron-nano-9b-v2, no wallet needed)\nfranklin-trading\n\n# 2. Create a USDC wallet on Base (or solana) to unlock every paid model + API\nfranklin-trading setup base\n\n# 3. Fund it with $5+ USDC — print the address with:\nfranklin-trading balance\n\n# 4. Start with a budget — Franklin Trading stops when the cap is hit\nfranklin-trading --max-spend 5\n```\n\nZero signup, zero API keys, zero card. The wallet is the identity.\n\n## A 60-second tour\n\n```text\n> open a 0.001 BTC position at the current price\n\n  Auto → deepseek/deepseek-v4-pro\n\n  ## Order filled\n  - Bought 0.001 BTC @ $100,000.00 (fee $0.10)\n  - Position now: 0.001 BTC @ avg $100,000.00\n  - Cash remaining: $899.90\n\n> what's my P&L this week?\n\n  ## Trade history (7d)\n  - 7d P&L (realized): +$12.40\n  - Trades: 6 (3 opens, 3 closes)\n  ...\n\n> sell 0.002 BTC\n\n  ## Close blocked\n  - Symbol: BTC\n  - Attempted: sell 0.002\n  - Reason: Cannot sell 0.002 BTC: only 0.001 held\n\n  Try a smaller qty, or close other positions first to free up exposure headroom.\n```\n\nEvery model call, every paid tool call, every fill is written to\n`~/.blockrun/sessions/<uuid>.jsonl`; the trade journal lives in `~/.blockrun/trades.jsonl`\nand the portfolio in `~/.blockrun/portfolio.json`. Resume any session, search across all\nof them, audit every trade.\n\n## Models\n\nYou don't pick models. `Auto` (the default) runs the shared\n[Router Core](https://github.com/BlockRunAI/router-core) engine locally — the same decision\nFranklin, ClawRouter and `@blockrun/llm` make — classifying the request across 15 dimensions,\ndropping every model that cannot satisfy it (tools, vision, context, output length), and\nranking the survivors on fit, cost, speed and reliability. Sub-millisecond, no network on the\nhot path, <!-- br:savings.autoVsBaselinePct -->88<!-- /br:savings.autoVsBaselinePct -->% cheaper than pinning Claude Opus 5 for everything.\n\nA model the gateway stops serving is removed from every chain on the next request (the\ndead-rung kill-switch), so a retired id never strands a turn.\n\nPin one with `/model <shortcut>` when you want to:\n\n| Tier | Shortcut | Model | Price (in / out per 1M) |\n|---|---|---|---|\n| Frontier | `opus` | Claude Opus 5 | $5 / $25 |\n| | `fable` | Claude Fable 5 | $10 / $50 |\n| | `sonnet` | Claude Sonnet 5 | $3 / $15 |\n| | `gpt` | GPT-5.6 Sol | $5 / $30 |\n| | `qwen-max` | Qwen3.7 Max | $1.475 / $4.425 |\n| | `gemini` | Gemini 3.1 Pro | $2 / $12 |\n| | `grok` | Grok 4.5 | $2.5 / $9 |\n| | `kimi` | Kimi K3 | $3 / $15 |\n| Reasoning | `o3` | O3 | $2 / $8 |\n| | `codex` | GPT-5.3 Codex | $1.75 / $14 |\n| | `deepseek-v4-pro` | DeepSeek V4 Pro | $0.435 / $0.87 |\n| | `terra-pro` | GPT-5.6 Terra Pro | $1 / $6 |\n| | `glm-5.3` | GLM-5.3 | $1.4 / $4.4 |\n| Budget | `haiku` | Claude Haiku 4.5 | $1 / $5 |\n| | `mini` | GPT-5 Mini | $0.25 / $2 |\n| | `glm-flash` | GLM-5.3 Flash (1M ctx, vision) | $0.15 / $0.5 |\n| | `deepseek` | DeepSeek V4 Flash | $0.14 / $0.28 |\n| | `qwen-flash` | Qwen3.7 Flash (1M ctx) | $0.03 / $0.13 |\n| Free | `free` | Nemotron Nano 9B | $0 |\n| | `omni` | Nemotron 3 Nano Omni (text + image + audio) | $0 |\n| | `nano-vl` | Nemotron Nano VL | $0 |\n\nThe full catalog — <!-- br:models.totalVisible -->96<!-- /br:models.totalVisible --> visible models including image, video, music and speech — is at\n[blockrun.ai/models](https://blockrun.ai/models). Pricing is provider cost + 5%, settled per\ncall in USDC. No free alias ever falls back to a paid model.\n\n## Architecture\n\n```\n                Franklin Trading CLI / TUI / Telegram\n                              │\n                      Agent loop (inherited from Franklin)\n              plan · execute · compact · evaluate · verify · polish\n                       (each removable via FRANKLIN_NO_*)\n                              │\n            ┌─────────────┬───┴──────┬──────────────┐\n       Router Core     Brain +     Session +    Trading harness\n       (shared,      Learnings +   Cost +       layers (M3: 4 moats)\n        72 models)   Shadow Acct   JSONL\n                              │\n   TradingEngine: local risk → fee quote → fee-aware risk → place → record-then-flag\n                              │\n   Role personas (M2): Analyst → Bull / Bear → Trader → Risk → Compliance\n                              │\n   Strategy surface (M1): defineStrategy now; unified runner roadmap\n                              │\n   Execution: LiveExchange (paper, live marks) today · Hyperliquid · Jupiter · 0x · Polymarket (M4–M5)\n                              │\n   Economic substrate (inherited): USDC wallet on Base + Solana, x402 micropayments\n```\n\nSee [`PHILOSOPHY.md`](PHILOSOPHY.md) for the design principles,\n[`docs/CONVICTIONS.md`](docs/CONVICTIONS.md) for the 12 design stances\nformed from analyzing 60+ open issues across the four reference projects,\nand [`docs/adr/`](docs/adr/) for individual architecture decisions.\n\n### Writing a venue adapter\n\nReal execution plugs in at one seam: [`src/trading/exchange.ts`](src/trading/exchange.ts).\n\n```ts\nimport type { ExchangeClient, ExchangeOrder } from '@blockrun/franklin-trading/trading/exchange';\n\nexport class MyVenue implements ExchangeClient {\n  // A CEILING, not an expectation: round up, include your margin. The engine\n  // approves the order against notional + this number.\n  async estimateFee(order: ExchangeOrder): Promise<number> { /* fee-tier endpoint */ }\n  // Forward order.clientOrderId as the venue's client order id — a retried\n  // submission after a timeout must not fill twice. Throw ONLY if the venue\n  // rejected the order before executing; resolve the order state first otherwise.\n  async placeOrder(order: ExchangeOrder) { /* ... returns Fill with feeUsd actually charged */ }\n  // A usable quote is a finite number > 0. Return null, never 0, for a stale market.\n  async getPrice(symbol: string): Promise<number | null> { /* ticker */ }\n}\n```\n\n`MockExchange` and `LiveExchange` are the reference implementations; the contract's invariants\nare pinned by the tests in `test/local.mjs` (search for `ExchangeClient`).\n\n### Base MCP — onchain actions\n\nFranklin connects to the official **[Base MCP](https://docs.base.org/ai-agents)** server\n(`https://mcp.base.org`) for onchain Base actions — balances, transactions, swaps, and\nx402 payments — authorized via your Base Account (OAuth, per-write approval). One command:\n\n```bash\nfranklin-trading mcp add base   # browser login, then start — tools appear as mcp__base__*\n```\n\nThe HTTP+OAuth transport is generic: `franklin-trading mcp add <name> --url <url>` connects any\nhosted MCP server that supports Dynamic Client Registration + PKCE. See\n[`docs/base-mcp.md`](docs/base-mcp.md).\n\n## The four moats (M3)\n\nEach is a removable harness component per [ADR 0003](docs/adr/0003-harness-as-removable-components.md):\ntoggle off with an env flag when the model catches up.\n\n| Layer | What it does | Env opt-out |\n|---|---|---|\n| **Regime detector** | Lightweight HMM on rolling vol + correlation; tags every decision; swaps Trader persona prompt between trend / chop / risk-off | `FRANKLIN_NO_REGIME=1` |\n| **Prompt-cache optimizer** | Separates static persona prompts from volatile context; targets ≥40% cache hit rate from turn 2 | `FRANKLIN_NO_PROMPTCACHE=1` |\n| **Slippage model** | Per-venue impact (linear+sqrt) calibrated from observed fills; applied consistently in backtest, paper, live | `FRANKLIN_NO_SLIPPAGE=1` |\n| **Fact-checker** | Deterministic ticker → entity resolver via on-chain registries + CoinGecko; blocks TOTDY-style hallucinations | `FRANKLIN_NO_FACTCHECK=1` |\n\n## Planned Strategy DSL (M1)\n\nThe author-facing strategy helper is available for early artifacts, while the\n`franklin-trading run <strategy>` command and unified backtest/paper/live runtime\nare still M1 roadmap work.\n\n```ts\n// src/strategies/btc-funding-basis.strategy.ts\nimport { defineStrategy } from '@blockrun/franklin-trading/strategy';\n\nexport default defineStrategy({\n  name: 'btc-funding-basis',\n  universe: ['BTC-PERP@hyperliquid', 'BTC@jupiter'],\n  signal: async (ctx) => {\n    const fr = await ctx.market.fundingRate('BTC-PERP@hyperliquid');\n    return fr > 0.0001\n      ? { action: 'arb-long-spot-short-perp', size: 0.2 }\n      : null;\n  },\n  risk: { maxNotionalUsd: 1000, maxDrawdownPct: 5, killSwitch: true },\n  schedule: { every: '1m' },\n});\n```\n\nOnce the M1 runner lands, one artifact will run three modes:\n\n```bash\nfranklin-trading run btc-funding-basis --mode backtest --from 2024-01-01\nfranklin-trading run btc-funding-basis --mode paper      # live data, simulated fills\nfranklin-trading run btc-funding-basis --mode live       # real on-chain orders\n```\n\n## Roadmap\n\n| Status | Milestone |\n|---|---|\n| ✅ | **M0** — Fork from Franklin, prune non-trading verticals, rebrand |\n| ✅ | **M0.5** — Fee-aware risk engine with record-then-flag execution; Router Core + 2026-08 catalog sync (0.3.0) |\n| 🚧 | **M1** — Strategy DSL + walk-forward backtest engine |\n| 🚧 | **M2** — Role personas (Analyst, Bull, Bear, Trader, Risk, Compliance) wired via `Task` dispatch |\n| 🚧 | **M3** — Four moats (`regime.ts`, `prompt-cache.ts`, `slippage.ts`, `fact-check.ts`) |\n| 🚧 | **M4** — Connectors (read): Hyperliquid, Jupiter, 0x, Polymarket, Binance |\n| 🚧 | **M5** — Connectors (write) + 24h-clean paper trade |\n| 🚧 | **M6** — Alpha Zoo (40 factors v1) + Shadow Account (broker CSV import) |\n| 🚧 | **M7** — Polish, docs, demo GIF, benchmark page, v1.0.0 launch |\n\n## Out of scope (deliberate cuts)\n\n- Equities (IB / Alpaca / retail brokers) — v2; crypto-first proves the loop\n- Options Greeks / vol-surface fitting — v2\n- Hosted SaaS — never; Franklin Trading's whole point is non-custodial\n- Token model / liquidity-mining rewards — v2 at earliest; institutional approach in v1\n- LangGraph or any other agent-graph runtime — we use Franklin's `Task` tool dispatch\n- Web dashboard — v2; CLI + TUI + Telegram is sufficient for v1\n- Full-orderbook market-making — Hummingbot already excels here; we differentiate on LLM-driven research + execution\n\n## Development\n\n```bash\nnpm install\nnpm run build        # tsc + copy bundled skills\nnpm test             # 386 local tests, no network, no wallet\nnpm run test:e2e     # hits real models — needs a funded wallet\n```\n\nUpstream sync: model catalog, router and pricing changes land in\n[Franklin](https://github.com/BlockRunAI/Franklin) first and are ported here; the Router\nCore dependency is pinned to a commit SHA in `package.json` so a routing change can never\narrive unnoticed. Marketing numbers regenerate from `brand-numbers.json`\n(`node scripts/sync-brand-numbers.mjs --refresh`) and CI fails when they drift.\n\n## Contributing\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md). The Franklin rule applies: every fix\nneeds a receipt (session id, log line, gateway response) showing the bug\nactually happened. We don't accept \"looks broken\" fixes.\n\n## License\n\nApache-2.0 — see [`LICENSE`](LICENSE). Inherits the upstream Franklin\nlicense. Strategy contributions in `strategies/community/` follow the same\nlicense unless explicitly marked otherwise.\n\n## Acknowledgements\n\nFranklin Trading stands on the shoulders of these open-source projects:\n\n- [Franklin](https://github.com/BlockRunAI/Franklin) — wallet, x402, Router Core, harness, plugin SDK\n- [TradingAgents](https://github.com/TauricResearch/TradingAgents) — multi-role debate architecture\n- [AI-Trader](https://github.com/HKUDS/AI-Trader) — federated-agent + Polymarket integration ideas\n- [Vibe-Trading](https://github.com/HKUDS/Vibe-Trading) — Alpha Zoo, persistent research memory, Shadow Account\n- [Hummingbot](https://github.com/hummingbot/hummingbot) — Executor/Controller framework, multi-venue connector abstraction, governance model\n\nIf we did our job right, this is the agent each of them wanted to be.\n","readmeFilename":"README.md"}