Skip to content

About

An agent asks a human questions. The human answers in the browser.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

50 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

askmeatsack.com

An agent asks. A human answers.

An agent creates a questionnaire and gets a link. A person opens that link in a browser, answers, and the answers come back to the agent as structured JSON. There is no API key. Create is open today. Creating will later need a lanyard account; that account is free unless they want teams or a custom domain. The person answering never signs in.

Posting the link to Slack, email, or anywhere else is the calling agent's job.

Sibling project: showmeatsack.com — an agent posts a page, a person opens it.

Quick start

pnpm install
pnpm env      # writes .env.local from the 1Password Development item
pnpm dev

No 1Password access? cp .env.example .env.local gets you a working local server. Leave Redis empty to stay on in-memory stores; file uploads need R2.

Commands

Command Does
pnpm dev Dev server, reads .env.local
pnpm dev:op Dev server with secrets in-process, nothing written to disk
pnpm env Write .env.local from the Development item
pnpm env:op-items Create the three 1Password items if missing
pnpm env:vercel [preview|production] Push template → Vercel (default: both)
pnpm typecheck TypeScript
pnpm lint oxlint, plus the import-layer check
pnpm format oxfmt
pnpm format oxfmt
pnpm test Vitest
pnpm build Production build

pnpm typecheck, pnpm format:check, pnpm lint, pnpm test and pnpm build are the merge gates — see .engineering/config.yaml, and .engineering/conventions.md for the conventions they enforce.

Secrets

Three 1Password items live in the Agents vault: askmeatsack.com Development, askmeatsack.com Preview, and askmeatsack.com Production. Same field names, different values. Local work uses Development only; Preview and Production are pushed to Vercel and are not for a laptop.

.env.development.tpl, .env.preview.tpl, and .env.production.tpl hold op:// references only. .env.example is the empty placeholder. Never print .env contents and never commit secrets.

Where things live

Path What
specs/ Product intent. Start at specs/questionnaire/sessions/answering.md
src/app/api/v1/sessions/ The HTTP API
src/app/mcp/ The MCP server
src/app/s/[sessionId]/ The page a person actually answers on
src/lib/sessions.ts Session service — creation, answering, submission
.engineering/config.yaml Toolchain contract that calm-craft skills read
skills/askmeatsack/ The skill — the source of truth, edit this one
.cursor/skills/askmeatsack/ Generated copy for Cursor (pnpm sync:skill)
plugin.json Agent Plugin (open standard) identity
.cursor-plugin/plugin.json Cursor Open Plugin manifest for this clone
src/lib/askmeatsack-skill.ts Generated constant the site and MCP serve

calm-craft

This repository is built with calm-craft, our own MIT-licensed Agent Plugin. It is vendored as a submodule at .agents/plugins/calm-craft:

git submodule update --init --recursive

What it is. Three things that make coding agents produce work you can trust: specs as an addressable source of truth, a delivery loop that plans and then executes one reviewable chunk at a time, and code conventions decided once and enforced by lint wherever a machine can enforce them.

Why we use it. Most of the code here is written by agents, and an agent with no fixed source of truth will happily invent one. Specs in specs/ are that fixed point — they outlive any single session, so a change three weeks from now starts from what the product is meant to do rather than from whatever the last diff happened to leave behind. The separation it defends matters just as much: auditors report and never edit, planning is not allowed to double as execution, and one chunk is finished and verified before the next one starts. Those boundaries are easy to collapse and expensive to lose.

It also happens to be ours, so every public repo we ship is a repo we are running our own tooling on.

.engineering/config.yaml is the contract every calm-craft skill reads — paths, gates, branch, ticket provider. Skills stay portable; this repo's specifics stay in config we own, so updating the plugin never clobbers our choices.

Not yet run here: conventions-decide, which writes .engineering/conventions.yaml. Until then this repo has no recorded convention decisions, and paths.conventions points at a file that does not exist.

Plugin marketplace

The plugin ID is askmeatsack; its display name and MCP tool name are askmeatsack.com. The portable manifest includes OpenAI listing metadata and icons; .claude-plugin/plugin.json and .cursor-plugin/plugin.json provide client compatibility.

The Meatsack marketplace packages all three products. It contains generated, minimal plugin copies; this repository remains the source for this product's manifest, skill, MCP connection, and logo. Run the marketplace sync after changing those files.

Codex:

codex plugin marketplace add garylesueur/meatsack-marketplace

Then install askmeatsack.com from the Meatsack source in Plugins.

Claude Code:

/plugin marketplace add garylesueur/meatsack-marketplace
/plugin install askmeatsack@meatsack

Cursor Teams/Enterprise: Dashboard → Plugins & MCPs → Add Marketplace → Import from Repo, using the marketplace repository URL. Install the product from Customize. For a personal account, copy the plugin package into ~/.cursor/plugins/local/. See the installation guide for commands.

Marketplace publication must precede deploying these website install links. Public ChatGPT/Codex and Cursor directory listings require separate submissions.

Install

This repository is itself an Agent Plugin — the open standard for packaging agent tooling: plugin.json, mcp.json, and skills/ in one installable unit. Cursor also reads .cursor-plugin/plugin.json so this clone can be added as an Open Plugin from the local folder. .mcp.json exists for cursor.directory detection.

Install in Cursor from this clone. In Customize → Plugins, add an Open Plugin and choose this repository root (the folder that contains plugin.json). For a local install, copy this product’s marketplace package into Cursor’s plugin folder:

git clone https://github.com/garylesueur/meatsack-marketplace.git
mkdir -p ~/.cursor/plugins/local/askmeatsack
cp -R meatsack-marketplace/plugins/askmeatsack/. ~/.cursor/plugins/local/askmeatsack/

Then reload the window. The plugin carries the hosted MCP server and skills/askmeatsack/SKILL.md.

Or install from GitHub:

https://github.com/garylesueur/askmeatsack

Or install the MCP server on its own at https://askmeatsack.com/mcp. The tool works, and the server sends the same skill as its MCP instructions, so most clients still get the full brief. Clients that ignore instructions see only the tool description — prefer the plugin where you can.

Licence

MIT — see LICENSE.

Built by Gary Le Sueur.

Site icons

The browser favicon and Apple touch icon use the same character artwork as the plugin listing. Edit public/plugin-icon.png, then run pnpm sync:icons to regenerate src/app/favicon.ico, src/app/icon.png, and src/app/apple-icon.png. Do not edit those exports by hand. Builds regenerate them, and tests check that they match the source.

About

An agent asks a human questions. The human answers in the browser.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages