@NotionDevs: 安装 ntn,Notion CLI。它将整个 Notion API 带到你的终端,并包含构建和部署所需的一切……
摘要
ntn 是一个 Notion 命令行工具,将完整的 Notion API 引入终端,并支持构建和部署 Workers。通过 curl/wget 安装。
查看缓存全文
缓存时间: 2026/05/14 06:31
安装 ntn,Notion CLI。
它将整个 Notion API 带到你的终端,还包括构建和部署 Workers 所需的一切。专为人类和编码代理设计。
使用以下命令安装:curl -fsSL https://t.co/2dJqE3YHvw | bash https://t.co/X4Cr4c9GXg
来源:https://ntn.dev/ #!/usr/bin/env bash set -euo pipefail
readonly BASE_URL=“{NTN_BASE_URL:-https://ntn.dev}" readonly INSTALL_DIR="{NTN_INSTALL_DIR:-/usr/local/bin}” readonly REQUESTED_VERSION=“${NTN_VERSION:-latest}”
if [[ “{REQUESTED_VERSION}" != "latest" && ! "{REQUESTED_VERSION}” =~ ^v?[0-9]+.[0-9]+.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then printf ‘错误:版本 “%s” 无效 —— 应为 “latest” 或 semver 格式如 “1.2.3” 或 “v1.2.3”\n’ “${REQUESTED_VERSION}” >&2 exit 1 fi
function info() { printf ‘==> %s\n’ “$*” >&2 }
function fail() { printf ‘错误:%s\n’ “$*” >&2 exit 1 }
function require_command() { local command_name=“1" command -v "command_name” >/dev/null 2>&1 || fail “缺少必需的命令:${command_name}” }
function detect_downloader() { if command -v curl >/dev/null 2>&1; then DOWNLOADER=“curl” elif command -v wget >/dev/null 2>&1; then DOWNLOADER=“wget” else fail “需要 curl 或 wget,但两者均未安装” fi }
function download() { local url=“1" local output="{2:-}” if [[ “{DOWNLOADER}" == "curl" ]]; then if [[ -n "{output}” ]]; then curl -fsSL -o “{output}" "{url}” else curl -fsSL “{url}" fi else if [[ -n "{output}” ]]; then wget -q -O “{output}" "{url}” else wget -q -O - “${url}” fi fi }
function detect_target() { local os local arch os=“(uname -s)" arch="(uname -m)”
# 检测 Rosetta 2:如果在 ARM Mac 上通过 Rosetta 运行 x86_64,则改用原生 arm64 二进制文件。
if [[ "${os}" == "Darwin" && "${arch}" == "x86_64" ]]; then
if [[ "$(sysctl -n sysctl.proc_translated 2>/dev/null)" == "1" ]]; then
arch="arm64"
fi
fi
case "${os}" in
MINGW* | MSYS* | CYGWIN*)
fail "ntn 目前不支持 Windows"
;;
esac
case "${os}:${arch}" in
Darwin:arm64 | Darwin:aarch64)
NTN_TARGET="aarch64-apple-darwin"
NTN_PLATFORM_LABEL="darwin-arm64"
;;
Darwin:x86_64)
NTN_TARGET="x86_64-apple-darwin"
NTN_PLATFORM_LABEL="darwin-x64"
;;
Linux:x86_64)
NTN_TARGET="x86_64-unknown-linux-musl"
NTN_PLATFORM_LABEL="linux-x64"
;;
Linux:arm64 | Linux:aarch64)
NTN_TARGET="aarch64-unknown-linux-musl"
NTN_PLATFORM_LABEL="linux-arm64"
;;
*)
fail "ntn 不支持 ${os} ${arch}"
;;
esac
}
function normalize_version() { local version=“1" if [[ "{version}” == v* ]]; then printf ‘%s\n’ “{version}" else printf 'v%s\n' "{version}” fi }
function resolve_version() { if [[ “{REQUESTED_VERSION}" == "latest" ]]; then download "{BASE_URL}/latest.txt” | tr -d ‘[:space:]’ else normalize_version “${REQUESTED_VERSION}” fi }
function verify_archive() { local archive_dir=“1" local archive_name="2” local checksum_name=“$3”
if command -v shasum >/dev/null 2>&1; then
(cd "${archive_dir}" && shasum -a 256 -c "${checksum_name}") || fail "校验和验证失败"
return
fi
if command -v sha256sum >/dev/null 2>&1; then
(cd "${archive_dir}" && sha256sum -c "${checksum_name}") || fail "校验和验证失败"
return
fi
fail "未找到校验和工具(需要 shasum 或 sha256sum)"
}
function install_binary() { local binary_path=“1" local destination_path="{INSTALL_DIR}/ntn”
if mkdir -p "${INSTALL_DIR}" 2>/dev/null && install -m 0755 "${binary_path}" "${destination_path}" 2>/dev/null; then
return
fi
command -v sudo >/dev/null 2>&1 || fail "无法写入 ${INSTALL_DIR};请使用 sudo 重新运行或设置 NTN_INSTALL_DIR"
sudo mkdir -p "${INSTALL_DIR}"
sudo install -m 0755 "${binary_path}" "${destination_path}"
}
detect_downloader require_command tar require_command uname require_command mktemp require_command install
detect_target
VERSION=“(resolve_version)" || true readonly VERSION [[ -n "{VERSION}” ]] || fail “无法解析版本(请检查网络连接或 NTN_BASE_URL)”
readonly ARCHIVE_NAME=“ntn-{NTN_TARGET}.tar.gz" readonly ARCHIVE_URL="{BASE_URL}/releases/{VERSION}/{ARCHIVE_NAME}” readonly CHECKSUM_URL=“${ARCHIVE_URL}.sha256”
TMP_DIR=“(mktemp -d)" readonly TMP_DIR trap 'rm -rf "{TMP_DIR}”’ EXIT
ARCHIVE_PATH=“{TMP_DIR}/{ARCHIVE_NAME}” readonly ARCHIVE_PATH
CHECKSUM_PATH=“{TMP_DIR}/{ARCHIVE_NAME}.sha256” readonly CHECKSUM_PATH
info “正在下载适用于 ${NTN_PLATFORM_LABEL} 的 ${VERSION}”
if ! download “{ARCHIVE_URL}" "{ARCHIVE_PATH}”; then rm -f “${ARCHIVE_PATH}” fail “下载 ${ARCHIVE_URL} 失败” fi
if ! download “{CHECKSUM_URL}" "{CHECKSUM_PATH}”; then rm -f “${CHECKSUM_PATH}” fail “从 ${CHECKSUM_URL} 下载校验和文件失败” fi
verify_archive “{TMP_DIR}" "{ARCHIVE_NAME}” “(basename "{CHECKSUM_PATH}”)“
tar -xzf “{ARCHIVE_PATH}" -C "{TMP_DIR}”
BINARY_PATH=“{TMP_DIR}/ntn-{NTN_TARGET}/ntn” readonly BINARY_PATH [[ -f “${BINARY_PATH}” ]] || fail “下载的存档文件中不包含 ntn 二进制文件”
install_binary “${BINARY_PATH}”
cat >&2 <<‘BANNER’ ▄▄▄▄▄▄▄▄▖ ██▄▄▄▄▄▄▄▟▙▖ ███ ▄▄ ▄▄▐▌ ███ ▐█▙ ▐▌▐▌ ███ ▐▌▜▙▐▌▐▌ ███ ▟▙ ▀█▌▐▌ ▀█▄▄▄▄▄▄▄▞▘ BANNER printf ’ Notion CLI(Beta)\n\n’ >&2 printf ’ 已将 ntn %s 安装到 %s/ntn\n\n’ “{VERSION}" "{INSTALL_DIR}” >&2 cat >&2 <<‘NEXT’ 开始使用: ntn login 登录到你的 Notion 工作区 ntn workers new 创建一个新的 Worker ntn datasources query 查询数据源 ntn pages create 从 Markdown 创建页面 ntn api 直接调用 Notion API ntn –help 查看所有可用命令 为你的代理添加 Notion 技能: npx skills add makenotion/skills NEXT
相似文章
Notion 成为后端平台了。"Notion Workers" 更新是开发者的巨变。
Notion 的新 Workers 功能允许在 Notion 基础设施上运行自定义代码,将平台转变为内部工具的后端,无需第三方中间件。
Notion 开发者平台
Notion 推出了一个开发者平台,让用户可以在 Notion 之上进行构建,将其功能扩展到核心应用之外。
@jakevin7: Notion 官方出 CLI 了!OpenCLI 第一时间接入 现在你可以让 Agent 直接操作 Notion——不只是调 API,是真正的客户端级别的操控。 几个马上能用的场景: 用 opencli web read 把任意网页的内容…
Notion 官方发布了 CLI 工具,OpenCLI 第一时间集成,允许用户通过命令行和 AI 代理直接操作 Notion,实现跨平台内容同步和自动化。
@reach_vb: Codex 小贴士:你也可以通过 curl 安装 CLI,特别适用于远程虚拟机/树莓派,以及当你想要避免使用 npm 时…
通过 curl 安装 Codex CLI 的小贴士,适用于远程虚拟机和避免使用 npm 的情况。
Notion 将其工作空间转变为 AI 智能体的中心
Notion 宣布推出新的开发者平台,通过 Workers、外部数据同步和智能体编排扩展其自定义 AI 智能体,将自身定位为 AI 智能体协作的中心。