diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9a4f890a3e..a5b37966c0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -97,6 +97,9 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
 * Color author and committer names yellow
 
+* Without a specified revision, `jj new --insert-before` is now equivalent to
+`jj new --insert-before @`; same for `--insert-after`.
+
 ### Fixed bugs
 
 * Update working copy before reporting changes. This prevents errors during reporting
diff --git a/cli/src/commands/new.rs b/cli/src/commands/new.rs
index 70a30cab72..b36aca03f4 100644
--- a/cli/src/commands/new.rs
+++ b/cli/src/commands/new.rs
@@ -63,20 +63,26 @@ pub(crate) struct NewArgs {
     /// No-op flag to pair with --no-edit
     #[arg(long, hide = true)]
     _edit: bool,
-    /// Insert the new change after the given commit(s)
+    /// Insert the new change after the given commit(s), defaults to `@`
     #[arg(
         long,
         short = 'A',
         visible_alias = "after",
-        conflicts_with = "revisions"
+        conflicts_with = "revisions",
+        default_missing_value = "@",
+        // At most one argument per --after, does not restrict repeating --after
+        num_args=0..=1,
     )]
     insert_after: Vec<RevisionArg>,
-    /// Insert the new change before the given commit(s)
+    /// Insert the new change before the given commit(s), defaults to `@`
     #[arg(
         long,
         short = 'B',
         visible_alias = "before",
-        conflicts_with = "revisions"
+        conflicts_with = "revisions",
+        default_missing_value = "@",
+        // At most one argument per --before, does not restrict repeating --before
+        num_args=0..=1,
     )]
     insert_before: Vec<RevisionArg>,
 }
diff --git a/cli/tests/cli-reference@.md.snap b/cli/tests/cli-reference@.md.snap
index 07d888757c..4e003bbd27 100644
--- a/cli/tests/cli-reference@.md.snap
+++ b/cli/tests/cli-reference@.md.snap
@@ -1268,8 +1268,8 @@ For more information, see https://martinvonz.github.io/jj/latest/working-copy/.
 
 * `-m`, `--message <MESSAGE>` — The change description to use
 * `--no-edit` — Do not edit the newly created change
-* `-A`, `--insert-after <INSERT_AFTER>` — Insert the new change after the given commit(s)
-* `-B`, `--insert-before <INSERT_BEFORE>` — Insert the new change before the given commit(s)
+* `-A`, `--insert-after <INSERT_AFTER>` — Insert the new change after the given commit(s), defaults to `@`
+* `-B`, `--insert-before <INSERT_BEFORE>` — Insert the new change before the given commit(s), defaults to `@`
 
 
 
