task: metadata: install: pip install -e .[dev]
patch: diff --git a/docs/source/tutorial.rst b/docs/source/tutorial.rst
index 74942ae..bd61a13 100644
--- a/docs/source/tutorial.rst
+++ b/docs/source/tutorial.rst
@@ -7,22 +7,22 @@ Tutorial
 Outcome provides a function for capturing the outcome of a Python
 function call, so that it can be passed around. The basic rule is::
 
-    result = outcome.capture(f, *args)
+    result = outcome.capture(f, *args, **kwargs)
     x = result.unwrap()
 
 is the same as::
 
-    x = f(*args)
+    x = f(*args, **kwargs)
 
 even if ``f`` raises an error.
 
 On Python 3.5+, there's also :func:`acapture`::
 
-    result = await outcome.acapture(f, *args)
+    result = await outcome.acapture(f, *args, **kwargs)
     x = result.unwrap()
 
 which, like before, is the same as::
 
-    x = await f(*args)
+    x = await f(*args, **kwargs)
 
 See the :ref:`api-reference` for the types involved.
diff --git a/src/outcome/_async.py b/src/outcome/_async.py
index dabc726..293e5c0 100644
--- a/src/outcome/_async.py
+++ b/src/outcome/_async.py
@@ -7,8 +7,8 @@ from ._sync import (
 __all__ = ['Error', 'Outcome', 'Value', 'acapture', 'capture']
 
 
-def capture(sync_fn, *args):
-    """Run ``sync_fn(*args)`` and capture the result.
+def capture(sync_fn, *args, **kwargs):
+    """Run ``sync_fn(*args, **kwargs)`` and capture the result.
 
     Returns:
       Either a :class:`Value` or :class:`Error` as appropriate.
@@ -16,20 +16,20 @@ def capture(sync_fn, *args):
     """
     # _sync.capture references ErrorBase and ValueBase
     try:
-        return Value(sync_fn(*args))
+        return Value(sync_fn(*args, **kwargs))
     except BaseException as exc:
         return Error(exc)
 
 
-async def acapture(async_fn, *args):
-    """Run ``await async_fn(*args)`` and capture the result.
+async def acapture(async_fn, *args, **kwargs):
+    """Run ``await async_fn(*args, **kwargs)`` and capture the result.
 
     Returns:
       Either a :class:`Value` or :class:`Error` as appropriate.
 
     """
     try:
-        return Value(await async_fn(*args))
+        return Value(await async_fn(*args, **kwargs))
     except BaseException as exc:
         return Error(exc)
 
diff --git a/src/outcome/_sync.py b/src/outcome/_sync.py
index 5c06264..a74bbc3 100644
--- a/src/outcome/_sync.py
+++ b/src/outcome/_sync.py
@@ -9,15 +9,15 @@ from ._util import ABC
 __all__ = ['Error', 'Outcome', 'Value', 'capture']
 
 
-def capture(sync_fn, *args):
-    """Run ``sync_fn(*args)`` and capture the result.
+def capture(sync_fn, *args, **kwargs):
+    """Run ``sync_fn(*args, **kwargs)`` and capture the result.
 
     Returns:
       Either a :class:`Value` or :class:`Error` as appropriate.
 
     """
     try:
-        return Value(sync_fn(*args))
+        return Value(sync_fn(*args, **kwargs))
     except BaseException as exc:
         return Error(exc)
 

problem_statement: Support **kwargs in capture/acapture?
I left this out of the original version of this code because in general in trio this is a complicated issue (https://github.com/python-trio/trio/issues/470), and I figured it was better to be consistent with other trio functions like `trio.run`, where we need to reserve kwargs for controlling the parent function. But now that it's a separate library, that doesn't really apply. And `capture` and `acapture` are obviously complete as they stand; there's no way we'll ever want to add any other arguments to them.
repo: python-trio/outcome
test_cmd: pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
test_patch: diff --git a/tests/test_async.py b/tests/test_async.py
index 6166507..9dba615 100644
--- a/tests/test_async.py
+++ b/tests/test_async.py
@@ -11,11 +11,11 @@ pytestmark = pytest.mark.trio
 
 
 async def test_acapture():
-    async def return_arg(x):
+    async def add(x, y):
         await trio.hazmat.checkpoint()
-        return x
+        return x + y
 
-    v = await outcome.acapture(return_arg, 7)
+    v = await outcome.acapture(add, 3, y=4)
     assert v == Value(7)
 
     async def raise_ValueError(x):
diff --git a/tests/test_sync.py b/tests/test_sync.py
index 50c9cc5..73900bb 100644
--- a/tests/test_sync.py
+++ b/tests/test_sync.py
@@ -77,12 +77,12 @@ def test_Value_compare():
 
 
 def test_capture():
-    def return_arg(x):
-        return x
+    def add(x, y):
+        return x + y
 
-    v = outcome.capture(return_arg, 2)
+    v = outcome.capture(add, 2, y=3)
     assert type(v) == Value
-    assert v.unwrap() == 2
+    assert v.unwrap() == 5
 
     def raise_ValueError(x):
         raise ValueError(x)