diff --git a/devtoolslib/paths.py b/devtoolslib/paths.py
index 502636a..8c592ae 100644
--- a/devtoolslib/paths.py
+++ b/devtoolslib/paths.py
@@ -37,7 +37,7 @@
   return os.path.join(ancestor, target_relpath)
 
 
-def infer_paths(is_android, is_debug, target_cpu):
+def infer_params(is_android, is_debug, target_cpu):
   """Infers the locations of select build output artifacts in a regular
   Chromium-like checkout. This should grow thinner or disappear as we introduce
   per-repo config files, see https://github.com/domokit/devtools/issues/28.
@@ -51,19 +51,24 @@
   out_build_dir = os.path.join('out', build_dir)
 
   root_path = find_ancestor_with(out_build_dir)
-  paths = collections.defaultdict(lambda: None)
+  params = collections.defaultdict(lambda: None)
   if not root_path:
-    return paths
+    return params
 
   build_dir_path = os.path.join(root_path, out_build_dir)
-  paths['build_dir_path'] = build_dir_path
+  params['build_dir_path'] = build_dir_path
   if is_android:
-    paths['shell_path'] = os.path.join(build_dir_path, 'apks', 'MojoShell.apk')
-    paths['adb_path'] = os.path.join(root_path, 'third_party', 'android_tools',
+    params['shell_path'] = os.path.join(build_dir_path, 'apks', 'MojoShell.apk')
+    params['adb_path'] = os.path.join(root_path, 'third_party', 'android_tools',
                                 'sdk', 'platform-tools', 'adb')
   else:
-    paths['shell_path'] = os.path.join(build_dir_path, 'mojo_shell')
-  return paths
+    params['shell_path'] = os.path.join(build_dir_path, 'mojo_shell')
+
+  mojo_version_file = find_within_ancestors('MOJO_VERSION')
+  if mojo_version_file:
+    with open(mojo_version_file) as f:
+      params['mojo_version'] = f.read().strip()
+  return params
 
 
 # Based on Chromium //tools/find_depot_tools.py.
diff --git a/devtoolslib/shell_config.py b/devtoolslib/shell_config.py
index ace522b..e1c04fe 100644
--- a/devtoolslib/shell_config.py
+++ b/devtoolslib/shell_config.py
@@ -61,7 +61,10 @@
                       action='store_true')
   parser.add_argument('--shell-path', help='Path of the Mojo shell binary.')
   parser.add_argument('--origin', help='Origin for mojo: URLs. This can be a '
-                      'web url or a local directory path.')
+                      'web url or a local directory path. If MOJO_VERSION file '
+                      'is among ancestors of this file, by default the origin '
+                      'will point to mojo services prebuilt at the '
+                      'specified version in Google Storage')
   parser.add_argument('--map-url', action='append',
                       help='Define a mapping for a url in the format '
                       '<url>=<url-or-local-file-path>')
@@ -143,22 +146,34 @@
   """
   # Infer paths based on the Chromium configuration options
   # (--debug/--release, etc.), if running within a Chromium-like checkout.
-  inferred_paths = paths.infer_paths(script_args.android, script_args.debug,
-                                     script_args.target_cpu)
-  shell_config = ShellConfig()
+  inferred_params = paths.infer_params(script_args.android, script_args.debug,
+                                       script_args.target_cpu)
+  inferred_origin = None
+  if inferred_params['mojo_version']:
+    inferred_origin = "https://storage.googleapis.com/mojo/services"
+    if script_args.android:
+      inferred_origin += "/android-arm"
+    else:
+      inferred_origin += "/linux-x64"
+    # Get the versions that were built against Modular's version of the SDK.
+    inferred_origin += "/%s" % inferred_params['mojo_version']
+    if script_args.verbose:
+      print('Inferring origin from `MOJO_VERSION` as: ' +
+            inferred_origin)
 
+  shell_config = ShellConfig()
   shell_config.android = script_args.android
   shell_config.shell_path = (script_args.shell_path or
-                             inferred_paths['shell_path'])
-  shell_config.origin = script_args.origin
+                             inferred_params['shell_path'])
+  shell_config.origin = script_args.origin or inferred_origin
   shell_config.map_url_list = script_args.map_url
   shell_config.map_origin_list = script_args.map_origin
   shell_config.reuse_servers = script_args.reuse_servers
   shell_config.verbose = script_args.verbose
 
   # Android-only.
-  shell_config.adb_path = (script_args.adb_path or inferred_paths['adb_path'] or
-                           'adb')
+  shell_config.adb_path = (script_args.adb_path or inferred_params['adb_path']
+                           or 'adb')
   shell_config.target_device = script_args.target_device
   shell_config.logcat_tags = script_args.logcat_tags
 
@@ -166,8 +181,8 @@
   shell_config.use_osmesa = script_args.use_osmesa
 
   if (shell_config.android and not shell_config.origin and
-      inferred_paths['build_dir_path']):
-    shell_config.origin = inferred_paths['build_dir_path']
+      inferred_params['build_dir_path']):
+    shell_config.origin = inferred_params['build_dir_path']
 
   # Read the mojoconfig file.
   config_file = script_args.config_file
@@ -182,9 +197,9 @@
           alias_from, alias_to = alias_spec.split('=')
           config_file_aliases.append(('@{%s}' % alias_from, alias_to))
 
-      if inferred_paths['build_dir_path']:
+      if inferred_params['build_dir_path']:
         config_file_aliases.append(('@{BUILD_DIR}',
-                                    inferred_paths['build_dir_path']))
+                                    inferred_params['build_dir_path']))
 
       config = None
       try:
diff --git a/docs/mojo_run.md b/docs/mojo_run.md
index 11758b6..ad4f0e2 100644
--- a/docs/mojo_run.md
+++ b/docs/mojo_run.md
@@ -69,3 +69,12 @@
 mkdir ~/another_home
 HOME=~/another_home mojo_run APP_URL --reuse-servers
 ```
+
+## Setting default mojo origin
+
+When run outside of the `domokit/mojo` repository, `mojo_run` needs `--origin`
+parameter to indicate where binaries of the core mojo services come from. If a
+`MOJO_VERSION` file is present among ancestors of `mojo_run` and `--origin`
+parameter is not set, origin will point to Google Storage location storing
+binaries of core mojo services built at the git revision indicated in
+`MOJO_VERSION`.
