← FormHugCONTENT HISTORY

Update to FormHug

Snapshot Oct 24, 2026 · 12:51 UTC · version 2.0.1

WHAT CHANGED

Package or technical metadata updated

Package or technical metadata updated

Observed in package metadata. These changes alone do not establish a new customer-facing feature.

Save FormHug and check future changes in Following.

Up to 3 plugins free · no card required.

All fields and original values.

These are saved file metadata. Open a changed file to read its text edits.

Package file

Before

Sep 30, 2026 · 22:47 UTC

Not present

After

Oct 24, 2026 · 12:51 UTC

{"sha256":"ea3dee9a5dd6e50e6588607bb1feca65be7fdf31f9c461d2370e11e161f105e8","size":10244}

Package file

Before

Sep 30, 2026 · 22:47 UTC

91a8cc883773421e77b52dc3f629e861d74cd2e8df555c88c25f5474a5ed5abc

After

Oct 24, 2026 · 12:51 UTC

aaa47bb7ebd77f674c5e97d1aeaa8c23b7ecb39374fe2b384478cf730bf8b442

Package file

Before

Sep 30, 2026 · 22:47 UTC

127

After

Oct 24, 2026 · 12:51 UTC

99

Package file

Before

Sep 30, 2026 · 22:47 UTC

34e05a02e7fd5ebd47876a7c0e5b4dff5888826eb900664b0d9dc5b7995775f0

After

Oct 24, 2026 · 12:51 UTC

4b4e566ff34013d4dd284b585c0118f5d22b9b7a0446bc6a7beee2b42d57a3e2

Compare saved observations

Download comparison JSON

README.md

− removed · + added

--- before
+++ after
@@ -0,0 +1,86 @@
+# FormHug OpenAI plugin
+
+This directory contains the source of the existing FormHug ChatGPT plugin.
+Release `2.0.1` adds an explicit MCP connection and a portable manifest while
+retaining the published plugin identity, listing text, and starter prompts.
+
+## Package layout
+
+```text
+openai/
+  plugin.json                 # Agent Plugins 1.0 manifest
+  mcp.json                    # Remote FormHug MCP connection
+  .codex-plugin/plugin.json   # Compatibility manifest for older clients
+  assets/icon.png             # 512 × 512 FormHug app and composer icon
+  skills/
+    formhug-create-form/
+    formhug-create-quiz/
+    formhug-improve-form/
+    formhug-analyze-responses/
+```
+
+Keep identity, version, and interface metadata synchronized between the two
+manifests. The portable manifest discovers `skills/` and `mcp.json` at their
+fixed locations; the compatibility manifest references them explicitly.
+The `formhug` server key matches every skill's `agents/openai.yaml` dependency.
+
+Both manifests reference `assets/icon.png` through `logo` and `composerIcon`.
+The PNG reuses the existing FormHug brand icon from
+`next-app-main/src/assets/images/icon.png`; include it in every exported ZIP.
+
+## MCP connection
+
+- Production endpoint: `https://formhug.ai/mcp`.
+- Transport: Streamable HTTP (`streamable-http` in `mcp.json`,
+  `streamable_http` in skill dependency metadata).
+- Authentication: the host completes FormHug OAuth authorization with PKCE
+  S256. No client secret, access token, or static Authorization header belongs
+  in this package. OAuth client secrets are Worker deployment secrets.
+- Discovery: `https://formhug.ai/.well-known/oauth-protected-resource/mcp`
+  and `https://formhug.ai/.well-known/oauth-authorization-server`.
+- UAT endpoint: `https://uat.formhug.ai/mcp`. Use it only in a separate test
+  copy, updating both `mcp.json` and all skill dependency URLs together.
+
+The endpoint and discovery routes are configured in the repository's
+`wrangler.jsonc`; routing and OAuth are implemented in `src/index.ts`.
+Tools and references come from the remote server, so the plugin does not bundle
+the Worker runtime or duplicate its tool schemas. Installing the package does
+not deploy the Worker.
+
+The server provides form and field management, settings, themes, conditional
+rules, folders, entries, uploads, webhooks, public lookup pages, and account
+information. The four packaged skills guide form creation, scored quizzes and
+assessments, existing-form improvements, and response analysis.
+
+Read `formhug://guide` before a workflow. Then read the task-specific resource,
+such as `formhug://field-types`, `formhug://themes`, `formhug://field-rules`,
+`formhug://entries-filter`, or `formhug://entry-values`. Hosts without direct
+resource access can call `read_reference` with the same URI. The authoritative
+reference registry is `src/resources/index.ts`.
+
+## Export and verify
+
+Run these commands from the repository root. The staging directory uses the
+existing manifest name to preserve the published identity. The archive includes
+hidden compatibility files and excludes macOS metadata.
+
+```bash
+staging_dir=$(mktemp -d)
+plugin_name=$(node -p "require('./published-plugins/openai/plugin.json').name")
+mkdir "$staging_dir/$plugin_name"
+cp -R published-plugins/openai/. "$staging_dir/$plugin_name/"
+archive_path="$PWD/published-plugins/formhug-openai-2.0.1.zip"
+(cd "$staging_dir" && zip -r "$archive_path" "$plugin_name" -x '*/.DS_Store' '*/__MACOSX/*')
+unzip -l "$archive_path"
+```
+
+Validate `plugin.json` and `mcp.json` against their declared schemas, check that
+each skill's directory matches its frontmatter name, and verify that dependency
+names and URLs match `mcp.json`. Before publishing, connect the plugin in the
+intended host, complete OAuth, and call `read_reference` for `formhug://guide`
+plus a read-only discovery tool such as `list_forms`. Check form-preview UI in
+the host when preview behavior is part of the release. Do not create real test
+submissions merely to validate installation.
+
+Source changes or an exported ZIP do not update the published plugin. Use the
+existing plugin's release flow and preserve its sharing and permissions.
Full technical diff · 17 changed fields

