Repository navigation
[0.5.4-beta.1] - 2026-10-09
Changed
-
README and install guide: the README is a short front door with a quick-start table (the first command for each install path) and a section listing the hosts the toolkit contacts, the headers it sends, and what the installers and
pipefy auth loginwrite on your machine. The full install guide, tool-surface selection, and testing the Claude Code plugin from a checkout live indocs/install.md; links across docs, skills, and the MCP setup error point there. -
Claude Code plugin manifest:
.claude-plugin/plugin.jsoncarries the fields Anthropic's plugin directory reads for a listing (icon,documentationUrl,supportUrl,privacyPolicyUrl,termsOfServiceUrl) and a contact email onauthor.TERMS.mdlinks the terms page itself instead of the legal index the old link redirected to, and the README embeds its banner with Markdown image syntax. -
Skill
pipefy-api-fallback, credentials: before it reads aPIPEFY_*variable, the skill names the variable and the host its value goes to, and waits for the user's yes. It finds which variables are set by listing names only, so no value is printed before that. The README now names this directcurlpath,api.pipefy.comas an alias of the API host, and the scan command, which downloadsuninstall.shfrom GitHub and reads the sourcesdocs/uninstall.mdlists under Scope, the OS keychain included, without changing them. -
MCP
update_portal_element/ CLIpipefy portal element update: an update must now passdata_sources(--data-sources) orportal_uuid(--portal-uuid). Before, leaving outdata_sourcessent[]and unlinked the element from its pipe or table; nowportal_uuidkeeps the current bindings and omitting both is rejected before any call (MCPINVALID_ARGUMENTS, CLI exit 2). Updates of elements with no bindings, such aslink, passdata_sources: []/--data-sources '[]'. (#711)
Fixed
-
uninstall.sh --scanand teardown, keyring fallback file: on a machine with no OS keychain backend, Pythonkeyringstores thepipefy auth loginsession in its own plaintext file,python_keyring/keyring_pass.cfgunder$XDG_DATA_HOME(default~/.local/share), which the scan did not inspect, so it reported such a machine as clean. The scan now reports a Pipefy session there (or reports the file as not inspected when it is unreadable), and teardown removes only the[pipefy]section of that shared file, without keeping a backup copy of it. -
uninstall.shteardown, symlinked files: when a shell rc, an MCP client config (~/.claude.json,~/.cursor/mcp.json, and the other JSON configs), the Codex config, or the keyring fallback file is a symlink (a dotfiles repository, for example), teardown edits the file the link points at and keeps the link. It used to replace the link with a regular file and leave the original content, including any credential, untouched. A symlinked file-backendkeyring.cfgis deleted together with the file it points at. When that file cannot be deleted, teardown keeps the link, reports the failure, and exits 2, so the re-scan still finds the store. -
Skills
pipefy-introspectionandpipefy-api-fallback, endpoints and auth errors: both skills said introspection and real operations need different hosts. One endpoint,https://app.pipefy.com/graphql(the toolkit's default), serves queries, mutations, and introspection, andapi.pipefy.comanswers the same way. The fallback skill also said GraphQL always returns HTTP 200 and that a syntax error returns 400. Syntax errors return 200 withGRAPHQL_PARSE_FAILED, authentication failures return HTTP 401 with one of two bodies depending on the cause, and a malformed JSON body returns 500. The error table covers both 401 bodies,undefinedField, and thePERMISSION_DENIEDPipefy returns for a pipe or card ID that does not exist. -
SDK
update_portal_elementkeeps data sources:PipefyClient.update_portal_elementsentdata_sources: []when the caller left it out, and the API replaces an element's data sources with that list, so updating aformsortableelement's metadata unlinked it from its pipe or table.get_portalnow returns each element'sdataSourcesandeditable, and the SDK update takesportal_uuid: withdata_sourcesomitted, it resends the element's stored data sources and, unlesseditableis passed, its storededitableflag (the API rejects an update whose data source listsfieldKeyswithout one). Omitting bothdata_sourcesandportal_uuidis now rejected before any request;data_sources=[]still unlinks. (#711) -
AI agent pre-flight,
eventIdand action metadata:validate_ai_agent_behaviorspassed behaviors that the API then rejects withRECORD_NOT_SAVED. It now checks each behavior'seventIdagainst the pipe's automation events (get_automation_events) and lists the valid events in the error. When the events cannot be loaded, it reports that theeventIdwas not verified instead of a clean pass. Ahuman_validationaction needsemailsortitlein its metadata, and anmcp_toolaction needsmcpServerIdandtoolName. The hint thatupdate_ai_agentadds to aRECORD_NOT_SAVEDerror names these causes. (#729) -
MCP argument errors in AI agent, AI automation, and automation tools:
create_ai_agent,update_ai_agent,create_ai_automation,update_ai_automation,create_send_task_automation, and theconditionargument ofcreate_automation/update_automationreturned the raw Pydantic error text, with the model name, aninput_value=echo of the arguments, and anerrors.pydantic.devlink. They now return onefield: messageclause per error, in the same format as the other tools' argument errors. The tools fail in the same cases and with the same error envelope. (#703)