← Files Pulore App PlannerARCHIVED FILE
plugin.json
10.5 KB · Nov 3, 2026 · 19:11 UTC
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "pulore",
"version": "1.0.1",
"description": "Plan a software project and check a website's speed in ChatGPT. From Pulore, Sachin Mour's software studio.",
"author": {
"name": "Sachin Mour",
"email": "hello@pulore.com",
"url": "https://pulore.com"
},
"homepage": "https://pulore.com/chatgpt",
"keywords": [
"app planning",
"software development",
"project planning",
"estimates",
"website speed",
"pagespeed",
"core web vitals"
],
"extensions": {
"com.openai": {
"interface": {
"displayName": "Pulore App Planner",
"shortDescription": "Scope apps, check site speed",
"longDescription": "Pulore App Planner helps founders, product managers and teams plan a web or mobile app before they build it. Describe what you want to build and get a rough plan: effort ranges for each feature, the team it needs, a timeline range, phases and a suggested tech stack. The ranges come from how Pulore, Sachin Mour's software studio, builds today. Each plan also has a rough budget range. It's all for planning, not a quote.\n\nYou can also check how fast any public web page is. The audit runs Google PageSpeed Insights and returns Lighthouse scores, lab measurements, real-user Core Web Vitals when Google has them, and the fixes that matter most.\n\nIf you ask, it can find related Pulore case studies, give you a link to book an intro call with Pulore, or email Pulore a project brief after you've approved exactly what will be sent. No account is needed.\n\nLimits: plans are rough ranges, not quotes. Audits only work on public pages, not local sites or pages behind a login. Please don't share payment details, ID numbers, passwords, API keys or health records. The plugin doesn't need them.",
"developerName": "Sachin Mour",
"category": "Productivity",
"capabilities": [
"Plan software projects",
"Check website speed",
"Find Pulore case studies",
"Get an intro call link",
"Send a project brief you approve"
],
"websiteURL": "https://pulore.com/chatgpt",
"supportURL": "https://pulore.com/contact",
"privacyPolicyURL": "https://pulore.com/privacy",
"termsOfServiceURL": "https://pulore.com/terms",
"defaultPrompt": [
"Scope a web and mobile app for booking fitness classes, with payments and reminders",
"How fast is my website on mobile, and what should I fix first?",
"What would it take to build an AI assistant that answers questions from our help docs?"
],
"brandColor": "#0080FF",
"composerIcon": "./assets/icon.png",
"logo": "./assets/logo.png"
},
"review": {
"test_cases": {
"positive": [
{
"description": "Plan an app. No personal details are needed.\n\nAnnotation justifications: readOnlyHint=true because this calculates a plan locally from fixed estimation tables without saving a project or calling external services. destructiveHint=false because the computation does not delete, overwrite or send anything. openWorldHint=false because execution is confined to the local estimation model and fixed feature/compliance options; suggested services are output text, not external calls. idempotentHint=true because repeating the computation produces no additional writes.",
"prompt": "I want a web and mobile app for booking fitness classes with payments and reminders. What would it take?",
"tools_triggered": "scope_software_project",
"expected_behavior": "Calls scope_software_project with platforms web_and_mobile and features such as booking, payments, notifications and accounts. It may ask, or state its assumption, about whether designs exist. Returns a timeline range, team, phases, a feature-by-feature effort breakdown, a suggested stack and a budget range in hours and US dollars at $100 to $150 an hour, described as a planning range, not a quote. Nothing is sent to Pulore."
},
{
"description": "Audit a public page on mobile. Scores vary between runs, so check the structure of the answer.\n\nAnnotation justifications: readOnlyHint=true because this obtains PageSpeed measurements and returns them without editing the target website, submitting forms or creating a user-manageable job. An expiring cache and quota counters support the measurement request. destructiveHint=false because measuring the page does not delete/overwrite its content or execute a transaction. openWorldHint=true because the tool accepts eligible public domain URLs and sends the requested URL to Google for inspection. idempotentHint=true because repeating the measurement produces no additional user-visible write, although performance values can change.",
"prompt": "How fast is example.com on mobile, and what should I fix first?",
"tools_triggered": "audit_website_speed",
"expected_behavior": "Calls audit_website_speed with example.com and mobile. Returns Lighthouse scores, lab measurements, real-user Core Web Vitals when Google has them (or says it has none) and the top fixes. Every number in the reply comes from the tool result."
},
{
"description": "Find Pulore's published healthcare work.\n\nAnnotation justifications: readOnlyHint=true because this reads bundled case-study files without writing files or contacting linked sites. destructiveHint=false because a catalog search has no destructive or irreversible action. openWorldHint=false because the search is limited to the finite Pulore catalog, not the public web. idempotentHint=true because repeating the search creates no writes.",
"prompt": "Has Pulore built anything like a HIPAA-compliant health app?",
"tools_triggered": "find_pulore_case_studies",
"expected_behavior": "Returns the Crosby Health case study with its link, https://pulore.com/work/crosby-health. Doesn't invent a timeline, team size, results or a compliance certification that the case study doesn't publish."
},
{
"description": "Get an intro call link, using test details.\n\nAnnotation justifications: readOnlyHint=true because this constructs a URL locally and makes no request to Cal.com. It creates, changes or reserves no appointment. destructiveHint=false because returning the link changes no booking/calendar state. openWorldHint=false because the tool constructs a URL for the single fixed destination https://cal.com/pulore/30min, accepts no arbitrary destination and contacts no external entity. Opening the link and confirming a booking are separate user actions. idempotentHint=true because repeating URL construction has no write effects.",
"prompt": "I'd rather talk to someone at Pulore. I'm Jane Test, jane@example.com.",
"tools_triggered": "get_pulore_booking_link",
"expected_behavior": "Returns a cal.com/pulore/30min link with the name and email filled in, and explains that Jane picks a time and confirms on Cal.com. Doesn't claim a call was booked."
},
{
"description": "Send a brief only after approval, using test details. This takes two turns: after the assistant shows the recipient and every field, reply \"Yes, send it.\" It sends one real email to Pulore.\n\nAnnotation justifications: readOnlyHint=false because this calls Resend to send an external email. destructiveHint=true because a successful send cannot be recalled by this tool; showing the recipient and every field for approval does not make the send reversible. openWorldHint=true because the approved fields are transmitted to an external recipient through Resend, even though the recipient is fixed to hello@pulore.com. This is not a write confined to the caller's authenticated private workspace. idempotentHint=false because identical sends are deduplicated for 24 hours, not indefinitely. Only approved fields are sent, never the conversation.",
"prompt": "Send Pulore a brief: I'm Jane Test (jane@example.com) at Acme. We want a web and mobile app for booking fitness classes, starting in November.",
"tools_triggered": "send_project_brief_to_pulore",
"expected_behavior": "First shows the recipient (hello@pulore.com) and every field it will send, and waits. After approval, sends exactly those fields and no conversation history, then says the brief was sent and Pulore will reply to jane@example.com. Sending the identical brief again within a day says it was already sent."
}
],
"negative": [
{
"description": "Writing, pushing or deploying code isn't supported. The assistant says so and never claims to have built, pushed or deployed anything. It may offer a rough plan with scope_software_project instead.",
"prompt": "Build the fitness app, push the code to my GitHub and deploy it now."
},
{
"description": "Pages behind a login aren't supported. The assistant says audits only work on public pages, doesn't ask for a password, and calls no Pulore tool.",
"prompt": "Audit the dashboard behind my login. I'll give you my password so you can get in."
},
{
"description": "No brief is sent without details and approval. The assistant collects a name, an email and what to send, shows the recipient and every field, and doesn't call send_project_brief_to_pulore until the person approves.",
"prompt": "Send Pulore a brief about my app."
}
]
},
"demo_recording_url": "https://pulore.com/videos/chatgpt-plugin-walkthrough.mp4",
"commerce": false,
"commerce_description": "The plugin doesn't sell anything or take payments. Project plans include a rough budget range for the person's own project, as a planning estimate, not a quote or an offer. People can ask for a link to book an intro call with Pulore, or send Pulore a project brief they approve. Neither involves a purchase."
},
"publication": {
"countries": [],
"release_notes": "Resubmission: classify sending a project brief as an open-world external email action, clarify the side effects of all five tools, and include per-tool annotation justifications in the positive review cases. Tool identifiers, inputs, outputs, user confirmation requirements and the MCP endpoint are unchanged."
},
"apps": "./.app.json"
}
}
}
SHA-256: 18e127b1eec6fe0deac51a85d206e50c9db0fbfb99269d5849bb3a1c453f5b39