added /files/.DS_Store

BEFORE
Field was absent
AFTER
{
  "sha256": "ea3dee9a5dd6e50e6588607bb1feca65be7fdf31f9c461d2370e11e161f105e8",
  "size": 10244
}

changed /files/.app.json/sha256

BEFORE
"91a8cc883773421e77b52dc3f629e861d74cd2e8df555c88c25f5474a5ed5abc"
AFTER
"aaa47bb7ebd77f674c5e97d1aeaa8c23b7ecb39374fe2b384478cf730bf8b442"

changed /files/.app.json/size

BEFORE
127
AFTER
99

changed /files/.codex-plugin~1plugin.json/sha256

BEFORE
"34e05a02e7fd5ebd47876a7c0e5b4dff5888826eb900664b0d9dc5b7995775f0"
AFTER
"4b4e566ff34013d4dd284b585c0118f5d22b9b7a0446bc6a7beee2b42d57a3e2"

changed /files/.codex-plugin~1plugin.json/size

BEFORE
1505
AFTER
1772

added /files/README.md

BEFORE
Field was absent
AFTER
{
  "sha256": "41c46dcb54b5650c0a0856725ed5296a114451941059b0ef3ca5c348e183c477",
  "size": 4180
}

added /files/assets~1icon.png

BEFORE
Field was absent
AFTER
{
  "sha256": "3088bda7dbcec1642c6ffad71cd383ee256f123c8c860bc655d1785a04de9eff",
  "size": 4993
}

added /files/mcp.json

BEFORE
Field was absent
AFTER
{
  "sha256": "64edf95da2c83135050f25afac5762300d0bc8ec8778ea18e7ebfc524dc98627",
  "size": 192
}

added /files/plugin.json

BEFORE
Field was absent
AFTER
{
  "sha256": "069a8d0bca271c4a4c90f647bae0d9268c976b582e481a3d829698467e14581b",
  "size": 1988
}

added /files/skills~1formhug-analyze-responses~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "febb2352a42adcad241cc39a8bcd3b254f600540ad967fb9bce040977165df81",
  "size": 4289
}

added /files/skills~1formhug-analyze-responses~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "819b6fe58bc5760744b5a807d6d938bc1cb330950fbf0b9994aa7335fecbba0c",
  "size": 476
}

added /files/skills~1formhug-create-form~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "79aa06095f4f7c85f84f1aece184f967f30369bbe866df39f73fcf56d73d9e41",
  "size": 4705
}

