Entropic 2.14.3
Local-first agentic inference engine
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
25#include <cstdio>
26#include <cstring>
27#include <string>
28
29namespace entropic::cli {
30
31int run_mcp_bridge(int argc, char* argv[]);
32int run_version();
33int run_serve(int argc, char* argv[]);
34int run_download(int argc, char* argv[]);
35
36} // namespace entropic::cli
37
43static void print_usage()
44{
45 std::fprintf(stderr,
46 "Usage: entropic <subcommand> [options]\n"
47 "\n"
48 "Subcommands:\n"
49 " mcp-bridge Relay MCP/stdio to a running engine's unix socket\n"
50 " serve Host the engine for every MCP client over HTTP\n"
51 " download Fetch a bundled GGUF model\n"
52 " version Print engine version\n"
53 "\n"
54 "Options for mcp-bridge:\n"
55 " --project-dir DIR Project directory whose engine to bridge to\n"
56 " (default: cwd). The bridge does NOT start an\n"
57 " engine; one must already be running for the\n"
58 " same project directory.\n"
59 " --socket PATH Override socket discovery (bypasses the\n"
60 " project_dir hash). For non-standard engine\n"
61 " deployments and deterministic testing.\n"
62 "\n"
63 "Options for serve (v2.14.0):\n"
64 " --config FILE Engine config (YAML)\n"
65 " --port N Serve MCP at http://127.0.0.1:N/mcp; clients send\n"
66 " the bearer token in ~/.entropic/serve/N.token\n"
67 " SIGUSR1 frees model weights and keeps serving\n"
68 "\n"
69 "Options for download:\n"
70 " --list List available model keys\n"
71 " --dir DIR Override target directory\n"
72 " (default: $ENTROPIC_MODEL_DIR or ~/.entropic/models)\n"
73 "\n"
74 "Example .mcp.json — connect Claude Code to a running engine:\n"
75 " {\"mcpServers\": {\"entropic\": {\n"
76 " \"type\": \"stdio\", \"command\": \"entropic\",\n"
77 " \"args\": [\"mcp-bridge\"]\n"
78 " }}}\n");
79}
80
81namespace {
82
83using SubcommandFn = int (*)(int, char*[]);
84
85struct Subcommand {
86 const char* name;
87 SubcommandFn run;
88};
89
96int run_version_adapter(int, char*[])
97{
99}
100
101constexpr Subcommand kSubcommands[] = {
102 {"mcp-bridge", entropic::cli::run_mcp_bridge},
103 {"version", run_version_adapter},
104 {"download", entropic::cli::run_download},
105 {"serve", entropic::cli::run_serve}, // gh#204 (v2.14.0)
106};
107
108} // anonymous namespace
109
120int main(int argc, char* argv[])
121{
122 std::string sub = (argc >= 2) ? argv[1] : "";
123 for (const auto& entry : kSubcommands) {
124 if (sub == entry.name) {
125 return entry.run(argc - 1, argv + 1);
126 }
127 }
128 bool help = (sub == "--help" || sub == "-h" || sub == "help");
129 if (!help && !sub.empty()) {
130 std::fprintf(stderr, "entropic: unknown subcommand '%s'\n\n",
131 sub.c_str());
132 }
133 print_usage();
134 return help ? 0 : 1;
135}
int run_download(int argc, char *argv[])
Handle entropic download subcommand.
Definition download.cpp:370
int main(int argc, char *argv[])
CLI entry point — dispatch to subcommand.
Definition main.cpp:120
static void print_usage()
Print top-level usage to stderr.
Definition main.cpp:43
int run_serve(int argc, char *argv[])
entropic serve entry point.
Definition serve.cpp:154
int run_version()
Print the engine version and exit.
Definition version.cpp:20
int run_mcp_bridge(int argc, char *argv[])
Entry point for the mcp-bridge subcommand.
@ optional
optional: every escape asks the host's path approver