here.now 中文教程
官方网站 ↗
免费托管 专为 Agent 设计

here.now 中文教程

即时发布任何文件或文件夹,获得 live URL。
三步发布,无需账户,24 小时后自动过期。

概述

here.now 是免费的即时 Web 托管服务,专为 Agent 设计。发布任何文件或文件夹,获得 live URL:<slug>.here.now

📄
仅静态托管
HTML、CSS、JS、图片、PDF、视频等
🔓
无需账户
匿名站点,24 小时过期
🔑
API 密钥
永久站点和更高限额

安装

安装 here.now skill,让 Agent 自动发布:

$ npx skills add heredotnow/skill --skill here-now -g

对于项目本地安装,运行时不加 -g

如果失败,使用备用安装器:

$ curl -fsSL https://here.now/install.sh | bash

快速开始

三步发布站点,无需账户:

1

创建站点

$ curl -sS https://here.now/api/v1/publish \
  -H "X-HereNow-Client: cursor/direct-api" \
  -H "content-type: application/json" \
  -d '{
    "files": [
      { "path": "index.html", "size": 1234, "contentType": "text/html; charset=utf-8" }
    ]
  }'
2

上传文件

$ curl -X PUT "<upload.uploads[0].url>" \
  -H "Content-Type: text/html; charset=utf-8" \
  --data-binary @index.html
3

完成发布

$ curl -sS -X POST "<finalizeUrl>" \
  -H "content-type: application/json" \
  -d '{ "versionId": "<versionId>" }'
提示:步骤 1 的响应包含 live siteUrl、预签名上传 URL 和 finalizeUrl。匿名站点 24 小时过期,包含 claimUrl 以便永久保留站点。

认证

Authenticated 认证模式

包含 Authorization: Bearer <API_KEY>,站点永久保留,更高限额。

Anonymous 匿名模式

省略 header,站点 24 小时过期,限额较低。

可选归属:包含 X-HereNow-Client: <agent>/<tool>,以便 here.now 按客户端调试可靠性。

获取 API 密钥

方式 A:Agent 辅助注册

通过邮箱请求一次性代码:

$ curl -sS https://here.now/api/auth/agent/request-code \
  -H "content-type: application/json" \
  -d '{"email": "user@example.com"}'

验证代码以获取 API 密钥:

$ curl -sS https://here.now/api/auth/agent/verify-code \
  -H "content-type: application/json" \
  -d '{"email":"user@example.com","code":"ABCD-2345"}'

如果是新邮箱,账户会自动创建。

方式 B:Dashboard 注册

here.now 登录,从 dashboard 复制 API 密钥。

存储 API 密钥

保存到凭证文件:

$ mkdir -p ~/.herenow && echo "<API_KEY>" > ~/.herenow/credentials && chmod 600 ~/.herenow/credentials

读取优先级(首次匹配获胜):

1 --api-key 标志(仅 CI/脚本)
2 $HERENOW_API_KEY 环境变量
3 ~/.herenow/credentials 文件(推荐)

创建站点

POST /api/v1/publish 别名:/api/v1/artifact

请求体

{
  "files": [
    { "path": "index.html", "size": 1234, "contentType": "text/html; charset=utf-8", "hash": "a1b2c3d4..." }
  ],
  "ttlSeconds": null,
  "viewer": {
    "title": "My site",
    "description": "Published by an agent",
    "ogImagePath": "assets/cover.png"
  }
}

参数说明

参数必需说明
files{ path, size, contentType, hash } 数组。路径相对于站点根目录。
hashSHA-256 hex 摘要。更新时匹配的文件跳过上传。
ttlSeconds过期时间(秒)。匿名站点忽略。
viewer自动 viewer 页面的元数据(仅无 index.html 时适用)。

认证用户响应

{
  "slug": "bright-canvas-a7k2",
  "siteUrl": "https://bright-canvas-a7k2.here.now/",
  "upload": {
    "versionId": "01J...",
    "uploads": [
      { "path": "index.html", "method": "PUT", "url": "https://<presigned-url>" }
    ],
    "skipped": ["assets/app.js"],
    "finalizeUrl": "https://here.now/api/v1/publish/bright-canvas-a7k2/finalize",
    "expiresInSeconds": 3600
  }
}

匿名响应额外字段

{
  "claimToken": "abc123...",
  "claimUrl": "https://here.now/claim?slug=bright-canvas-a7k2&token=abc123...",
  "expiresAt": "2026-02-19T01:00:00.000Z",
  "anonymous": true
}
⚠️ 重要:claimTokenclaimUrl 仅返回一次,无法恢复。务必保存并分享给用户,以便永久保留站点。

上传文件

