# Allo Gold Architecture - https://github.com/allocapital/allo-gold Allo gold acts as a unified interface for interating with funding mechanisms on chain. The `Plugin` interface defines the core structure for integrating funding mechanisms with the Allo platform. Its main purpose is to provide an association between the actions and assistant needed to deploy a new funding mechanism. It was heavily inspired by [Eliza's plugin system](https://elizaos.github.io/eliza/docs/packages/plugins/). ## Components ### Bread and Butter Actions and assistants are further documentented [here](https://hackmd.io/@Ep4Ckw8STUmiqCn6Rnzscg/HkQ8AtjYJl) and [here](https://hackmd.io/@Ep4Ckw8STUmiqCn6Rnzscg/B1N50YsKJg). - `actions`: Array of [`Action`](https://hackmd.io/@Ep4Ckw8STUmiqCn6Rnzscg/HkQ8AtjYJl) classes defining available operations - Each action represents a distinct operation users can perform - `pluginAssistant`: [`PluginAssistant`](https://hackmd.io/@Ep4Ckw8STUmiqCn6Rnzscg/B1N50YsKJg) configuration for AI-powered features - Required for enabling AI assistance in your plugin - Provides context and validation for AI interactions ## NextJS Integration - Form Generation: - [DynamicForm](https://github.com/allocapital/allo-gold/blob/main/app/components/DynamicForm.tsx) is used to render and validate the action's form fields. - If an additional input is needed it should be added in DynamicForm.tsx - Action Interactions: [ActionHandler](https://github.com/allocapital/allo-gold/blob/main/app/hooks/useAction.ts) is the primary hook for handling action interactions. It is responsible for checking action results, generating calldata for EVM interactions, and submitting transactions to the blockchain. ## Properties ### Basic Plugin Information - `name`: Name of your plugin displayed to users - `description`: Detailed description explaining your plugin's functionality - `logo`: URL to your plugin's logo image - `id`: Unique identifier for your plugin ## Example Implementation ```typescript const myPlugin: Plugin = { name: "Split Payment", description: "Create and manage payment splits between multiple recipients", logo: "/logos/split.svg", id: "split-payment", actions: [action1, action2], pluginAssistant, }; ``` # Challenges - Currently injects relavent information into the system prompt to determine which mechanism to choose from - As more mechanisms are added this will need updated since this will become less effective - One solution could be to implement RAG / embeddings - Contract Interactions - Currently limited to two consecutive interactions - Returning user flow - kind of clunky currently used to load the profile interaction from allo before submitting the round tx