added /files/skills~1formhug-create-form~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "f631de8f16383bb5ea87ea2b96d37a12a8a6a8e53d9af37ecaa96673df91fb7e",
  "size": 483
}

added /files/skills~1formhug-create-quiz~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "87972b65b6ef5b919a72898071086c21e12007d08f3c4380e40234bb0216113b",
  "size": 8080
}

added /files/skills~1formhug-create-quiz~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "fc3124fb1abe607cf0766c945f4b2f72aeab1d0bfc85e35ad45836443d7444ad",
  "size": 480
}

added /files/skills~1formhug-improve-form~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "86fbeb74090dc189fa512592d0d5372eb378230927821315cf8fe6b52a504d24",
  "size": 5110
}

added /files/skills~1formhug-improve-form~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "2f6504962fed813bd3b37f9aaee06c15864bd9db6723cff859164492228cdaf3",
  "size": 482
}
Full snapshot data
{
  "files": {
    ".DS_Store": {
      "sha256": "ea3dee9a5dd6e50e6588607bb1feca65be7fdf31f9c461d2370e11e161f105e8",
      "size": 10244
    },
    ".app.json": {
      "sha256": "aaa47bb7ebd77f674c5e97d1aeaa8c23b7ecb39374fe2b384478cf730bf8b442",
      "size": 99
    },
    ".codex-plugin/plugin.json": {
      "sha256": "4b4e566ff34013d4dd284b585c0118f5d22b9b7a0446bc6a7beee2b42d57a3e2",
      "size": 1772
    },
    "README.md": {
      "sha256": "41c46dcb54b5650c0a0856725ed5296a114451941059b0ef3ca5c348e183c477",
      "size": 4180
    },
    "assets/icon.png": {
      "sha256": "3088bda7dbcec1642c6ffad71cd383ee256f123c8c860bc655d1785a04de9eff",
      "size": 4993
    },
    "mcp.json": {
      "sha256": "64edf95da2c83135050f25afac5762300d0bc8ec8778ea18e7ebfc524dc98627",
      "size": 192
    },
    "plugin.json": {
      "sha256": "069a8d0bca271c4a4c90f647bae0d9268c976b582e481a3d829698467e14581b",
      "size": 1988
    },
    "skills/formhug-analyze-responses/SKILL.md": {
      "sha256": "febb2352a42adcad241cc39a8bcd3b254f600540ad967fb9bce040977165df81",
      "size": 4289
    },
    "skills/formhug-analyze-responses/agents/openai.yaml": {
      "sha256": "819b6fe58bc5760744b5a807d6d938bc1cb330950fbf0b9994aa7335fecbba0c",
      "size": 476
    },
    "skills/formhug-create-form/SKILL.md": {
      "sha256": "79aa06095f4f7c85f84f1aece184f967f30369bbe866df39f73fcf56d73d9e41",
      "size": 4705
    },
    "skills/formhug-create-form/agents/openai.yaml": {
      "sha256": "f631de8f16383bb5ea87ea2b96d37a12a8a6a8e53d9af37ecaa96673df91fb7e",
      "size": 483
    },
    "skills/formhug-create-quiz/SKILL.md": {
      "sha256": "87972b65b6ef5b919a72898071086c21e12007d08f3c4380e40234bb0216113b",
      "size": 8080
    },
    "skills/formhug-create-quiz/agents/openai.yaml": {
      "sha256": "fc3124fb1abe607cf0766c945f4b2f72aeab1d0bfc85e35ad45836443d7444ad",
      "size": 480
    },
    "skills/formhug-improve-form/SKILL.md": {
      "sha256": "86fbeb74090dc189fa512592d0d5372eb378230927821315cf8fe6b52a504d24",
      "size": 5110
    },
    "skills/formhug-improve-form/agents/openai.yaml": {
      "sha256": "2f6504962fed813bd3b37f9aaee06c15864bd9db6723cff859164492228cdaf3",
      "size": 482
    }
  }
}

SHA-256 of public snapshot: 2f7996f69fa7a41d9a8dd810c2d9b64754f22f287a233ecae9d4c68929b1a0ed