Surfkit

A toolkit for building and sharing AI agents that operate on devices
Explore the docs »

View Demo · Report Bug · Request Feature


## Features - **Build** multimodal agents that can operate on devices - **Share** agents with the community - **Run** agents and devices locally or in the cloud - **Manage** agent tasks at scale - **Track** and observe agent actions ## Demo https://github.com/agentsea/surfkit/assets/5533189/98b7714d-9692-4369-8fbf-88aff61e741c ## Installation ```sh pip install surfkit ``` ## Quickstart ### Prerequisites - Docker - Python >= 3.10 - MacOS or Linux ### Python Use an agent to solve a task ```python from surfkit import solve task = solve( "Search for the most common variety of french duck", agent_type="pbarker/SurfPizza", device_type="desktop", ) task.wait_for_done() result = task.result ``` ### CLI #### Create an Agent Find available agents on the Hub ``` surfkit find ``` Create a new agent ``` surfkit create agent -t pbarker/SurfPizza -n agent01 ``` List running agents ``` surfkit list agents ``` #### Create a Device Create an Ubuntu desktop for our agent to use. ``` surfkit create device --provider docker -n desktop01 ``` List running devices ``` surfkit list devices ``` #### Solve a task Use the agent to solve a task on the device ``` surfkit solve "Search for the most common variety of french duck" \ --agent agent01 \ --device desktop01 ``` ## Documentation View our [documentation](https://docs.hub.agentsea.ai) for more in depth information. ## Usage ### Building Agents Initialize a new project ```sh surfkit new ``` Build a docker container for the agent ```sh surfkit build ``` ### Running Agents Create an agent locally ```sh surfkit create agent --name foo -t pbarker/SurfPizza ``` Create an agent on kubernetes ```sh surfkit create agent --runtime kube -t pbarker/SurfPizza ``` List running agents ```sh surfkit list agents ``` Get details about a specific agent ```sh surfkit get agent foo ``` Fetch logs for a specific agent ```sh surfkit logs foo ``` Delete an agent ```sh surfkit delete agent foo ``` ### Managing Devices Create a device ```sh surfkit create device --type desktop --provicer gce --name bar ``` List devices ```sh surfkit list devices ``` View device in UI ```sh surfkit view device bar ``` Delete a device ```sh surfkit delete device bar ``` ### Tracking Tasks Create a tracker ```sh surfkit create tracker ``` List trackers ```sh surfkit list trackers ``` Delete a tracker ```sh surfkit delete tracker foo ``` ### Solving Tasks Solve a task with an existing setup ```sh surfkit solve "search for common french ducks" --agent foo --device bar ``` Solve a task creating the agent ad hoc ```sh surfkit solve "search for alpaca sweaters" \ --device bar --agent-file ./agent.yaml ``` List tasks ```sh surfkit list tasks ``` ### Publishing Agents Login to the hub ```sh surfkit login ``` Publish the agent ```sh surfkit publish ``` List published agent types ```sh surfkit find ``` ## Integrations Skillpacks is integrated with: - [MLLM](https://github.com/agentsea/mllm) A prompt management, routing, and schema validation library for multimodal LLMs - [Taskara](https://github.com/agentsea/taskara) A task management library for AI agents - [Skillpacks](https://github.com/agentsea/skillpacks) A library to fine tune AI agents on tasks. - [Threadmem](https://github.com/agentsea/threadmem) A thread management library for AI agents ## Community Come join us on [Discord](https://discord.gg/hhaq7XYPS6). ## Developing Add the following function to your `~/.zshrc` (or similar) ```sh function sk() { local project_dir="/path/to/surfkit/repo" local venv_dir="$project_dir/.venv" local ssh_auth_sock="$SSH_AUTH_SOCK" local ssh_agent_pid="$SSH_AGENT_PID" export SSH_AUTH_SOCK="$ssh_auth_sock" export SSH_AGENT_PID="$ssh_agent_pid" # Add the Poetry environment's bin directory to the PATH export PATH="$venv_dir/bin:$PATH" # Execute the surfkit.cli.main module using python -m surfkit "$@" } ``` Replacing `/path/to/surfkit/repo` with the absolute path to your local repo. Then calling `sk` will execute the working code in your repo from any location.