Finic is designed to be flexible and unopinionated about how agents are built. You do not have to adopt a new IDE, specific directory structure, or coding style. This makes it easy to add Finic to existing projects and deploy them to the cloud.

The only requirements for a project to be Finic-compatible are that it’s built in python, and that it uses Poetry for dependency management.

This means the process of local development for Finic projects is the same as any Poetry project.

poetry install
poetry run start

The only difference is that you’ll need to initialize Finic and wrap your main function with a @finic.workflow_entrypoint decorator.

The Finic decorator

This decorator tells Finic where the entrypoint to your project is so it can pass in arguments at runtime. The decorator takes in a Pydantic model which it uses to validate that arguments were passed in correctly at runtime.

@finic.workflow_entrypoint(input_model=InputSchema)
def main(input: InputSchema):
  # Your code here

Passing in arguments

When running agents locally, the @finic.workflow_entrypoint decorator will pass in the data from inputs.json as arguments to your entrypoint function. This makes it easy to test different input values without spinning up a separate service to run your agent.

After an agent is deployed, inputs.json will no longer work. You’ll need to pass in arguments from the Finic dashboard when you run an agent.

Passing in credentials and other secrets

If your agent needs to authenticate with web services, you’ll need to pass in secrets without exposing them in your codebase. When running your project locally, data from secrets.json will be used to initialize a secret manager. You can retrieve secrets using finic.secretmanager.get_credentials()