Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/nihalashetty/forge/forge-platformnpx skills add nihalashetty/Forge --skill forge-platformgit clone --depth 1 https://github.com/nihalashetty/ForgeWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00076 | $0.02080 |
| Opus 5 | $0.00038 | $0.01040 |
| Sonnet 5 | $0.00015 | $0.00416 |
| Haiku 4.5 | $0.00008 | $0.00208 |
Grade A, and why
forge-platform scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 140 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Forge platform deep guide
You are embedded in Forge, a visual builder for LangChain/LangGraph agents. Workflows are
JSON definitions compiled to LangGraph StateGraphs. This guide covers the rules the canned
builder tools don't teach. For the live catalog always call list_node_types,
get_node_schema(type), and list_middleware_types - they read the real registry.
Workflow definition shape
{
"state": {"messages": {"type": "list[message]", "reducer": "add_messages"},
"intent": {"type": "str", "reducer": "last"}},
"entry_node": "start",
"nodes": [{"id": "start", "type": "start", "config": {}, "position": {"x": 40, "y": 200}}],
"edges": [{"source": "start", "target": "..."}]
}
Rules:
- Exactly one
startnode; at least oneendnode; every node reachable; a path must reach end. - Every state key a node WRITES must be declared in
state(LangGraph rejects undeclared writes).create_custom_workflowauto-declares keys for known node configs, but declare customoutput_keys yourself. Types: str, int, float, bool, json, list[str], list[json], list[message]. Reducers: last (overwrite), add (append lists), merge (dict merge), add_messages (chat history). - Messages flow on the
messageschannel; nodes append, never replace.
Routing patterns
- Triage first (almost every support/chatbot graph): right after
start, classify the message into at leastgeneralvssupport, thenrouterit. Sendgeneral(greetings, smalltalk, "what can you do?", capability/meta questions) to a small friendly agent that answers directly and goes toend; route onlysupportinto the retrieval/ticket pipeline. Without this, greetings and meta questions fall through retrieval, miss, and dead-end at a "no relevant data → create a ticket" path - a bad first impression. Shape: start → classify(general|support) → router → {general: greeter_agent → end, support: retrieval → … → end}. (Simpler alt: one front agent with a knowledge_search tool that both chats and answers.) - Single intent:
classifier(labels, output_key=intent) →router(expression=intent, cases {label: node_id}, default=fallback_node). Case KEYS are the exact VALUES the expression takes, not display labels. - ALWAYS give routers a
default- with no default, an unmatched value silently ends the run with no answer. - MULTI-INTENT (a question with several asks): classifier
multi_label: truewrites a LIST to state (declare itlist[str]); routermulti: trueroutes to EVERY matching case in parallel. All branches then converge on ONE synthesizer agent node before end - its prompt: "compose the partial answers above into one coherent reply". Without a synthesizer the user sees only the last branch's answer. - Simpler multi-intent alternative (preferred for support bots): ONE agent with
config.knowledgeenabled (rag and/or qa) plus any REST tools. The agent searches the KB once per sub-question and composes one answer itself. Fewer nodes, no fan-out needed. - Conditional on retrieval success: retrieval
route_keywrites "yes"/"no"; human decisions: human_inputoutput_keywrites the decision string.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 140 lines · 76 tokens per session scan A de66686363d0
forge-platform is a skill published in the GitHub repository nihalashetty/Forge (157 stars, last pushed 9d ago), licensed MIT. It adds 76 tokens to every session and 2,080 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
project-graveyard
Scans the developer's machine for dead side projects, autopsies each one from its git history (died at the payments wall, killed by a newer project, finished but never shipped), surfaces their personal death patterns, and picks the corpse most worth resurrecting — then helps ship it. Use when the user mentions…
mcp-apps-builder
MANDATORY for ALL MCP server work - mcp-use framework best practices and patterns. READ THIS FIRST before any MCP server work, including: Creating new MCP servers Modifying existing MCP servers (adding/updating tools, resources, prompts, widgets) Debugging MCP server issues or errors Reviewing MCP server code for…
commit-archaeologist
Reconstructs why code exists from local git history, including the introducing commit, later changes, current authors, repeated companion files, and likely intent. Use when the user asks "why does this code exist", "who wrote this function and why", or to "explain the history of this function" before a rewrite…
dependency-doctor
Checks requirements.txt, pyproject.toml, and package.json dependency manifests for surface-level direct-dependency footguns: standard-library shadowing pins, abandoned backports, unpinned dependencies, and obvious intra-manifest conflicts, plus opt-in PyPI yanked releases. Use when the user asks to check a manifest…
scope-creep-detector
Analyzes git diffs against a stated intent to detect scope creep, unrelated files, broad pull requests, changes that grew beyond a fix, dependency additions, public API renames, config or CI edits, oversized hunks, and formatting-only files. Use when the user asks whether a change grew beyond the fix, a PR is too…
data-visualization
Use for creating publication-quality charts and multi-panel analysis summaries. Triggers when tasks involve visualizing data, plotting results, creating charts, or producing visual reports from analysis output.