base on The Complete Agentic Tooling Platform <p align="center"> <a href="https://picaos.com"> <img alt="Pica Logo" src="./resources/images/banner.svg" style="border-radius: 10px;"> </a> </p> <p align="center"><b>Pica, The AI Integrations Solution</b></p> <p align="center"> <b> <a href="https://www.picaos.com/">Website</a> · <a href="https://docs.picaos.com">Documentation</a> · <a href="https://app.picaos.com">Dashboard</a> · <a href="https://docs.picaos.com/changelog">Changelog</a> · <a href="https://x.com/picahq">X</a> · <a href="https://www.linkedin.com/company/picahq">LinkedIn</a> </b> </p> --- Pica gives every builder instant, reliable access to the tools they need—no keys, no configs, no headaches. ## Why Pica? Pica simplifies AI agent development with our four core products: ✅ OneTool – Connect agents to [100+ APIs and tools](https://app.picaos.com/tools) with a single SDK. <br/> ✅ AuthKit – Secure authentication for seamless tool integration. <br/> ✅ BuildKit - Empower vibe coding with integrations that work zero-shot. Pica also provides full logging and action traceability, giving developers complete visibility into their agents’ decisions and activities. Our tools simplify building and running AI agents so developers can focus on results. ## Getting started ### Install ```bash npm install @picahq/ai ``` ### Setup 1. Create a new [Pica account](https://app.picaos.com) 2. Create a Connection via the [Dashboard](https://app.picaos.com/connections) 3. Create an [API key](https://app.picaos.com/settings/api-keys) 4. Set the API key as an environment variable: `PICA_SECRET_KEY=<your-api-key>` ### Example Usage Below is an example demonstrating how to integrate the [Pica OneTool](https://www.npmjs.com/package/@picahq/ai) with the [Vercel AI SDK](https://www.npmjs.com/package/ai) for a GitHub use case: ```typescript import { openai } from "@ai-sdk/openai"; import { generateText } from "ai"; import { Pica } from "@picahq/ai"; import * as dotenv from "dotenv"; dotenv.config(); const pica = new Pica(process.env.PICA_SECRET_KEY!, { connectors: ["*"] }); async function runAgentTask(message: string): Promise<string> { const system = await pica.generateSystemPrompt(); const { text } = await generateText({ model: openai("gpt-4.1"), system, prompt: message, tools: { ...pica.oneTool }, maxSteps: 10, }); return text; } runAgentTask("Star the repo picahq/pica with github") .then((text) => { console.log(text); }) .catch(console.error); ``` [![Try with Replit Badge](https://replit.com/badge?caption=Try%20with%20Replit)](https://replit.com/@picahq/Pica-or-GitHub-Star-Demo) For more use cases, visit our [Use Cases Library](https://www.picaos.com/community/use-cases) or our [Awesome Pica Repository](https://github.com/picahq/awesome-pica). ### Next.js Integration ⭐️ You can see a full Next.js demo [here](https://github.com/picahq/onetool-demo) > For more examples and detailed documentation, check out our [SDK documentation](https://docs.picaos.com/sdk/vercel-ai). --- ## Running Pica locally > [!IMPORTANT] > The Pica dashboard is going open source! Stay tuned for the big release 🚀 ### Prerequisites * [Docker](https://docs.docker.com/engine/) * [Docker Compose](https://docs.docker.com/compose/) ### Step 1: Install the Pica CLI ```sh npm install -g @picahq/cli ``` ### Step 2: Initialize the Pica CLI To generate the configuration file, run: ```shell pica init ``` ### Step 3: Start the Pica Server ```sh pica start ``` > All the inputs are required. Seeding is optional, but recommended when running the command for the first time. ##### Example ```Shell # To start the docker containers pica start Enter the IOS Crypto Secret (32 characters long): xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Do you want to seed? (Y/N) y ``` **The Pica API will be available at `http://localhost:3005` 🚀** To stop the docker containers, simply run: ```Shell pica stop ``` ## License Pica is released under the [**GPL-3.0 license**](LICENSE). ", Assign "at most 3 tags" to the expected json: {"id":"13573","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"