upload.uploads[] 中的每个条目,PUT 文件到预签名 URL:

$ curl -X PUT "<presigned-url>" \
  -H "Content-Type: <content-type>" \
  --data-binary @<local-file>

上传可以并行运行。预签名 URL 有效期为 1 小时。

完成发布

POST /api/v1/publish/:slug/finalize
{ "versionId": "01J..." }

拥有站点需要 Authorization: Bearer。匿名站点无需 auth 即可 finalize。

响应

{
  "success": true,
  "slug": "bright-canvas-a7k2",
  "siteUrl": "https://bright-canvas-a7k2.here.now/",
  "currentVersionId": "01J..."
}

更新现有站点

PUT /api/v1/publish/:slug

请求体与创建相同。返回新的预签名上传 URL 和新的 finalizeUrl

拥有站点:需要 Authorization: Bearer <API_KEY>
匿名站点:在请求体中包含 claimToken,更新不会延长过期时间
增量部署:包含 hash(SHA-256 hex),匹配文件跳过上传

认领匿名站点

POST /api/v1/publish/:slug/claim

需要 Authorization: Bearer <API_KEY>

{ "claimToken": "abc123..." }

转移所有权,移除过期时间。用户也可以访问 claimUrl 并登录来认领。

密码保护

为任何站点添加密码,服务器端强制 — 密码验证前内容不会发送到浏览器。

设置密码
{"password": "secret"}
移除密码
{"password": null}

通过 PATCH /api/v1/publish/:slug/metadata 设置。密码保护在重新部署后依然存在。需要认证站点。

复制站点

POST /api/v1/publish/:slug/duplicate

服务器端创建完整副本,无需客户端上传。需要 Authorization 且拥有源站点。

$ curl -sS -X POST https://here.now/api/v1/publish/{slug}/duplicate \
  -H "Authorization: Bearer {API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{}'

复制所有文件和 viewer 元数据。不复制密码保护、handle/域名链接或 TTL。

更新元数据

PATCH /api/v1/publish/:slug/metadata
{
  "ttlSeconds": 604800,
  "viewer": {
    "title": "Updated title",
    "description": "New description"
  },
  "password": "secret123"
}

所有字段可选。需要 Authorization: Bearer <API_KEY>

删除站点

DELETE /api/v1/publish/:slug

需要 Authorization: Bearer <API_KEY>。硬删除站点和所有存储文件。

列出站点

GET /api/v1/publishes

需要 Authorization。返回认证用户拥有的所有站点。

{
  "publishes": [
    {
      "slug": "bright-canvas-a7k2",
      "siteUrl": "https://bright-canvas-a7k2.here.now/",
      "status": "active",
      "currentVersionId": "01J..."
    }
  ]
}

获取站点详情

GET /api/v1/publish/:slug

返回当前 live 版本的元数据和完整文件清单 manifest

{
  "slug": "bright-canvas-a7k2",
  "manifest": [
    { "path": "index.html", "size": 1234 },
    { "path": "assets/app.js", "size": 999 }
  ]
}

刷新上传 URL

POST /api/v1/publish/:slug/uploads/refresh

返回待处理上传的新鲜预签名 URL(相同版本)。用于 URL 在上传中途过期时。

Handle

Handle 提供稳定的子域名如 yourname.here.now,将位置路由到你的站点。认领 handle 需要付费计划(Hobby 或以上)。

操作端点
创建POST /api/v1/handle
获取GET /api/v1/handle
更新PATCH /api/v1/handle
删除DELETE /api/v1/handle

格式:小写字母/数字/连字符,2-30 字符,无前导/尾随连字符。

自定义域名

使用自己的域名托管站点。Free 计划:1 个域名。Hobby 计划:最多 5 个。

子域名

docs.example.com,添加 CNAME 记录指向 fallback.here.now

Apex 域名

example.com,添加 ALIAS 记录 + TXT 验证记录

$ curl -sS https://here.now/api/v1/domains \
  -H "Authorization: Bearer <API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{"domain": "example.com"}'

DNS 验证后自动配置 SSL。状态从 pending 变为 active

服务规则

1 根目录存在 index.html,直接提供
2 整个站点只有一个文件,提供 auto-viewer(图片、PDF、视频等)
3 子目录中存在 index.html,提供找到的第一个
4 否则,提供自动生成的目录列表

直接文件路径始终有效:https://<slug>.here.now/report.pdf

限制

匿名认证
最大文件大小250 MB5 GB
过期时间24 小时永久(或自定义 TTL)
站点数量500 免费 / Hobby 无限
存储空间10 GB 免费 / 100 GB Hobby
速率限制5 次/小时/IP60 次/小时免费 / 200 次/小时 Hobby
需要账户