phacility/phabricator · warning · Exception
No Conduit method provided.
Error message
No Conduit method provided.
What it means
The SSH conduit workflow (ssh ... conduit <method>) parses the method from a wildcard argument. If the argument list is empty, no method name was supplied on the SSH command line and the command aborts with this exception before reading stdin.
Solutions
- Append exactly one Conduit method name after 'conduit', e.g. ssh -p 2222 vcs@host conduit user.whoami.
- Double-check shell quoting so the method is a separate argument, not swallowed into the JSON string.
Example fix
# before
$ echo '{"params":"{}"}' | ssh -p 2222 vcs@phab.example.com conduit
# after
$ echo '{"params":"{}"}' | ssh -p 2222 vcs@phab.example.com conduit user.whoami Defensive patterns
Strategy: validation
Validate before calling
# Compose the SSH command with an explicit method argument.
METHOD="${METHOD:?conduit method required}"
echo "$PAYLOAD" | ssh -p 2222 vcs@phab.example.com conduit "$METHOD" Prevention
- Build the ssh command in a wrapper that requires the method variable.
- Keep the payload generation and ssh invocation in one script so the method token is never forgotten.
When it happens
Trigger: Running `echo '{"params":"{}"}' | ssh -p 2222 vcs@host conduit` while forgetting to append the method name; quoting mistakes that swallow the trailing argument.
Common situations: First experiments with the SSH conduit interface; copy-pasting examples where the trailing method token was dropped in translation.
Understand the failure class
Background: "no subcommand specified" and "... is required": CLI errors when a required argument is missing — this error's family across 13 libraries.
Related errors
- Too many Conduit methods provided.
- Invalid JSON input.
- No such user " " exists.
- Specify a file to read parameters from with "--input".
- Specify a method to call with "--method".
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/b43a59fb4ccc06f0.
Report an issue: GitHub.
Appendix: source
Thrown at src/applications/conduit/ssh/ConduitSSHWorkflow.php:21
final class ConduitSSHWorkflow extends PhabricatorSSHWorkflow {
protected function didConstruct() {
$this->setName('conduit');
$this->setArguments(
array(
array(
'name' => 'method',
'wildcard' => true,
),
));
}
public function execute(PhutilArgumentParser $args) {
$time_start = microtime(true);
$methodv = $args->getArg('method');
if (!$methodv) {
throw new Exception(pht('No Conduit method provided.'));
} else if (count($methodv) > 1) {
throw new Exception(pht('Too many Conduit methods provided.'));
}
$method = head($methodv);
$json = $this->readAllInput();
$raw_params = null;
try {
$raw_params = phutil_json_decode($json);
} catch (PhutilJSONParserException $ex) {
throw new PhutilProxyException(
pht('Invalid JSON input.'),
$ex);
}
$params = idx($raw_params, 'params', '[]');
$params = phutil_json_decode($params);View on GitHub (pinned to 5720a38cfe)