Best for
- Runtime and resource constraints
- Decision gate — before adding a Git Call, confirm ALL of these
- Use Git Call ONLY for (native nodes truly cannot):
corezoid/corezoid-ai-plugin/plugins/corezoid/skills/corezoid-gitcall/SKILL.md
Corezoid Git Call node specialist — run custom code (Python, Go, Java, PHP, JavaScript, Clojure, Lisp, Prolog, or a custom Dockerfile) as a step inside a process. Use when the user needs logic that plain nodes cannot do: parsing files, using external libraries, cryptography, building email/attachments, or any custom runtime. Activate on "git call", "gitcall", "run my code", "parse a file", "use a library", "custom code node", "python/go/php in a process", or "why does push-process hang on git_ca
Decision brief
A Git Call node runs your code (9 built-in languages, or a custom Docker image) in an isolated container as one step of a process. Each task is delivered to a handle function over JSON-RPC 2.0; the value you return becomes the payload of the next node.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/corezoid/corezoid-ai-plugin --skill "plugins/corezoid/skills/corezoid-gitcall"Inspect the Agent Skill "corezoid-gitcall" from https://github.com/corezoid/corezoid-ai-plugin/blob/e5466f3ce7805eb5a58a80e49535b05d4d5fe91c/plugins/corezoid/skills/corezoid-gitcall/SKILL.md at commit e5466f3ce7805eb5a58a80e49535b05d4d5fe91c. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
The container build runs on Corezoid's build service and is driven over a WebSocket (wss://ws./api/1/sockjson), authenticated with the same Simulator access token as the HTTP API. push-process opens the socket after uploading the source, sends a monitorshow/functionbuild/status:…
Git Call is one of the most constrained nodes on the platform. Use it only when a step needs a capability that native nodes and a Code (apicode) node cannot provide — parsing a file, an external library, cryptography, or a custom runtime — and the work finishes comfortably withi…
For work that waits, polls, or retries over time, model progress as process state transitions (condition+delay) or resume through a callback. Those patterns do not hold one Git Call handler open, but they remain subject to normal platform/process limits.
1. It genuinely cannot be done with native nodes (setparam, condition, delay, api/apirpc, apicode, dbcall, apisum, apicopy). 2. It cannot be done in a Code (apicode) node (JS with the platform's built-ins) — try this first for any transform/parse/compute. 3. It comfortably finis…
Parse a file (download a URL and read a 1C .1CD, XML, PDF, QR, image, …).
Permission review
The documentation includes network, browsing, or remote request actions.
Parse a file (download a URL and read a 1C `.1CD`, XML, PDF, QR, image, …).Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 92/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 73 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
A Git Call node runs your code (9 built-in languages, or a custom Docker image)
in an isolated container as one step of a process. Each task is delivered to a
handle function over JSON-RPC 2.0; the value you return becomes the payload of
the next node.
Git Call is one of the most constrained nodes on the platform. Use it only
when a step needs a capability that native nodes and a Code (api_code) node
cannot provide — parsing a file, an external library, cryptography, or a custom
runtime — and the work finishes comfortably within the observed runtime
budget. For everything else use the native alternative. "One code block is
easier to write" is not one of those capabilities.
__conveyor_git_call_return_type_tag__ = git_call_executing_error, description
usercode: timeout). In those measurements, inline cold and warm runs ended at
the same point; custom images may have different startup overhead./tmp, are ephemeral and must not be used as state between runs.For work that waits, polls, or retries over time, model progress as process state
transitions (condition+delay) or resume through a callback. Those patterns do
not hold one Git Call handler open, but they remain subject to normal
platform/process limits.
set_param, condition, delay,
api/api_rpc, api_code, db_call, api_sum, api_copy).api_code) node (JS with the platform's
built-ins) — try this first for any transform/parse/compute.condition+delay) or a callback, never in one
Git Call invocation.If any answer is "no", do not use Git Call.
.1CD, XML, PDF, QR, image, …).condition+delay, or a callback).api/api_rpc).api_code).| Aspect | Native nodes / api_code | Git Call |
|---|---|---|
| Runtime model | Platform node execution | Container handler; ~60 s deadline observed in hosted tests |
| Warm-up | None for ordinary native nodes | Container build + dispatch |
| Memory / CPU | Platform-managed | 50 MB / 0.1 CPU defaults from a shared, configurable pool |
| Concurrency | Node-specific | Shared capacity can introduce contention |
| State/storage | Task/process state | No persistent local storage; /tmp is ephemeral |
| External deps | Built-in capabilities | External libraries and custom runtimes supported |
Selection rule: default to native nodes + api_code. Use Git Call only when a
file to parse, an external library, cryptography, or a custom runtime leaves no
native way to do it, and keep each invocation short, bounded, and within the
configured resource allocation.
| Language | Version | Package manager | OS |
|---|---|---|---|
| JavaScript | node v20 | yarn, npm | alpine 3.17 |
| Go | v1.23 | go mod | alpine 3.20 |
| Python | v3.12 | pip | alpine 3.17 |
| Java | v22 | gradle | alpine 3.15 |
| PHP | v8.3 | composer 2.5.4 | alpine 3.17 |
| Clojure | v1.11.1 | lein 2.10 | alpine 3.17 |
| Lisp | v2.4.8 | roswell | Ubuntu 18.04 |
| Prolog | swipl v9.2.7 | swipl | debian bullseye |
| Dockerfile | any | — | your own image |
Git Call requests originate from 54.171.15.37, 108.128.68.222,
63.33.226.230. Whitelist these if a private repo or resource blocks access.
The handler receives the task payload and returns the next payload (or throws to
produce an error). In Git-Repo mode the entry file is usercode.<ext>.
# python — usercode.py
def handle(data):
data['result'] = 'ok'
return data
// js — usercode.js (CommonJS; for ESM use import/export default, .mjs, or "type":"module")
module.exports = (data) => { data.result = 'ok'; return data; };
// go — usercode.go
package main
import ("context"; "github.com/corezoid/gitcall-go-runner/gitcall")
func usercode(_ context.Context, data map[string]interface{}) error { data["result"]="ok"; return nil }
func main() { gitcall.Handle(usercode) }
// php — usercode.php
<?php
function handle($data) { $data['result']="ok"; return $data; }
// java — Usercode.java (fully-qualified name com.corezoid.usercode.Usercode is mandatory)
package com.corezoid.usercode;
import com.corezoid.gitcall.runner.api.UsercodeHandler;
import java.util.Map;
public class Usercode implements UsercodeHandler<Map<String,String>,Map<String,String>> {
public Map<String,String> handle(Map<String,String> data) throws Exception { data.put("result","ok"); return data; }
}
% prolog — usercode.pl
:- module(usercode, [handle/2]).
handle(Data, Result) :- put_dict(result, Data, "ok", Result).
;; lisp — usercode.lisp
(defpackage #:usercode (:use #:cl) (:export :handle))
(in-package #:usercode)
(defun handle (data) (setf (gethash 'result data) 'ok) data)
;; clojure — usercode.clj
(ns usercode.usercode)
(defn handle [data] (assoc data :result "ok"))
Runnable examples (hello_world, http_request, user_error, dependency demos)
for every language: https://github.com/corezoid/gitcall-examples.
Install dependencies with a Build command (Code editor) or a manifest file (Git Repo):
| Language | Build command (Code editor) | Manifest (Git Repo) |
|---|---|---|
| JS | npm install [email protected] [email protected] | package.json |
| Python | pip install 'pycryptodomex==3.20' | requirements.txt |
| Go | (latest versions resolved automatically) | go.mod |
| Java | a gradle command | build.gradle (+ ./gradlew build) |
| PHP | composer require guzzlehttp/guzzle:^7.0 | composer.json |
| Clojure | lein change :dependencies conj '[...]' && lein install | project.clj |
| Lisp | none — (ql:quickload '(:cl-mustache) :silent t) in code | — |
| Prolog | swipl -g "pack_install(matrix,[interactive(false)])." | (same command) |
No dependencies → empty Build command.
push-process deploys Git Call nodes automatically (as of the git_call build
support in this plugin). Just author the node like any other and push:
type is git_call, set lang and either code
(inline) or repo/commit/path/script (Git Repo).push-process — it uploads the source, builds the container on the build
service, and commits. Every runtime (JavaScript included) is built before the
commit; JavaScript just builds fastest (a few seconds) since it installs no
compiler toolchain.Builds take ~5 s (JavaScript) to ~20–120 s (compiled runtimes, first build with
dependency install), then build from cache. run-task reports the task settling
on a non-final node while the build runs — that is expected; the result merges
into the task payload asynchronously.
Override the build endpoint for on-prem installs with COREZOID_WS_URL.
The container build runs on Corezoid's build service and is driven over a
WebSocket (wss://ws.<host>/api/1/sock_json), authenticated with the same
Simulator access token as the HTTP API. push-process opens the socket after
uploading the source, sends a monitor_show/function_build/status:"on"
frame to start the build, keeps the socket alive (client sends "0", server
answers "1"), waits for log:{"type":"done"}, then commits. You do not need to
do any of this by hand — it is only useful to know when debugging a build.
Request to your code: {"jsonrpc":"2.0","method":"handle","id":"…","params":{…}}.
Success: {"jsonrpc":"2.0","id":"…","result":{…}}. Error:
{"jsonrpc":"2.0","id":"…","error":{"code":…,"message":"…"}}.
For a custom Dockerfile, run an HTTP server on $GIT_CALL_PORT, handle POST
requests per JSON-RPC 2.0, run as user 501:501, and treat the container as
read-only (/tmp is writable).
On failure the task carries these fields (routed to the auxiliary condition
output): __conveyor_git_call_return_type_error__ (Hardware = system, retry;
Software = code/settings), __conveyor_git_call_return_type_tag__
(git_call_return_format_error, git_call_executing_error,
git_call_is_not_supported = the node is v1, use v2, code_return_size_overflow,
git_call_fatal_error), and __conveyor_git_call_return_type_description__.
Common issues:
no response from server — an older plugin without
git_call build support. Upgrade the plugin.source has to be built — the container was not built before commit
(should not happen via push-process; if authoring by hand, build first).usercode module has no handle function — the entry handle is missing,
or a stale build instance — rebuild.Each container defaults to 100 millicpu (0.1 CPU) and 50 MB RAM from a resource pool shared by Git Call nodes. The exact scope and allocation are deployment-specific; ask a super-admin to inspect or adjust them before relying on Git Call for heavier or highly concurrent workloads.
Frequently asked questions
A Git Call node runs your code (9 built-in languages, or a custom Docker image) in an isolated container as one step of a process. Each task is delivered to a handle function over JSON-RPC 2.0; the value you return becomes the payload of the next node.
The source record exposes this install command: npx skills add https://github.com/corezoid/corezoid-ai-plugin --skill "plugins/corezoid/skills/corezoid-gitcall". Inspect the command and pinned source before running it.
Static rules flagged network in the source; the page lists the matching lines and excerpts.
Alternatives
terrylica/cc-skills
Control Notion via Python SDK. TRIGGERS - Notion API, create page, query database, add blocks.
K-Dense-AI/scientific-agent-skills
Distributed computing for larger-than-RAM pandas/NumPy workflows. Use when you need to scale existing pandas/NumPy code beyond memory or across clusters. Best for parallel file processing, distributed ML, integration with existing pandas code. For out-of-core analytics on single machine use vaex; for in-memory speed use polars.
K-Dense-AI/scientific-agent-skills
Medicinal chemistry filters for compound triage. Apply drug-likeness rules (Lipinski, Veber, CNS), structural alert catalogs (PAINS, NIBR, ChEMBL), complexity metrics, and the medchem query language for library filtering.
K-Dense-AI/scientific-agent-skills
Use NeuroKit2 to build or audit reproducible research workflows for physiological time-series preprocessing, event/interval analysis, multimodal alignment, variability, and complexity. Trigger when code imports neurokit2 or needs its current APIs, schemas, and method-aware validation—not for diagnosis or device validation.