@aliou/pi-linkup

![banner](https://assets.aliou.me/github/aliou/pi-linkup/banner.png)

Packages

Package details

extensionskill

Install @aliou/pi-linkup from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@aliou/pi-linkup
Package
@aliou/pi-linkup
Version
0.13.0
Published
Nov 3, 2026
Downloads
394/mo · 234/wk
Author
aliou
License
MIT
Types
extension, skill
Size
73.1 KB
Dependencies
2 dependencies · 4 peers
Pi manifest JSON
{
  "video": "https://assets.aliou.me/github/aliou/pi-linkup/demo.mp4",
  "skills": [
    "./skills"
  ],
  "extensions": [
    "./src/extensions/web-search/index.ts",
    "./src/extensions/web-answer/index.ts",
    "./src/extensions/web-fetch/index.ts",
    "./src/extensions/command-balance/index.ts",
    "./src/extensions/command-settings/index.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

banner

pi-linkup

Give Pi web search, cited answers, and page extraction through the Linkup API. Search for sources, read HTML or PDFs, and request structured JSON without parsing page text yourself.

https://github.com/user-attachments/assets/a0f131a4-d57c-4162-aeb5-ffc1a0a8d7ff

Install and try it

For direct access, get an API key from app.linkup.so and set LINKUP_API_KEY where Pi runs. A configured API proxy can be used without a key. Install:

pi install npm:@aliou/pi-linkup

Ask Pi:

Find the TypeScript release notes on typescriptlang.org, then fetch the most relevant page and summarize it with source links.

Git installation is also supported: pi install git:github.com/aliou/pi-linkup.

Tools

Tool Use
linkup_web_search Discover sources and snippets, or pass a root-object JSON schema for typed data with sources.
linkup_web_answer Get a synthesized answer with sources; enable includeInlineCitations for inline citations.
linkup_web_fetch Read a known HTML/PDF URL as markdown; pass schema and optional instructions for typed extraction.

Search and answer support domain/date filters and flash, fast, standard, or deep depth. Standard is the default. Flash and fast retrieve indexed content without interpreting multi-step retrieval instructions. Search also supports limit (default 10) and includeImages.

Fetch defaults to JavaScript rendering. Use renderJs: false for confirmed static pages, mode: "pro" for hard-to-retrieve pages, and includeRawContent / extractImages when needed. Extraction instructions require a schema; missing grounded fields are omitted rather than invented. Fetch reads one URL, not its linked pages.

Use /skill:linkup for agent workflows. Full input constraints are available in each tool's declaration. See Linkup's search and fetch references for provider behavior.

Settings

Run /linkup:settings to configure the API proxy URL and choose exposure independently for each tool. Save with Ctrl+S, then /reload or restart Pi.

Leave proxyUrl empty for direct Linkup access. Otherwise, set the full HTTP(S) API base URL including its path prefix; each endpoint is appended to it. Proxy requests never forward LINKUP_API_KEY: upstream authentication belongs at the proxy. Credentials, queries, and fragments are not allowed in the URL. Saving a changed proxy first checks GET /credits/balance (non-billed); failed checks leave the stored settings intact.

Exposure Availability
direct (default) Declared to the model and callable from scripts
model-only Declared to the model, not callable from scripts
codemode Callable from scripts, not directly declared
deferred Discoverable through tool search and callable from scripts
hidden Unreachable

Enable tool_search or codemode before choosing deferred exposure; codemode-only tools need codemode. Exposure is not a permission or billing control.

Settings are global: $PI_CODING_AGENT_DIR/extensions/linkup.json, normally ~/.pi/agent/extensions/linkup.json. For example:

{
  "proxyUrl": "https://proxy.example.com/linkup/v1",
  "toolExposure": {
    "linkup_web_search": "deferred"
  }
}

Each tool, balance command, and settings command is independently selectable in pi config. Settings remain available without an API key.

Results and costs

Display output is bounded to 2000 lines / 50 KB per call. Truncated content is retained in private temp files. Expand results using your configured shortcut (default Ctrl+O).

Codemode receives complete structured data separately from display previews:

  • Search: query, results, and optional schema-derived data.
  • Answer: query, answer, and sources.
  • Fetch: url, markdown, and optional data, favicon, rawContent, contentType, and images.

Always check truncated: results up to 1 MiB return truncated: false with inline fields. Larger results return only { truncated: true, fullOutputPath }; read the private JSON file for the complete result.

Successful calls add published-rate USD estimates to Pi session totals, not provider-reported billing. Schema-shaped search uses the answer rate; fetch cost depends on JavaScript, Pro mode, and structured extraction. See Linkup pricing for rates. Run /linkup:balance for credits and approximate remaining calls.

Compatibility and development

Tool exposure and structured results require Pi 0.99.0 or later. Use a Node.js version supported by your Pi installation.

From a checkout:

pnpm install
pnpm typecheck && pnpm lint && pnpm test
pi -e .

Use pnpm format for formatting and pnpm changeset for user-facing changes.

Links

License

MIT