diff --git a/cli/tests/test_new_command.rs b/cli/tests/test_new_command.rs
index 35f9ec87ee..5b00de3750 100644
--- a/cli/tests/test_new_command.rs
+++ b/cli/tests/test_new_command.rs
@@ -224,13 +224,108 @@ fn test_new_insert_after() {
 
     // --after cannot be used with revisions
     let stderr = test_env.jj_cmd_cli_error(&repo_path, &["new", "--after", "B", "D"]);
-    insta::assert_snapshot!(stderr, @r###"
-    error: the argument '--insert-after <INSERT_AFTER>' cannot be used with '[REVISIONS]...'
+    insta::assert_snapshot!(stderr, @r#"
+    error: the argument '--insert-after [<INSERT_AFTER>]' cannot be used with '[REVISIONS]...'
 
-    Usage: jj new --insert-after <INSERT_AFTER> [REVISIONS]...
+    Usage: jj new --insert-after [<INSERT_AFTER>] [REVISIONS]...
 
     For more information, try '--help'.
+    "#);
+}
+
+#[test]
+fn test_new_insert_before_after_no_arg() {
+    let test_env = TestEnvironment::default();
+    test_env.jj_cmd_ok(test_env.env_root(), &["git", "init", "repo"]);
+    let repo_path = test_env.env_root().join("repo");
+    setup_before_insertion(&test_env, &repo_path);
+    test_env.jj_cmd_ok(&repo_path, &["edit", "-r", "B"]);
+    insta::assert_snapshot!(get_short_log_output(&test_env, &repo_path), @r###"
+    ○    F
+    ├─╮
+    │ ○  E
+    ○ │  D
+    ├─╯
+    │ ○  C
+    │ @  B
+    │ ○  A
+    ├─╯
+    ◆  root
     "###);
+
+    let (stdout, stderr) = test_env.jj_cmd_ok(&repo_path, &["new", "--after", "-m", "G"]);
+    insta::assert_snapshot!(stdout, @"");
+    insta::assert_snapshot!(stderr, @r#"
+    Rebased 1 descendant commits
+    Working copy now at: nkmrtpmo cf1ca757 (empty) G
+    Parent commit      : kkmpptxz bfd4157e B | (empty) B
+    "#);
+    insta::assert_snapshot!(get_short_log_output(&test_env, &repo_path), @r#"
+    ○  C
+    @  G
+    ○  B
+    ○  A
+    │ ○    F
+    │ ├─╮
+    │ │ ○  E
+    ├───╯
+    │ ○  D
+    ├─╯
+    ◆  root
+    "#);
+
+    let (stdout, stderr) = test_env.jj_cmd_ok(&repo_path, &["new", "-m", "H", "--before"]);
+    insta::assert_snapshot!(stdout, @"");
+    insta::assert_snapshot!(stderr, @r#"
+    Rebased 2 descendant commits
+    Working copy now at: xznxytkn f9f74f27 (empty) H
+    Parent commit      : kkmpptxz bfd4157e B | (empty) B
+    "#);
+    insta::assert_snapshot!(get_short_log_output(&test_env, &repo_path), @r#"
+    ○  C
+    ○  G
+    @  H
+    ○  B
+    ○  A
+    │ ○    F
+    │ ├─╮
+    │ │ ○  E
+    ├───╯
+    │ ○  D
+    ├─╯
+    ◆  root
+    "#);
+
+    let (stdout, stderr) = test_env.jj_cmd_ok(
+        &repo_path,
+        &["new", "-m", "I", "--after", "--after", "D", "--no-edit"],
+    );
+    insta::assert_snapshot!(stdout, @"");
+    insta::assert_snapshot!(stderr, @r#"
+    Created new commit nmzmmopx 56056dac (empty) I
+    Rebased 3 descendant commits
+    "#);
+    insta::assert_snapshot!(get_short_log_output(&test_env, &repo_path), @r#"
+    ○  C
+    ○  G
+    │ ○  F
+    ╭─┤
+    ○ │    I
+    ├───╮
+    │ │ ○  D
+    @ │ │  H
+    ○ │ │  B
+    ○ │ │  A
+    ├───╯
+    │ ○  E
+    ├─╯
+    ◆  root
+    "#);
+
+    let stderr = test_env.jj_cmd_failure(&repo_path, &["new", "--before", "--after"]);
+    insta::assert_snapshot!(stderr, @r#"
+    Error: Refusing to create a loop: commit f9f74f27408e would be both an ancestor and a descendant of the new commit
+    "#);
 }
 
 #[test]
@@ -346,13 +441,13 @@ fn test_new_insert_before() {
 
     // --before cannot be used with revisions
     let stderr = test_env.jj_cmd_cli_error(&repo_path, &["new", "--before", "B", "D"]);
-    insta::assert_snapshot!(stderr, @r###"
-    error: the argument '--insert-before <INSERT_BEFORE>' cannot be used with '[REVISIONS]...'
+    insta::assert_snapshot!(stderr, @r#"
+    error: the argument '--insert-before [<INSERT_BEFORE>]' cannot be used with '[REVISIONS]...'
 
-    Usage: jj new --insert-before <INSERT_BEFORE> [REVISIONS]...
+    Usage: jj new --insert-before [<INSERT_BEFORE>] [REVISIONS]...
 
     For more information, try '--help'.
-    "###);
+    "#);
 }
 
 #[test]